ММФБ Юрий: апгрейд Win10→Win11 25H2 + отчёт клиенту PDF

This commit is contained in:
dttb
2026-04-29 07:51:50 +03:00
parent 441491ea5d
commit 5956b21fcc
77 changed files with 8664 additions and 55 deletions

View File

@@ -0,0 +1,171 @@
#!/usr/bin/env python3
"""Публикует инструкцию Ярославу на Telegra.ph"""
import json
import urllib.parse
import urllib.request
ACCESS_TOKEN = "c38dcadb86e6edd7efc76496d9171d38beef6dc0f6a7ef2cd79bbae70e46"
VPN_KEY = "vpn://AAAIYXjanVVdcpswEH7PKTyevjl1QNiAM5MH100T4vwY06ZpQscjg-yoIYKAbMfN5Ay9RI_Qh850egf3Rl0hDHhMH1LwWOL7Pq1Wq13paacGT90LGceUkTip79duUkw8T3kvVeHFFOhNMCWOVcDrpq4oCtJ0tb5bIUFC0jEM1NE11KmUaKkEqQjs6K1KSUtIVA2Zmm4iU6nSnHhCo1VS9_gxNQATVPOUCb5dyTrpKo12JZctr4oLcMJHEOEJFeGrP7lMwC5EzYVvt4ibW9_NOSS5PGBlTsu4daTKXEtyRYhKpJVNWIbQNqRtQ61tqL0FnXgS0soYRDzzCFzdICiTRLsMO5mLRrsM5sEogTgIwgXxRzRKBHsjcckpzfTdKyxLfH9fQBL5nFvyAkoYt3w5ydX1ZY88ODYd8y_mO2tsX7KO-fHDu4fjuPfYGB7ZSTAJ9g7tcc88KLkjjYA369U2zabaNNVtSRTT-eiOLKUQzd-fzazItr1J_2qpWsNbpnfnR-Z8cnVMNM4YPfcXEekrj1XTRbNxYep_PU8zU5q4sRgn8QR75LPrsq7vxyRJage1fDl7GgLi7bkD4KvB0DrrDj-N4HO39so57F2cv82-QTSAdWJO-mQJ2hct02UnHozRRAfSBLqQI6KPH1NfFPHlqNCHNIEegh7khsuOBVaUEwCSWtcQAJoA8sIBoCVMFtXiMksYES3KWi1rW1nbli38bgaExCJSg9k4oJ5caq_xqfGle5TM8CmPptfzu-lpT_MeHobBZWe-uOh6dnAxPvWn9NA-SMNEklscE1-Odt5wyzBUNRz3LxuOjenRidroRHTv6lZ3rpdTf8GWuvpVH9gtMborq8AaiF3K0363lma6yw6ZH4WUcbEDCmoaalNFTdXU9zUDKSIeAzjyacIhl_qERDigcyK0IqylFLkNE36O70mWsmVLJdU9n60PH6OMR_kckKskGqWzZKbKZR6FMRdw6luBJndFir8oOoXlhMRzEm9Wy4u2Cc6MZ5dVHe7C6fS-EU5XCXiMWSJUUPghD4V25kf1DeHz5rjiOhZqfM_IV4pfi9s3lz3vyDNMXt8-meBZwHv_GpbLEi-mEadhesutvq9-rn6vfv35Bv8_Vj__fMuFLEnvOthk8ZZgJGGRZzm8zg5BbeRGfed55y-IVC9O"
# Telegraph Node helpers
def tag(name, children=None, attrs=None):
n = {"tag": name}
if children is not None:
n["children"] = children if isinstance(children, list) else [children]
if attrs:
n["attrs"] = attrs
return n
def p(*children): return tag("p", list(children))
def h3(text): return tag("h3", [text])
def h4(text): return tag("h4", [text])
def b(text): return tag("strong", [text])
def i(text): return tag("em", [text])
def ul(items): return tag("ul", [tag("li", [c]) if not isinstance(c, dict) else tag("li", [c]) for c in items])
def li_nodes(children): return tag("li", children)
def a(text, href): return tag("a", [text], {"href": href})
def code(text): return tag("code", [text])
def pre(text): return tag("pre", [text])
def hr(): return tag("hr")
def br(): return tag("br")
content = [
p("Привет! Это инструкция в 3 шага. Внизу есть ", b("логин/пароль Apple ID"), " и ", b("ключ VPN"),
" — их можно скопировать одним тапом."),
hr(),
h3("📱 Если у тебя iPhone или iPad"),
h4("Шаг 1. Выйти из своего Apple ID в App Store"),
p("Это нужно только чтобы скачать приложение. Твои фото и контакты никуда не денутся."),
tag("ol", [
tag("li", ["Открой ", b("«Настройки»"), " (серая шестерёнка)."]),
tag("li", ["Наверху нажми на ", b("своё имя"), "."]),
tag("li", ["Пролистай вниз до ", b("«Медиа и покупки»"), " → нажми."]),
tag("li", ["В окошке нажми ", b("«Выйти»"), "."]),
]),
p("⚠️ ", b("Важно!"), " Не нажимай «Выйти» в самом верху на своём имени — это не то. Выходишь ",
b("только"), " в разделе «Медиа и покупки»."),
h4("Шаг 2. Войти в американский Apple ID"),
tag("ol", [
tag("li", ["Открой ", b("App Store"), " (синяя иконка с буквой А)."]),
tag("li", ["В правом верхнем углу — кружок с силуэтом → нажми."]),
tag("li", [b("«Войти»"), " или ", b("«Использовать другой Apple ID»"), "."]),
tag("li", ["Введи логин и пароль — они ниже на этой странице."]),
]),
h4("Шаг 3. Подтверждение входа"),
p("Apple спросит, куда отправить код. Появится список номеров."),
p("→ Выбери номер, ", b("который заканчивается на ...70"), " (это мой)."),
p("→ Я получу SMS и сразу пришлю тебе цифры."),
p("→ Введи их. App Store стал американским."),
h4("Шаг 4. Скачать AmneziaVPN"),
p("В App Store в строке поиска набери ", b("AmneziaVPN"), " → «Загрузить»."),
h4("Шаг 5. Вернуть свой обычный Apple ID (рекомендую)"),
p("Повтори Шаг 1, но в конце войди под своим прежним ID. Приложение останется, обновления будут от меня."),
hr(),
h3("💻 Если у тебя компьютер (Windows / Mac)"),
p("Apple ID не нужен."),
tag("ol", [
tag("li", ["Скачай AmneziaVPN: ", a("github.com/amnezia-vpn/amnezia-client/releases/latest",
"https://github.com/amnezia-vpn/amnezia-client/releases/latest"),
". Windows — файл ", code("AmneziaVPN_x64_*.exe"), ", Mac — ", code("AmneziaVPN.dmg"), "."]),
tag("li", ["Установи, открой."]),
tag("li", ["Скопируй ключ VPN снизу этой страницы."]),
tag("li", ["В программе: ", b("«+»"), "", b("«Вставить из буфера обмена»"), "."]),
tag("li", ["Нажми большую кнопку включения."]),
]),
h3("🤖 Если у тебя Android"),
p("Apple ID не нужен."),
tag("ol", [
tag("li", ["Открой Google Play, найди ", b("AmneziaVPN"), ", установи. Если в Play нет — скачай APK: ",
a("github.com/amnezia-vpn/amnezia-client/releases/latest",
"https://github.com/amnezia-vpn/amnezia-client/releases/latest"), "."]),
tag("li", ["Скопируй ключ VPN снизу этой страницы."]),
tag("li", ["В AmneziaVPN: ", b("«+»"), "", b("«Вставить»"), "."]),
tag("li", ["Нажми большую кнопку включения."]),
]),
hr(),
h3("🔑 Подключить VPN (после установки)"),
tag("ol", [
tag("li", ["Скопируй ключ ", code("vpn://..."), " внизу этой страницы (тап по блоку с ключом)."]),
tag("li", ["Открой ", b("AmneziaVPN"), "."]),
tag("li", ["Нажми ", b("«+»"), " (или «Добавить сервер»)."]),
tag("li", [b("«Вставить из буфера обмена»"), " (англ. «Import from clipboard»)."]),
tag("li", ["Сервер добавится сам."]),
]),
h3("▶️ Включить"),
p("На главном экране AmneziaVPN — ", b("большая круглая кнопка"), ". Нажми."),
p("Всплывёт окошко ", b("«Разрешить подключения VPN»"), "", b("«Разрешить»"),
". Введи пароль от телефона если попросит."),
p("Кнопка станет ", b("зелёной"), " — VPN работает."),
h3("✅ Проверить"),
p("Открой в Safari ", a("2ip.ru", "https://2ip.ru"), ". Должна показаться ",
b("другая страна"), " (не Россия). Значит всё."),
hr(),
h3("📲 Поделиться с другим своим устройством"),
p("Не проси у меня — AmneziaVPN сам делится:"),
tag("ol", [
tag("li", ["В AmneziaVPN на рабочем устройстве нажми на сервер → иконка ", b("«i»"),
" / ", b("«Подробнее»"), "", b("«Поделиться подключением»"), "."]),
tag("li", ["Получишь ссылку → отправь себе в Telegram «Избранное» или на почту."]),
tag("li", ["На втором устройстве установи AmneziaVPN → скопируй ссылку → «+» → «Вставить»."]),
]),
hr(),
h3("🍏 Apple ID (США) — логин и пароль"),
p(i("Тапни по строке чтобы скопировать.")),
pre("hbuggle819@icloud.com"),
pre("App5870w"),
p("При входе — выбирай номер для кода ", b("на ...70"),
". Напиши мне когда Apple попросит код."),
hr(),
h3("🔐 Ключ VPN"),
p(i("Тапни по блоку ниже → «Копировать». Потом в AmneziaVPN «+» → «Вставить из буфера обмена».")),
pre(VPN_KEY),
hr(),
h3("❓ Если что-то идёт не так"),
tag("ul", [
tag("li", [b("Не пришёл код от Apple"), " — напиши, перевышлю."]),
tag("li", [b("Кнопка не зелёная, пишет «ошибка»"),
" — закрой приложение (свайпни вверх), открой снова. Не помогло — перезагрузи телефон."]),
tag("li", [b("Android, VPN отваливается"),
" — «Настройки телефона → Приложения → AmneziaVPN → Батарея → Без ограничений»."]),
tag("li", [b("iPhone «Профиль VPN не найден»"),
" — «Настройки → Основные → VPN и управление устройством». Если профиль AmneziaVPN там есть, удали его, вернись в AmneziaVPN и снова нажми «+» → «Вставить»."]),
]),
p("Совсем не получается — скинь мне скриншот того что видишь, разберёмся вместе."),
]
data = urllib.parse.urlencode({
"access_token": ACCESS_TOKEN,
"title": "Настройка VPN",
"author_name": "Олег",
"content": json.dumps(content, ensure_ascii=False),
"return_content": "false",
}).encode()
req = urllib.request.Request("https://api.telegra.ph/createPage", data=data)
with urllib.request.urlopen(req) as resp:
result = json.loads(resp.read().decode())
print(json.dumps(result, ensure_ascii=False, indent=2))