🔑 Авторизация
Все способы входа в MAX: SMS-код, сохранённый токен, регистрация нового аккаунта.
Методы клиента
connect()
SESSION_INIT · opcode 6
Устанавливает TCP/SSL соединение с api.oneme.ru:443 и инициализирует сессию.
Если в файле сессии уже есть auth_token — автоматически выполняет LOGIN (opcode 19),
загружая профиль, чаты и контакты в кэш.
async with вызывается автоматически. Если токен невалидный или вход ещё не выполнен, соединение откроется, но client.me / client.cached_chats останутся пустыми до успешного LOGIN.await client.connect()
disconnect()
Закрывает TCP-соединение. При использовании async with вызывается автоматически.
await client.disconnect()
send_code(phone)
AUTH_REQUEST · opcode 17
Отправляет запрос на SMS-код. Аналог dg0.java → AUTH_REQUEST + type=START_AUTH.
| Параметр | Тип | Описание |
|---|---|---|
phone | str | Номер в формате "+79999999999" |
code_length, verify_token, alt_action_durationsent = await client.send_code("+79999999999") print(f"Ожидается {sent.code_length}-значный код")
resend_code()
AUTH_REQUEST · opcode 17 (type=RESEND)
Повторная отправка SMS. Требует предварительного вызова send_code().
sign_in(code)
AUTH 18 → LOGIN 19
Проверяет SMS-код и выполняет вход. Внутри: два шага —
- AUTH (opcode 18) — передаёт
verifyCode, получает LOGIN-токен - LOGIN (opcode 19) — финальный вход, загружает профиль + чаты в кэш
| Параметр | Тип | Описание |
|---|---|---|
code | str | Код из SMS |
.success (bool),
.uid (int),
.auth_token (str),
.needs_registration (bool),
.register_token (str)result = await client.sign_in("123456") if result.success: print(f"UID = {result.uid}") elif result.needs_registration: result = await client.sign_up("Иван")
sign_up(first_name, last_name="", register_token=None)
AUTH_CONFIRM · opcode 23
Регистрирует новый аккаунт. Вызывается когда sign_in() вернул needs_registration=True.
| Параметр | Тип | Описание |
|---|---|---|
first_name | str | Имя |
last_name | str | Необязательно. Фамилия |
register_token | str | Необязательно. Токен из sign_in() |
login_with_token(auth_token)
LOGIN · opcode 19
Быстрый вход по уже имеющемуся auth_token в обход SMS. Используется при автоматическом восстановлении сессии.
Свойства после входа
client.uid
UID текущего пользователя (int). Берётся из profile.contact.id LOGIN-ответа.
print(client.uid) # 61091213
client.me
Словарь с профилем текущего пользователя. Загружается один раз при успешном LOGIN.
| Ключ | Тип | Описание |
|---|---|---|
id | int | UID |
name | str | Полное имя |
first_name | str | Имя |
last_name | str | Фамилия |
phone | str | Номер телефона |
country | str | Код страны |
account_status | int | Статус аккаунта |
me = client.me
print(f"{me['name']} ({me['phone']})")
client.me — это уже нормализованный кэш библиотеки. Метод fetch_profile() возвращает другой формат: сырой объект contact c массивом names.client.me тоже нормализованы библиотекой: используйте account_status, first_name, last_name. Ключ accountStatus относится к сырому ответу fetch_profile(), а не к client.me.client.is_authorized
Возвращает True если в сессии есть auth_token.
Файл сессии
Сессия хранится в JSON-файле. Пример содержимого my_session.json:
{
"uid": 61091213,
"phone": "+79999999999",
"auth_token": "eyJhbGciOiJIUzI1NiJ9...",
"proxy_host": "api.oneme.ru"
}
MaxClient("account1"), MaxClient("account2").get_profile() / fetch_profile()
get_profile()
Возвращает профиль из кэша (из LOGIN-ответа). Мгновенно, без сетевого запроса.
client.me)profile = client.get_profile()
print(profile["name"])
Ошибки сервера
{"error": "...", "message": "..."}. Такой ответ нужно проверять вручную.result = await client.get_chat_info(123) if result.get("error"): print(result["error"], result.get("message"))
fetch_profile(user_id=None)
PROFILE · opcode 16
Запрашивает свежий профиль с сервера. Обновляет внутренний кэш.
{"userId": uid}.
Ключ uid (без er) вызывает дисконнект на стороне сервера — использовать только userId.| Параметр | Тип | Описание |
|---|---|---|
user_id | int | Необязательно. UID пользователя. По умолчанию — текущий. |
contact с сервера.
Также обновляет client.me если запрашивали себя.Структура ответа сервера
{
"id": 61091213,
"updateTime": 1774189702185,
"phone": 79999999999,
"names": [{
"name": "Телеграм",
"firstName": "Телеграм",
"lastName": "",
"type": "ONEME"
}],
"options": ["TT", "ONEME"],
"accountStatus": 0,
"country": ""
}
Пример
# Свой профиль contact = await client.fetch_profile() print(contact["names"][0]["name"]) # Профиль другого пользователя contact = await client.fetch_profile(user_id=27993802)