<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>DIY</title><author><name>DIY</name></author><id>https://teletype.in/atom/alikust</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/alikust?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@alikust?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alikust"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/alikust?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-10-23T01:52:14.578Z</updated><entry><id>alikust:8bmUvuAulea</id><link rel="alternate" type="text/html" href="https://teletype.in/@alikust/8bmUvuAulea?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alikust"></link><title>telegram bot on pyrogram #2</title><published>2023-07-24T19:23:55.363Z</published><updated>2023-07-24T19:23:55.363Z</updated><category term="pyrogram" label="Pyrogram"></category><summary type="html">Обновления - это события, которые происходят в вашем аккаунте Telegram (входящие сообщения, присоединение новых участников, нажатие кнопки и т.д.), которые предназначены для уведомления о новом конкретном состоянии, которое изменилось. Эти обновления обрабатываются путем регистрации одной или нескольких функций обратного вызова в вашем приложении с помощью обработчиков.</summary><content type="html">
  &lt;h3 id=&quot;WKnD&quot;&gt;Определение обновлений&lt;/h3&gt;
  &lt;p id=&quot;XvVx&quot;&gt;Обновления - это события, которые происходят в вашем аккаунте Telegram (входящие сообщения, присоединение новых участников, нажатие кнопки и т.д.), которые предназначены для уведомления о новом конкретном состоянии, которое изменилось. Эти обновления обрабатываются путем регистрации одной или нескольких функций обратного вызова в вашем приложении с помощью обработчиков.&lt;/p&gt;
  &lt;p id=&quot;VmHX&quot;&gt;Каждый обработчик имеет дело с определенным событием, и как только из Telegram поступит соответствующее обновление, фреймворк вызовет вашу зарегистрированную функцию обратного вызова и выполнит её код.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;CUUP&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;2Xff&quot;&gt;Регистрация обработчика&lt;/h3&gt;
  &lt;p id=&quot;kmOU&quot;&gt;Чтобы объяснить, как работают обработчики, давайте рассмотрим тот, который будет отвечать за обработку обновлений сообщений, поступающих со всех ваших чатов. Любой другой тип обработчика использует ту же логику настройки, и у вас не должно возникнуть проблем с их настройкой, как только вы ознакомитесь с этим разделом.&lt;/p&gt;
  &lt;h3 id=&quot;sLeW&quot;&gt;Используя декораторы&lt;/h3&gt;
  &lt;p id=&quot;gNCC&quot;&gt;Самый элегантный способ зарегистрировать обработчик сообщений - это использовать декоратор &lt;code&gt;on_message()&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;9VGG&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client

app = Client(&amp;quot;my_account&amp;quot;)


@app.on_message()
async def my_handler(client, message):
    await message.forward(&amp;quot;me&amp;quot;)


app.run()&lt;/pre&gt;
  &lt;p id=&quot;CHFH&quot;&gt;Определенная функция &lt;code&gt;my_handler&lt;/code&gt;, которая принимает два аргумента (клиент и сообщение), будет функцией, которая выполняется каждый раз, когда поступает новое сообщение.&lt;/p&gt;
  &lt;p id=&quot;1xfs&quot;&gt;В последней строке мы снова видим метод &lt;code&gt;run()&lt;/code&gt;, на этот раз используемый без каких-либо аргументов. Его цель здесь - просто автоматически запустить &lt;code&gt;start()&lt;/code&gt;, поддерживать клиент в режиме онлайн, чтобы он мог прослушивать обновления, и остановить &lt;code&gt;stop()&lt;/code&gt; его, как только вы нажмете &lt;code&gt;CTRL + C&lt;/code&gt;.&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;tWz1&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;f63o&quot;&gt;Используя add_handler()&lt;/h3&gt;
  &lt;p id=&quot;6Kv8&quot;&gt;Метод &lt;code&gt;add_handler()&lt;/code&gt; принимает любой экземпляр обработчика, который оборачивается вокруг вашей определенной функции обратного вызова, и регистрирует его в вашем клиенте. Это полезно в том случае, если вы хотите программно добавить обработчики.&lt;/p&gt;
  &lt;pre id=&quot;fg0P&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client
from pyrogram.handlers import MessageHandler


async def my_function(client, message):
    await message.forward(&amp;quot;me&amp;quot;)


app = Client(&amp;quot;my_account&amp;quot;)

my_handler = MessageHandler(my_function)
app.add_handler(my_handler)

