SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Веб-разработка

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.

Документация