- Создайте свой собственный клиент Telegram
- Получить api_id
- Использование открытого кода Telegram
- Создание приложения Telegram
- Авторизация пользователя
- Управление каналом Telegram с помощью действий GitHub
- Используемые инструменты
- Действия GitHub
- Секретные настройки репозитория
- Получение ключа API бота Telegram
- Получение идентификатора телеграмм-канала
- Структура скрипта
- Консольное приложение .NET Core
- Вывод
Создайте свой собственный клиент Telegram
Все разработчики могут использовать Telegram API и исходный код для бесплатного создания аналогичных приложений в Telegram.
Для обеспечения совместимости и безопасности в рамках экосистемы клиенты третьи лица должны соблюдать Условия использования API.
Получить api_id
Чтобы получить API ID и иметь возможность разрабатывать собственный клиент на основе Telegram API, выполните следующие действия:
- Зарегистрируйтесь в Telegram с помощью любого клиента.
- Войдите в Telegram по ссылке: https://my.telegram.org.
- Перейдите по ссылке «Средства разработки API» и заполните форму.
- Адреса и параметры api_id и api_hash , необходимые для авторизации пользователя, будут приняты.
- В настоящее время любому номеру может быть назначен только один api_id.
Важные уведомления для разработчиков будут отправляться на указанный номер телефона, поэтому рекомендуется использовать текущий номер, подключенный к активной учетной записи Telegram.
Использование открытого кода Telegram
Открытый исходный код Telegram доступен всем. Он также поставляется с образцом идентификатора API, который ограничен только внутренним использованием. Нельзя использовать в приложениях для конечных пользователей: попытки использовать этот идентификатор API для любых целей, кроме тестирования, приведут к ошибке API_ID_PUBLISHED_FLOOD на стороне пользователя. Поэтому перед выпуском клиента необходимо получить собственный API ID .
Для того, чтобы разработчик соответствует GNU GPL, также необходимо генерировать исходный код вашего приложения.
Страница Telegram на русском языке (неофициальная).
Это сборник приложений на основе MTProto, переведенная часть документации с официального сайта, а также работает с Webogram.
Исходный код
Создание приложения Telegram
Приглашаем всех разработчиков использовать наш API и исходный код для бесплатного создания приложений для обмена сообщениями, подобных Telegram, на нашей платформе.
Чтобы обеспечить согласованность и безопасность всей экосистемы Telegram, все сторонние клиентские приложения должны соответствовать Термины API .
Чтобы получить API ID и разработать собственное приложение с помощью Telegram API, вам необходимо сделать следующее:
- Зарегистрироваться в Telegram с помощью любого приложения.
- Вход в ядро Telegram: https://my.telegram.org.
- Перейдите в раздел «Средства разработки API» и заполните форму.
- Вы получаете базовые адреса, а также параметры api_id и api_hash , необходимые для авторизации пользователя.
- В настоящее время к каждому номеру может быть прикреплен только один идентификатор API.
Мы будем отправлять важные уведомления разработчика на номер телефона, который вы используете в этом процессе, поэтому используйте текущий номер, связанный с вашей активной учетной записью Telegram.
Перед использованием MTProto Telegram API обратите внимание, что все клиентские библиотеки API строго контролируется для предотвращения злоупотреблений.
Если вы используете Telegram API для флуда, спама, поддельных подписчиков и просмотра счетчиков каналов, будете забанены навсегда .
Из-за чрезмерного злоупотребления Telegram API — это все учетные записи, которые регистрируются или входят в систему с использованием неофициального Telegram API. Клиенты Telegram автоматически помещаются на контроль во избежание нарушения условий обслуживания. .
Если вы не нарушали условия обслуживания, но ваша учетная запись была заблокирована после использования API, отправьте электронное письмо по адресу retrieve@telegram.org, объяснив, что вы собираетесь делать с API, и попросите, чтобы ваша учетная запись была заблокирована. незапрещенный .
Обратите внимание, что электронные письма модерируются людьми, поэтому автоматически сгенерированные электронные письма будут обнаружены и запрещены.
Любой может использовать наш открытый исходный код. Мы добавили в код образец идентификатора API. Эта идентификация API ограничена на стороне сервера и не подходит для приложений, выпущенных для конечных пользователей; использование его для чего-либо, кроме тестирования, приведет к ошибке API_ID_PUBLISHED_FLOOD для ваших пользователей. Вы должны получить свой собственный идентификатор API перед публикацией приложения.
Не забудьте также опубликовать свой код, чтобы он соответствовал GNU GPL.
Источник
Авторизация пользователя
Авторизация связана с идентификатором ключа шифрования клиента: auth_key_id . После авторизации нет необходимости передавать в методы дополнительные параметры.
Отображать красивый формат и валидированное поле номер телефона, конструктор help.countriesList можно получить с помощью метода help.getCountriesList.
Настройка help.countriesList используется, как описано здесь ».
Затем на телефон пользователя отправляется текстовое сообщение, содержащее код авторизации, с использованием auth.sendCode.
Однако это не всегда так, когда используются токены выхода:
При вызове auth.logOut в ранее авторизованном сеансе с включенной двухфакторной аутентификацией сервер может вернуть future_auth_token, который должен храниться в локальная база данных.
База данных токенов выхода из системы должна содержать не более 20 токенов одновременно — отбрасывайте старые токены по мере добавления новых.
При вызове auth.sendCode все токены из токенов выхода, присутствующих в базе данных, должны быть предоставлены в codeSettings.logout_tokens.
Если какой-либо из токенов выхода соответствует учетной записи, в которую мы пытаемся войти, и срок действия токена не истек, auth.sendCode напрямую вернет ошибку RPC SESSION_PASSWORD_NEEDED и напрямую запросит у пользователя пароль 2FA без отправки какой-либо авторизации. код.
В противном случае система отправит код авторизации, используя следующую логику:
Система автоматически выберет способ отправки кода авторизации; код может прийти несколькими способами:
- Токены выхода »
- Код Telegram
- Код SMS
- Телефонный звонок: Синтезированный голос сообщает пользователю, какой код подтверждения нужно ввести.
- Быстрый вызов: код будет отправлен мгновенным вызовом, который немедленно закрывается. Во втором случае кодом телефона будет сам номер телефона, просто убедитесь, что номер телефона соответствует указанному шаблону (см. auth.sentCodeTypeFlashCall).
- Пропущенный телефонный звонок: код будет отправлен в виде мгновенного телефонного звонка, который немедленно прервется. Последние цифры номера вызывающего телефона — это код, который пользователь должен ввести вручную.
Метод auth.sendCode также имеет параметры для включения/отключения использования флэш-вызовов и пропущенных вызовов, а также позволяет передавать токен SMS, который будет включен в отправленное SMS. Например, последнее требуется в новых версиях Android для использования Android SMS Receiver API.
Возвращенный объект auth.SentCode будет содержать несколько параметров:
флаги | # | Флаги, см. условные поля TL |
тип | auth.SentCodeType | Тип кода телефона |
phone_code_hash | string | Хэш-код телефона для сохранения и повторного использования с флагами auth.signIn |
next_type | 1?auth.CodeType | Тип телефонного кода для следующей отправки, если телефонный код не получен в течение секунд timeout: используйте auth.resendCode для отправки флагов |
timeout | .2 ?инт | Время ожидания для r получения телефонного кода |
Если сообщение доходит до телефона слишком долго (время ожидания в секундах), можно вызвать метод auth.resendCode. для повторной отправки кода типа next_type . Если то же самое произойдет снова, вы можете использовать auth.resendCode со значением next_type, возвращенным предыдущим вызовом auth.resendCode. Чтобы отменить код аутентификации, используйте auth.cancelCode.
Когда пользователь вводит код аутентификации, следует использовать метод auth.signIn для его проверки и последующего входа пользователя.
Если код введен правильно, но метод возвращает auth.authorizationSignUpRequired, это означает, что учетная запись с таким номером телефона еще не существует: пользователь должен указать основную информацию, принять условия обслуживания, а затем метод регистрации нового пользователя (auth. signUp).
Попытка войти с помощью auth.signIn может вернуть ошибку 400 SESSION_PASSWORD_NEEDED, если у пользователя включена двухфакторная аутентификация. В этом случае следуйте инструкциям для аутентификации SRP 2FA.
Чтобы настроить двухфакторную аутентификацию для уже авторизованной учетной записи, следуйте документам аутентификации SRP 2FA.
Каждый номер телефона ограничен только определенное количество входов в день (например, 5, но это может измениться), после чего API будет возвращать ошибку FLOOD до следующего дня. Этого может быть недостаточно для тестирования реализации потоков авторизации пользователей в клиентских приложениях.
Существует несколько префиксов телефонных номеров. зарезервировано для проверки того, что ваше приложение обрабатывает перенаправление между контроллерами домена, регистрацию, вход в систему и потоки 2FA. правильно. Эти номера доступны только для тестовых контроллеров домена (их IP-адреса транспорта TCP доступны на панели инструментов инструментов разработчика API после получения формата api_id, URI для транспорта HTTPS/Websocket).
Если вы хотите эмулировать пользовательское приложение, связанное с номером DC X, просто введите номер телефона как 99966XYYYY при регистрации пользователя, где YYYY — случайные числа. Такой пользователь всегда будет получать XXXXX в качестве кода подтверждения входа (номер DC повторяется пять раз). Обратите внимание, что значение X должно быть в диапазоне от 1 до 3, поскольку тестовых CC всего 3. При достижении лимита флуда для какого-либо конкретного тестового номера просто выберите другой номер (изменив случайную часть YYYY).
Не храните в сообщениях с таких тестовых аккаунтов какую-либо важную или личную информацию; любой может воспользоваться преимуществами упрощенного механизма авторизации, и мы периодически удаляем всю хранящуюся там информацию.
Продолжайте выполнять потоки авторизации пользователей на рабочих контроллерах домена только после того, как убедитесь, что все работает правильно на сначала протестируйте DC , чтобы избежать переполнения лимита.
Чтобы помочь вам работать с рабочими DC, логины с тем же номером телефона, под которым был зарегистрирован api_id, имеют более высокие ограничения переполнения.
В результате авторизации ключ клиента auth_key_id связан с пользователя, и каждый последующий вызов API с этим ключом будет выполняться от имени этого пользователя. Сам метод авторизации возвращает соответствующего пользователя. ID пользователя лучше сразу хранить локально в привязке ключа.
Только небольшая часть методов API доступна неавторизованным пользователям:
Другие методы будут приводит к ошибке: 401 UNAUTHORIZED .
Источник
Управление каналом Telegram с помощью действий GitHub
Надеюсь, каждому разработчику хотя бы раз в жизни приходила в голову идея что-то автоматизировать. Ведь если есть возможность избавиться от рутины, то грех ей не воспользоваться.
Эта идея стала основой для многих моих собственных разработок, начиная с программ для решения Судоку , для подсчета времени, проведенного за компьютером, имитации работы пользователя ПК с помощью самописных скриптов (все это в старину) и выполнения более сложных проектов.
И так , между прочим, родилась простая идея: «Почему бы не автоматизировать мониторинг новых выпусков подкастов TI с помощью телеграм-бота и GitHub Actions? Просто подписаться на канал Telegram и получать даты выхода подкастов как свою отдушину .
Конечно, можно скачать специализированные приложения типа «Pocket Casts» или подписаться на RSS-подписку, но лично для меня использование Telegram-канала наиболее удобно, просто и привычно.
Так был создан Telegram-канал @awesome_russian_podcasts, где автоматически публикуются новые выпуски многих ИТ-подкастов, собранных в моем репозитории. Собственно, хочу подробнее рассказать о процессе создания этого канала (технической его части).
Используемые инструменты
Для решения проблемы я использовал следующие инструменты:
- Действие GitHub;
- Консольное приложение .NET Core;
- Luandersonn.iTunesPodcastFinder: получение данных подкастов из iTunes;
- Telegram.Bot: для взаимодействия с API бота Telegram;
- Гит.
Пункты со 2 по 4 можно легко заменить и описанный сценарий можно реализовать на подходящем вам языке программирования. Кроме того, с Telegram API можно взаимодействовать напрямую через HTTP-запросы, как и с iTunes API.
Действия GitHub
Описание Действия GitHub
С появлением GitHub Actions перед разработчиками открылась новая область исследований и экспериментов, так как этот инструмент позволяет автоматизировать то, что раньше приходилось делать вручную. или с помощью третьих лиц. -Сторонние сервисы, которые не всегда легко освоить и интегрировать.
Подробная документация (только на английском языке) будет понятна даже тем, кто никогда не работал с такими инструментами. И это не займет много времени, чтобы изучить.
Я выбрал GitHub Actions для своей задачи по нескольким причинам:
- Это бесплатно для публичных репозиториев;
- Позволяет запускать «события» по таймеру;
- Легко обучается и адаптируется к новым задачам.
Идея в том, что по определенному таймеру запустится сценарий действия, настроен таким образом, что при изменении количества эпизодов для каждого подкаста в репозитории данные о новых эпизодах отправляются в канал Telegram через бота Telegram, управляемого консольным приложением .NET Core.
Секретные настройки репозитория
Во-первых, вам необходимо установить «секреты» ( ключ API бота Telegram и идентификатор канала Telegram , где будут публиковаться новые выпуски) в репозитории действий GitHub, как показано на скриншот:
На самом деле, вы можете ввести идентификатор канала Telegram прямо в скрипт действия или в приложение, но для решения однотипных задач лучше всего иметь возможность изменять эти данные.
Они будут использоваться для передачи в качестве параметров командной строки консольному приложению .NET Core.
Получение ключа API бота Telegram
Для связи с Telegram-ботом необходимо его создать и получить специальный ключ API . Это очень просто.
Введите BotFather в поле поиска телеграммы: это официальный бот телеграммы, который создает своих собственных ботов:
Чтобы создать нового бота, вы должны ввести в чат команду /newbot BotFather , которая попросит вас ввести имя для нового бота:
Вы можете дать своему боту любое имя
Далее, BotFather попросит вас ввести имя пользователя для нового бота. Фактически это будет ваш уникальный идентификатор в Telegram.
Вот некоторые ограничения: имя пользователя обязательно заканчивается на bot (без учета регистра) и должен быть уникальным (если указанное имя пользователя уже существует, вы не сможете создать нового бота):
В результате ваш бот будет создан и вам будет показан API-ключ для внешнего управления (первая часть API-ключа — это ID бота).
PS. Если вы забыли свой API-ключ, вы можете просмотреть его в любой момент, набрав /mybots в чате BotFather , выберите нужного бота из списка и нажмите кнопку «API Token» . Там же можно обновить ключ, если он скомпрометирован.
Далее следует найти созданного бота в строке поиска телеграм по вашему логину , авторизоваться и нажать кнопку «Старт» . Теперь бот готов к работе:
Получение идентификатора телеграмм-канала
Чтобы телеграмм-бот знал, куда отправлять сообщения, ему необходимо знать id телеграм-канала для постов.
Для этого вам нужно добавить бота в созданный вами Telegram-канал (бот может быть добавлен в канал только как админ) , разместите сообщение на этом канале и вызовите запрос HTTP GET: https://api.telegram.org/bot/getUpdates, где полученный выше ключ API бота:
В поле ID внутри чата получите нужный вам ID канала Telegram.
PS. К сожалению, поскольку Telegram до сих пор заблокирован на территории РФ, указанный выше HTTP GET-запрос необходимо отправлять через прокси. Вы можете например, используйте браузер Opera и его встроенный прокси, как это сделал я.
Структура скрипта
Далее переходим непосредственно к скрипту действий.
Как создавать и редактировать скрипты подробно описано в документации. Это не составит труда решить. Здесь я только перечислю свой скрипт с комментариями:
Как видите, сам скрипт действия достаточно прост. Его можно улучшить, например, добавив опцию не фиксировать, если изменений не было. Но это пока не нужно. Вся работа Полезно для консольного приложения .NET Core «Unchase.HtmlTagsUpdater» . Давайте посмотрим, что внутри.
Консольное приложение .NET Core
«Unchase.HtmlTagsUpdater» – это обычное консольное приложение .NET Core, которое передает указанные параметры командной строки. Здесь я приведу упрощенный код: без дополнительных элементов управления, обработки, промежуточных частей и частей, не связанных с задачей.
Для разбора параметров командной строки удобно использовать nuget-пакет CommandLineParser. Он позволяет вставить входные параметры приложения в заданный класс:
В основном методе приложения вызвать Parser.Default.ParseArguments:
Дальнейшая обработка происходит в ProcessPodcasts и методы SendPodcastData:
Всё, что как минимум необходимо для выполнения задачи.
Вывод
Действия GitHub можно использовать как для работы с каналами Telegram: публикация сообщений , модерирование, интерактивное взаимодействие с участниками канала… И для многих других задач: CI/CD для ваших проектов, обновление статических страниц для Страницы GitHub, взаимодействие с любыми сторонними сервисами в зависимости от описанного сценария и т. д.
Существует множество приложений для этого действительно полезного и практичного инструмента. Я попытался описать один из возможных вариантов.
Убежден, что каналы должны приносить пользу не только их создателям, что если вы любите слушать IT-подкасты или искать новые знания, присоединяйтесь к каналу @awesome_russian_podcasts и добавляйте свои избранное подкасты российских айтишников в репозиторий. и другие люди могли бы услышать о них.
Если вы являетесь пользователем YouTube и смотрите видео, то для вас есть похожий канал: @awesome_russian_youtube.
Спасибо, что сделали это до конца. Будьте здоровы и оставайтесь на пути знаний. Удачи!
Источник