Как получить список пользователей канала telegram
Перейти к содержимому

Как получить список пользователей канала telegram

  • автор:

Как получить список пользователей канала Telegram с Telegram Bot API

Кто-нибудь даст стартер о том, как я могу получить информацию о пользователях из моего бота Telegram. Представьте, что мой бот является пользователем с правами администратора на моем канале, и я хочу получить список пользователей моего канала или быть замеченным при присоединении нового пользователя. Как мне это сделать. Документы Telegram настолько неорганизованы. До сих пор я смотрел на это:

Но ничего из этого не помогает.

7 ответов

Чтобы получить список пользователей, вам необходимо использовать Telegram API.

Telegram API довольно сложен. Есть клиенты, которые выполняют работу намного быстрее.

Для python существует Telethon, и метод получения пользователей канала:

Telegram Bot ничего не хранит о ваших пользователях. Вы должны сами сохранить всех пользователей, которые общаются с вашим ботом. Например, сохранить их идентификаторы в базе данных.

В случае с каналом — вы можете получить эту информацию из списка участников канала.

Если вам нужно уведомление — ваш бот должен где-то хранить пользователей и проверять, новый ли пользователь.

Как уже упоминалось, вы не можете перечислить пользователей канала через Bot API.

Но вы можете использовать MTProto API, чтобы войти в систему как обычный пользователь и получить программный доступ ко всему, что вы можно увидеть в настольном или мобильном приложении.

Чтобы использовать MTProto, вам необходимо войти в https://my.telegram.org/ с существующей учетной записью Telegram. и получить учетные данные: api_id и api_hash .

Вот рабочий пример того, как использовать библиотеку Python Telethon для получения списка пользователей канала / группы Telegram.

Легко искать каналы / пользователей по имени / телефону / URL с помощью client.get_entity ().

Чтобы получить список пользователей, вам необходимо использовать Telegram API.

Telegram API довольно сложен. Есть клиенты, которые выполняют работу намного быстрее.

Для python существует Telethon, а код для получения пользователей канала:

Бот не может получить доступ к списку пользователей канала через api. Для этого есть две возможности:

  • поймать все сообщения канала и отфильтровать «XXX присоединился к каналу» — это теоретически, я не пробовал
  • используйте https://github.com/vysheng/tgl

Для бота Telegram нет API для доступа к каналу или группе пользователей. Если для вас важен доступ к групповым пользователям, я предлагаю вам использовать Telegram-CLI. Вы можете получить доступ ко всем API учетной записи пользователя Telegran, чтобы иметь доступ ко всем данным пользователей вашей группы.

Можно ли получить список всех участников чата в Telegram?

Подскажите, пожалуйста, можно ли каким-то образом получить список всех участников некоторого чата в Telegram? Интересует именно «username» пользователей.

user avatar

Да, возможно, приложу свой скрипт который справляется с данной задачей, Github

Также приложу код тут с пояснениями, на случай удаления репозитория:

Делаем необходимые импорты:

Далее нам нужно создать аккаунт тут https://my.telegram.org и заполнить следующие поля:

Теперь нам надо авторизоваться:

Приступаем к сбору пользователей, для этого нам нужен ID чата и access_hash как сказано в документации:

Мы получили данные о чате, осталось собрать пользователей:

Получаем уютный текстовик в формате:

Использовалось Telegram Client API, в качестве обёртки telethon

user avatar

Одной командой вроде get.ChatMembers нельзя, но можно воспользоваться обходными путями, например, если вам нужен список всех участников чата, например вручную забить в базу данных их никнеймы, а лучше их id , так как никнейм, в отличии от id может поменятся. Можно создать новый чат и при вступлении в него пользователя регистрировать его с помощью метода new_chat_members . Ну или можно создать штучную регистрацию, чтобы участники отправили какое-то сообщение вроде /reg и бот автоматически добавил их в бд.

Код, представленный Pavel Durmanov, работает, но для российского IP нужно использовать proxy:

user avatar

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python telegram-bot telegram-api telegram или задайте свой вопрос.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.8.30.42948

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Пишем простой граббер для Telegram чатов на Python

Пишем простой граббер для Telegram чатов на Python

В данном туториале мы научимся собирать данные и сообщения участников чатов и каналов Telegram, а также сохранять эту информацию в виде JSON-файлов, которые далее легко анализировать или экспортировать в базы данных.

Для указанных задач будет использоваться Python не ниже версии 3.5, а также высокоуровневая библиотека для работы с Telegram API – Telethon. Установить библиотеку можно с помощью менеджера пакетов pip :

Регистрируем в Telegram новое приложение