app.run()&lt;/pre&gt;
  &lt;p id=&quot;xupH&quot;&gt;Другими словами этот код создает клиент Pyrogram, добавляет обработчик сообщений, который пересылает все полученные сообщения на аккаунт, связанный с этим клиентом. Эхо-бот.&lt;/p&gt;

</content></entry><entry><id>alikust:adZyvOr8hOe</id><link rel="alternate" type="text/html" href="https://teletype.in/@alikust/adZyvOr8hOe?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alikust"></link><title>telegram bot on pyrogram #table of contents</title><published>2023-07-24T19:05:59.360Z</published><updated>2023-07-24T19:25:30.919Z</updated><category term="pyrogram" label="Pyrogram"></category><summary type="html">Оглавление</summary><content type="html">
  &lt;p id=&quot;dwkg&quot;&gt;Оглавление&lt;/p&gt;
  &lt;p id=&quot;Fonx&quot;&gt;&lt;a href=&quot;https://teletype.in/@alikust/FMXpcViSbD_&quot; target=&quot;_blank&quot;&gt;0. telegram bot on pyrogram #beginning&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;KDjM&quot;&gt;&lt;a href=&quot;https://teletype.in/@alikust/Vx6EJLuS9fY&quot; target=&quot;_blank&quot;&gt;1. telegram bot on pyrogram #1&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;ZWzu&quot;&gt;&lt;a href=&quot;https://teletype.in/@alikust/8bmUvuAulea&quot; target=&quot;_blank&quot;&gt;2. telegram bot on pyrogram #2&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>alikust:Vx6EJLuS9fY</id><link rel="alternate" type="text/html" href="https://teletype.in/@alikust/Vx6EJLuS9fY?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alikust"></link><title>telegram bot on pyrogram #1</title><published>2023-07-24T19:00:58.220Z</published><updated>2023-07-24T19:00:58.220Z</updated><category term="pyrogram" label="Pyrogram"></category><summary type="html">Выполнять вызовы API с помощью Pyrogram очень просто. Вот базовый пример, который мы рассмотрим шаг за шагом:</summary><content type="html">
  &lt;p id=&quot;CKIq&quot;&gt;Выполнять вызовы API с помощью Pyrogram очень просто. Вот базовый пример, который мы рассмотрим шаг за шагом:&lt;/p&gt;
  &lt;pre id=&quot;T8cU&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client

app = Client(&amp;quot;my_account&amp;quot;)


async def main():
    async with app:
        await app.send_message(&amp;quot;me&amp;quot;, &amp;quot;Hi!&amp;quot;)


app.run(main())&lt;/pre&gt;
  &lt;p id=&quot;7Ipb&quot;&gt;Давайте начнем с импорта клиентского класса.&lt;/p&gt;
  &lt;pre id=&quot;i2ad&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client&lt;/pre&gt;
  &lt;p id=&quot;4yJ3&quot;&gt;Теперь создайте экземпляр нового клиентского объекта, “my_account” - это имя сеанса по вашему выбору.&lt;/p&gt;
  &lt;pre id=&quot;e1U8&quot; data-lang=&quot;python&quot;&gt;app = Client(&amp;quot;my_account&amp;quot;)&lt;/pre&gt;
  &lt;p id=&quot;tnUF&quot;&gt;Асинхронные методы должны вызываться в асинхронном контексте. Здесь мы определяем асинхронную функцию и помещаем наш код внутрь. Также обратите внимание на ключевое слово &lt;code&gt;await&lt;/code&gt; перед вызовом метода; это требуется для всех асинхронных методов.&lt;/p&gt;
  &lt;p id=&quot;LoT2&quot;&gt;&lt;code&gt;app.run(main())&lt;/code&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;fsB7&quot;&gt;Контекстный менеджер&lt;/h3&gt;
  &lt;p id=&quot;Upac&quot;&gt;Оператор &lt;code&gt;async with&lt;/code&gt; запускает контекстный менеджер, который используется в качестве ярлыка для запуска, выполнения и остановки клиента асинхронно. Он делает это путем автоматического вызова &lt;code&gt;start()&lt;/code&gt; и &lt;code&gt;stop()&lt;/code&gt; более удобным способом, который также изящно останавливает клиент, даже в случае необработанных исключений в вашем коде.&lt;/p&gt;
  &lt;p id=&quot;UmtI&quot;&gt;Ниже приведен тот же пример, что и выше, но без использования контекстного менеджера:&lt;/p&gt;
  &lt;pre id=&quot;mcpk&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client

