ММФБ Юрий: апгрейд Win10→Win11 25H2 + отчёт клиенту PDF
This commit is contained in:
171
snippets/telegraph-publish-client-instruction.py
Normal file
171
snippets/telegraph-publish-client-instruction.py
Normal 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))
|
||||
Reference in New Issue
Block a user