Telethon: AddChatUserRequest и приглашение в группу
В Telegram обычная группа и supergroup используют разные методы MTProto. messages.addChatUser добавляет пользователя в обычную группу. Для channel/supergroup служит channels.inviteToChannel. Наличие chat ID само по себе не означает, что нужная операция разрешена.
Обычная группа
В Telethon соответствующий запрос называется AddChatUserRequest. Клиент должен быть авторизован существующим аккаунтом, а сущность пользователя — разрешена через клиент. Ниже фрагмент для уже подключённого async-клиента, а не скрипт массового приглашения.
from telethon.tl.functions.messages import AddChatUserRequest
# chat_id — ID обычной группы, не channel/supergroup.
# Участник заранее согласился на приглашение.
user = await client.get_input_entity("consenting_username")
await client(AddChatUserRequest(
chat_id=chat_id, user_id=user, fwd_limit=0
))Supergroup или канал
Для InviteToChannelRequest требуются channel и users. Конструктор InputPeerChannel принимает channel_id и access_hash, поэтому передавать в его второе поле user_id неверно. Получайте сущности через API клиента и используйте метод, соответствующий типу чата.
Ошибки и ограничения
- Проверьте тип группы и права аккаунта до изменения состава.
- Обрабатывайте отказ из-за приватности или отсутствия прав как отказ, а не повод обходить ограничения.
- При flood-ограничении прекратите повторные запросы и соблюдайте требования сервиса.
- Храните API hash и session-файл вне репозитория. После работы корректно отключайте клиент.
Для открытого сообщества часто уместнее ссылка-приглашение, по которой человек вступает сам. Автоматизация не отменяет согласия участника и правил Telegram.