client.chats содержит чаты из login/sync, а не полный список аккаунта. На
повторном запуске Max может вернуть только изменения по сохраненному
chats_sync. Используйте fetch_chats(), get_chat(chat_id) или
ExtraConfig(sync=SyncOverrides(chats_sync=-1)) для следующего login.
Проверьте, что await client.start() действительно запущен, handler
зарегистрирован до запуска клиента, аккаунт видит нужный чат, а соединение не
упало. Для диагностики включите log_level="DEBUG" и временно добавьте
on_raw.
Самые частые причины:
- декоратор написан без скобок:
@client.on_messageвместо@client.on_message(); - handler принимает один аргумент вместо
(event, client); - фильтр вернул
Falseили упал с ошибкой; - событие другого типа;
- payload не прошел Pydantic-валидацию.
Настоящий класс один: Router. ClientRouter и WebRouter - это type
alias-ы Router[Client] и Router[WebClient] для подсказок типов. Root
router находится внутри клиента, подключаемые router-ы добавляются через
include_router(), вложенные - через router.include_router(child).
Чтобы обработчик мог вызывать API: отправить сообщение, загрузить историю, получить пользователя или чат. Это также позволяет переиспользовать один router с разными клиентами.
Max не всегда присылает полный объект сообщения. В событиях могут отсутствовать
chat_id, sender, status, reaction_info или вложения. Проверяйте
поле перед использованием.
В work_dir/session_name лежит SQLite-файл с token, device_id и sync-state.
Если удалить файл сессии, PyMax создает новую сессию и снова запускает
авторизацию.
from pymax import Client, ExtraConfig
client = Client(
phone="+79990000000",
extra_config=ExtraConfig(log_level="DEBUG"),
)from pymax import Client, ExtraConfig
client = Client(
phone="+79990000000",
extra_config=ExtraConfig(reconnect=False),
)Проверьте, что файл читается, размер больше нуля, передан ровно один источник
path/url/raw, а для raw указано name. Для Photo важны
расширение и content-type. Для File и Video после HTTP-upload должно
прийти событие готовности; иначе PyMax вернет timeout.
Max мог прислать новый или неполный формат payload. Включите DEBUG, снимите
raw payload через on_raw и обновите PyMax. Если ошибка повторяется, заведите
issue с очищенным payload без token, телефонов и приватных URL.