Репост из: Technologique
Заметка для администраторов каналов (и групп) Telegram.
Сегодня заморочился с исходниками недавно вышедшей новой версии десктопного клиента Telegram - https://github.com/telegramdesktop/tdesktop/tree/v1.2.0
В общем, смысл такой — все печатаемые символы которые не покрываются регулярным выражением типа [0-9a-zA-Zа-яА-Я\s\_\-\+\!\@\(\)\[\]\{\}\\,\.\:\;\'\"], т.е. вводимые символы `~#$%^&*=\|/? позволяют выводить полный листинг участников каналов (и групп) в десктопном клиенте. (!!!)
Т.е. ввод этих символов (`~#$%^&*=\|/?) в поле поиска member'ов позволяет преодолеть показ стандартного списка из 200 подписчиков каналов и показывает всех. В группах работает аналогично.
Подобный очень полезный финт для полного вывода списка/листинга всех пользователей работает как в последней версии (v1.2) десктоп клиента Telegram, вышедшей недавно на днях, так и в предыдущих версиях.
Хотя возможно порог вывода данных выше количества подписчиков в тех каналах и группах на которых я проверял эту "скрытую" функциональность десктопного клиента, но листинг участиков выводился полностью и без ограничений.
Как сделать подобный запрос с выводом member-list'а через API.
Для вывода всех данных о канале или групп-чате и вывода списка участников в числе этих данных, в клиентском API протокола MTProto есть метод getFullChat объекта Messages, который возвращает объект messages.ChatFull с полной информацией о канале или группе.
https://core.telegram.org/method/messages.getFullChat
https://core.telegram.org/type/messages.ChatFull
https://core.telegram.org/constructor/messages.chatFull
https://core.telegram.org/type/ChatFull
https://core.telegram.org/constructor/chatFull
https://core.telegram.org/type/ChatParticipant
https://core.telegram.org/constructor/chatParticipant
https://core.telegram.org/type/ChatParticipants
https://core.telegram.org/constructor/chatParticipants
https://core.telegram.org/constructor/chatParticipantsForbidden
Для справки есть исчерпывающая и актуальная документация о всех методах работы с данными протокола MTProto - https://core.telegram.org/methods
Более того авторы также озаботились созданием Haskell-подобного метаязыка TL с зависимыми типами для описания представления и работы с композицией типов данных протокола MTProto — https://core.telegram.org/mtproto/TL
https://core.telegram.org/schema - схема клиентского API на языке TL, декларативно описывающая типы данных и методы работы с ними в протоколе
https://core.telegram.org/schema/mtproto - схема самого протокола
Композиция типов данных в протоколе довольно сложно структурирована, но для облегчения можно использовтаь сторонние бибилотеки-мапперы типов и методов/функций работы с типами для их использования в парадигме другого языка программирования, например Python с помощью библиотеки Telethon — https://github.com/LonamiWebs/Telethon
https://lonamiwebs.github.io/Telethon/methods/channels/get_full_channel.html
PS: Хочу также порекомендовать жутко полезную библотеку для создания ботов на Haskell, если вы изучаете язык и хотите в него вникнуть через pet проект - https://hackage.haskell.org/package/telegram-api
Но, Bot API при этом например не позволяет запросить полный список подписчиков - только общее количество участников каналов и логировать подписавшихся/ушедших участников после добавления бота в канал или группу:
https://core.telegram.org/bots/api#getchatmemberscount
https://core.telegram.org/bots/api#getchatmember
https://core.telegram.org/bots/api#message (поля данных new_chat_members и left_chat_member объекта Message)
https://hackage.haskell.org/package/telegram-api-0.7.0.0/docs/Web-Telegram-API-Bot-API-Chats.html
Сегодня заморочился с исходниками недавно вышедшей новой версии десктопного клиента Telegram - https://github.com/telegramdesktop/tdesktop/tree/v1.2.0
В общем, смысл такой — все печатаемые символы которые не покрываются регулярным выражением типа [0-9a-zA-Zа-яА-Я\s\_\-\+\!\@\(\)\[\]\{\}\\,\.\:\;\'\"], т.е. вводимые символы `~#$%^&*=\|/? позволяют выводить полный листинг участников каналов (и групп) в десктопном клиенте. (!!!)
Т.е. ввод этих символов (`~#$%^&*=\|/?) в поле поиска member'ов позволяет преодолеть показ стандартного списка из 200 подписчиков каналов и показывает всех. В группах работает аналогично.
Подобный очень полезный финт для полного вывода списка/листинга всех пользователей работает как в последней версии (v1.2) десктоп клиента Telegram, вышедшей недавно на днях, так и в предыдущих версиях.
Хотя возможно порог вывода данных выше количества подписчиков в тех каналах и группах на которых я проверял эту "скрытую" функциональность десктопного клиента, но листинг участиков выводился полностью и без ограничений.
Как сделать подобный запрос с выводом member-list'а через API.
Для вывода всех данных о канале или групп-чате и вывода списка участников в числе этих данных, в клиентском API протокола MTProto есть метод getFullChat объекта Messages, который возвращает объект messages.ChatFull с полной информацией о канале или группе.
https://core.telegram.org/method/messages.getFullChat
https://core.telegram.org/type/messages.ChatFull
https://core.telegram.org/constructor/messages.chatFull
https://core.telegram.org/type/ChatFull
https://core.telegram.org/constructor/chatFull
https://core.telegram.org/type/ChatParticipant
https://core.telegram.org/constructor/chatParticipant
https://core.telegram.org/type/ChatParticipants
https://core.telegram.org/constructor/chatParticipants
https://core.telegram.org/constructor/chatParticipantsForbidden
Для справки есть исчерпывающая и актуальная документация о всех методах работы с данными протокола MTProto - https://core.telegram.org/methods
Более того авторы также озаботились созданием Haskell-подобного метаязыка TL с зависимыми типами для описания представления и работы с композицией типов данных протокола MTProto — https://core.telegram.org/mtproto/TL
https://core.telegram.org/schema - схема клиентского API на языке TL, декларативно описывающая типы данных и методы работы с ними в протоколе
https://core.telegram.org/schema/mtproto - схема самого протокола
Композиция типов данных в протоколе довольно сложно структурирована, но для облегчения можно использовтаь сторонние бибилотеки-мапперы типов и методов/функций работы с типами для их использования в парадигме другого языка программирования, например Python с помощью библиотеки Telethon — https://github.com/LonamiWebs/Telethon
https://lonamiwebs.github.io/Telethon/methods/channels/get_full_channel.html
PS: Хочу также порекомендовать жутко полезную библотеку для создания ботов на Haskell, если вы изучаете язык и хотите в него вникнуть через pet проект - https://hackage.haskell.org/package/telegram-api
Но, Bot API при этом например не позволяет запросить полный список подписчиков - только общее количество участников каналов и логировать подписавшихся/ушедших участников после добавления бота в канал или группу:
https://core.telegram.org/bots/api#getchatmemberscount
https://core.telegram.org/bots/api#getchatmember
https://core.telegram.org/bots/api#message (поля данных new_chat_members и left_chat_member объекта Message)
https://hackage.haskell.org/package/telegram-api-0.7.0.0/docs/Web-Telegram-API-Bot-API-Chats.html