app = Client(&amp;quot;my_account&amp;quot;)


async def main():
    await app.start()
    await app.send_message(&amp;quot;me&amp;quot;, &amp;quot;Hi!&amp;quot;)
    await app.stop()


app.run(main())&lt;/pre&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;RQXU&quot;&gt;Используя asyncio.run()&lt;/h3&gt;
  &lt;p id=&quot;caue&quot;&gt;В качестве альтернативы методу &lt;code&gt;run()&lt;/code&gt; вы можете использовать &lt;code&gt;asyncio.run() &lt;/code&gt;Python для выполнения функции &lt;code&gt;main&lt;/code&gt;, с одним небольшим предостережением: экземпляр клиента (и, возможно, другие ресурсы &lt;code&gt;asyncio&lt;/code&gt;, которые вы собираетесь использовать) должен быть создан внутри функции &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;kkgI&quot; data-lang=&quot;python&quot;&gt;import asyncio
from pyrogram import Client


async def main():
    app = Client(&amp;quot;my_account&amp;quot;)

    async with app:
        await app.send_message(&amp;quot;me&amp;quot;, &amp;quot;Hi!&amp;quot;)


asyncio.run(main())&lt;/pre&gt;

</content></entry><entry><id>alikust:FMXpcViSbD_</id><link rel="alternate" type="text/html" href="https://teletype.in/@alikust/FMXpcViSbD_?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=alikust"></link><title>telegram bot on pyrogram #beginning</title><published>2023-07-24T18:32:18.204Z</published><updated>2023-07-24T18:32:18.204Z</updated><summary type="html">Не много не мало но у каждого кто интересуется созданием бота для Телеграмм наступает момент поиска нужной информации, урока, мануала и ещё чего бы то не было, чтобы самостоятельно написать годный, рабочий, возможно интересный и в то же время простой бот. Но я сейчас не о функциональности, а больше о возможностях.</summary><content type="html">
  &lt;h2 id=&quot;C50s&quot;&gt;Телеграмм бот на Pyrogram #начало&lt;/h2&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;dKzw&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Z4ww&quot;&gt;Не много не мало но у каждого кто интересуется созданием бота для Телеграмм наступает момент поиска нужной информации, урока, мануала и ещё чего бы то не было, чтобы самостоятельно написать годный, рабочий, возможно интересный и в то же время простой бот. Но я сейчас не о функциональности, а больше о возможностях.&lt;/p&gt;
  &lt;p id=&quot;uhEu&quot;&gt;Задумал я значит изучить сие творение, то есть создание бота на библиотеке, а как её создатели называют &lt;strong&gt;Telegram MTProto API Framework for Python (&lt;/strong&gt;API-фреймворк Telegram MTProto для Python&lt;strong&gt;) &lt;a href=&quot;https://docs.pyrogram.org/&quot; target=&quot;_blank&quot;&gt;Pyrogram&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;lgRT&quot;&gt;Pyrogram — это современный, элегантный и асинхронный фреймворк MTProto API. Это позволяет вам легко взаимодействовать с основным Telegram API через учетную запись пользователя (пользовательский клиент) или идентификатор бота (альтернатива bot API) с использованием Python.&lt;/blockquote&gt;
  &lt;p id=&quot;ds3P&quot;&gt;В целом и документацию можно почитать, но коли ты не обладаешь нужными знаниями чтобы бегло читать английский и так же бегло понимать его, то этот ликбез для тебя.&lt;/p&gt;
  &lt;h3 id=&quot;4oCD&quot;&gt;Приступаем к гимнастике:&lt;/h3&gt;
  &lt;p id=&quot;Z8Z1&quot;&gt;Прежде всего, как и во всём Python нам нужно создать виртуальное окружение:&lt;/p&gt;
  &lt;pre id=&quot;rmBP&quot;&gt;python -m venv venv&lt;/pre&gt;
  &lt;p id=&quot;A9py&quot; data-align=&quot;right&quot;&gt;или&lt;/p&gt;
  &lt;pre id=&quot;iYjp&quot;&gt;python3 -m venv venv&lt;/pre&gt;
  &lt;p id=&quot;kWCB&quot;&gt;смотря какая у тебя операционная система, нужным способом активируем виртуальное окружение.&lt;/p&gt;
  &lt;pre id=&quot;2dlX&quot;&gt;source venv/bin/activate&lt;/pre&gt;
  &lt;p id=&quot;PuLD&quot;&gt;или&lt;/p&gt;
  &lt;pre id=&quot;vSA1&quot;&gt;source venv/Script/activate&lt;/pre&gt;
  &lt;p id=&quot;rL2A&quot;&gt;Дальше, установим библиотеку pyrogram:&lt;/p&gt;
  &lt;pre id=&quot;PcVB&quot;&gt;pip install -U pyrogram&lt;/pre&gt;
  &lt;p id=&quot;gepU&quot;&gt;Далее получаем на сайте Телеграмма &lt;a href=&quot;https://core.telegram.org/api/obtaining_api_id&quot; target=&quot;_blank&quot;&gt;https://core.telegram.org/api/obtaining_api_id&lt;/a&gt; ключ API, он состоит из двух частей: api_id и api_hash. Держи их в секрете.&lt;/p&gt;
  &lt;p id=&quot;Nb8I&quot;&gt;Далее, настраиваем проект:&lt;/p&gt;
  &lt;pre id=&quot;UJbl&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client

api_id = 12345
api_hash = &amp;quot;0123456789abcdef0123456789abcdef&amp;quot;

app = Client(&amp;quot;my_account&amp;quot;, api_id=api_id, api_hash=api_hash)

app.run()&lt;/pre&gt;
  &lt;p id=&quot;rhPb&quot;&gt;Запускаем нашего, маленького, бота. В терминале запустится интерактивная среда регистрации, которой требуется передать номер телефона, без + и -. Ответ придёт на авторизированный клиент, либо по смс.&lt;/p&gt;
  &lt;pre id=&quot;tGMm&quot;&gt;Enter phone number: +1-123-456-7890
Is &amp;quot;+1-123-456-7890&amp;quot; correct? (y/n): y
Enter phone code: 12345
Logged in successfully&lt;/pre&gt;
  &lt;p id=&quot;1isP&quot;&gt;После успешной авторизации будет создан новый файл с именем &lt;code&gt;my_account.session&lt;/code&gt;, позволяющий Pyrogram выполнять вызовы API с вашим идентификатором. Этот файл является личным и будет загружен снова, когда вы перезапустите свое приложение. Теперь вы можете удалить значения api_id и api_hash из кода, поскольку они больше не нужны.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;NzJH&quot;&gt;Код выше ничего не делает, кроме запроса учетных данных и сохранения клиента в сети, нажмите &lt;code&gt;CTRL + C&lt;/code&gt;, чтобы остановить ваше приложение и продолжим дальше.&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;oXcE&quot;&gt;Бот - это особый вид пользователей, которые авторизуются с помощью своих токенов (вместо телефонных номеров), созданных &lt;a href=&quot;https://t.me/botfather&quot; target=&quot;_blank&quot;&gt;Bot Father.&lt;/a&gt; Токены ботов заменяют только телефонные номера пользователей — вам все равно нужно настроить ключ API Telegram с помощью Pyrogram, даже для использовании ботов.&lt;/p&gt;
  &lt;p id=&quot;tHKu&quot;&gt;Процесс авторизации управляется автоматически. Все, что вам нужно сделать, это выбрать имя (оно может быть любым, обычно это имя пользователя вашего бота) и передать свой токен бота, используя параметр bot_token. Файл сеанса будет назван в честь имени сеанса, которое в приведенном ниже примере будет my_bot.session.&lt;/p&gt;
  &lt;pre id=&quot;CPWL&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client

api_id = 12345
api_hash = &amp;quot;0123456789abcdef0123456789abcdef&amp;quot;
bot_token = &amp;quot;123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11&amp;quot;

app = Client(
    &amp;quot;my_bot&amp;quot;,
    api_id=api_id, api_hash=api_hash,
    bot_token=bot_token
)

app.run()&lt;/pre&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;yIPF&quot;&gt;Ключ API (api_id и api_hash) и bot_token больше не требуются после успешной авторизации. Это означает, что теперь вы можете просто использовать следующее: &lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;Hm57&quot; data-lang=&quot;python&quot;&gt;from pyrogram import Client

app = Client(&amp;quot;my_account&amp;quot;)
app.run()&lt;/pre&gt;
  &lt;/section&gt;

</content></entry></feed>