Для подключения к Telegram API необходимы api_id и api_hash . Эти параметры выдаются при регистрации приложения в инструментах разработчика (при отсутствии доступа используйте VPN). Для авторизации указываем номер телефона, к которому привязан аккаунт Telegram.

Пишем простой граббер для Telegram чатов на Python

Вводим пришедший в Telegram численно-буквенный код и попадаем на страницу регистрации нового приложения. Заполняем форму, достаточно первых двух граф:

Пишем простой граббер для Telegram чатов на Python

В результате попадаем на страницу конфигурации приложения. Находим оба параметра, а также доступные MTProto-сервера и открытые (публичные) ключи.

Избегая проблем с безопасностью, сохраняем учетные данные в отдельном файле config.ini следующей структуры:

Поле username далее будет использоваться лишь для автоматического сохранения сессии под именем username.session . Одному клиенту соответствует одна сессия, учтите это в случае запуска нескольких клиентов.

Создаем клиент Telegram

Начнем с импорта библиотек.

Встроенные модули configparser и json применяем соответственно для чтения параметров и вывода данных. Из библиотеки Telethon импортируем класс клиента Telegram и класс исключений. Внутренний модуль connection необходим при использовании прокси-сервера. Остальные элементы модуля telethon.tl используются для запросов необходимых нам списков (участников канала/чата и их сообщений).

Теперь считаем учетные данные из config.ini :

Создадим объект клиента Telegram API:

При необходимости прописываем прокси. При использовании протокола MTProxy прокси задается в виде кортежа (сервер, порт, ключ) .

При первом запуске платформа запросит номер телефона, и вслед – код подтверждения. Так же, как если бы вы входили в учетную запись в приложении или браузере.

Для сбора, обработки и сохранения информации мы создадим две функции:

  1. dump_all_participants(сhannel) заберет данные о пользователях администрируемого нами сообщества channel ;
  2. dump_all_messages(сhannel) соберет все сообщения. Для этой функции достаточно, чтобы у вас был доступ к сообществу (необязательно быть администратором).

Обе функции будут вызываться в теле функции main , в которой пользователь передаст ссылку на интересующий источник:

Касательно написания вызова функций стоит оговориться, что Telethon является асинхронной библиотекой. Поэтому в коде используются операторы async и await. В связи с этим функция main полностью будет выглядеть так:

Заметим, что из-за асинхронности Telethon может некорректно работать в средах, использующих те же подходы (Anaconda, Spyder, Jupyter).

Рекомендуемым способом управления клиентом является менеджер контекстов with . Его мы запустим в конце скрипта после описания вложенных в main функций.

Собираем данные об участниках

Telegram не выводит все запрашиваемые данные за один раз, а выдает их в пакетном режиме, по 100 записей за каждый запрос.

Устанавливаем ограничение в 100, начинаем со смещения 0, создаем список всех участников канала all_participants . Внутри бесконечного цикла передаем запрос GetParticipantsRequest .

Проверяем, есть ли у объекта participants свойство users . Если нет, выходим из цикла. В обратном случае добавляем новых членов в список all_participants , а длину полученного списка добавляем к смещению offset_user . Следующий запрос забирает пользователей, начиная с этого смещения. Цикл продолжается до тех пор, пока не соберет всех фолловеров канала.

Самый простой способ сохранить собранные данные в структурированном виде – воспользоваться форматом JSON. Базы данных, такие как MySQL, MongoDB и т. д., стоит рассматривать лишь для очень популярных каналов и большого количества сохраняемой информации. Либо если вы планируете такое расширение в будущем.

В JSON-файле можно хранить и всю информацию о каждом пользователе, но обычно достаточно лишь нескольких параметров. Покажем на примере, как ограничиться набором определенных данных:

Итак, для каждого пользователя создается свой словарь данных и добавляется в общий список all_user_details , который записывается в JSON-файл.

Собираем сообщения

Ситуация со сбором сообщений идентична сбору сведений о пользователях. Отличия сводятся к трем пунктам:

  1. Вместо клиентского запроса GetParticipantsRequest необходимо отправить GetHistoryRequest со своим набором параметров. Так же, как и в случае со списком участников запрос ограничен сотней записей за один раз.
  2. Для списка сообщений важна их последовательность. Чтобы получать последние сообщения, нужно правильно задать смещение в GetHistoryRequest (с конца).
  3. Чтобы корректно сохранить данные о времени публикации сообщений в JSON-файле, нужно преобразовать формат времени.

Если для анализа сообщений потребуются не все записи, задайте их число в переменной total_count_limit . Если нужна только сборка сообщений канала, достаточно закомментировать вызов await dump_all_participants(channel) .

Таким образом, с помощью Python и Telethon мы написали скрипт, собирающий и сохраняющий данные и реплики участников сообществ Telegram.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *