<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>DIY</title><generator>teletype.in</generator><description><![CDATA[DIY]]></description><image><url>https://img1.teletype.in/files/0a/6f/0a6fef0b-a2f4-40c8-a73b-fb9d065b1c6a.png</url><title>DIY</title><link>https://teletype.in/@alikust</link></image><link>https://teletype.in/@alikust?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/alikust?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/alikust?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Fri, 23 Oct 2026 01:52:35 GMT</pubDate><lastBuildDate>Fri, 23 Oct 2026 01:52:35 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@alikust/8bmUvuAulea</guid><link>https://teletype.in/@alikust/8bmUvuAulea?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust</link><comments>https://teletype.in/@alikust/8bmUvuAulea?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust#comments</comments><dc:creator>alikust</dc:creator><title>telegram bot on pyrogram #2</title><pubDate>Mon, 24 Jul 2023 19:23:55 GMT</pubDate><category>Pyrogram</category><description><![CDATA[Обновления - это события, которые происходят в вашем аккаунте Telegram (входящие сообщения, присоединение новых участников, нажатие кнопки и т.д.), которые предназначены для уведомления о новом конкретном состоянии, которое изменилось. Эти обновления обрабатываются путем регистрации одной или нескольких функций обратного вызова в вашем приложении с помощью обработчиков.]]></description><content:encoded><![CDATA[
  <h3 id="WKnD">Определение обновлений</h3>
  <p id="XvVx">Обновления - это события, которые происходят в вашем аккаунте Telegram (входящие сообщения, присоединение новых участников, нажатие кнопки и т.д.), которые предназначены для уведомления о новом конкретном состоянии, которое изменилось. Эти обновления обрабатываются путем регистрации одной или нескольких функций обратного вызова в вашем приложении с помощью обработчиков.</p>
  <p id="VmHX">Каждый обработчик имеет дело с определенным событием, и как только из Telegram поступит соответствующее обновление, фреймворк вызовет вашу зарегистрированную функцию обратного вызова и выполнит её код.</p>
  <hr />
  <p id="CUUP"></p>
  <h3 id="2Xff">Регистрация обработчика</h3>
  <p id="kmOU">Чтобы объяснить, как работают обработчики, давайте рассмотрим тот, который будет отвечать за обработку обновлений сообщений, поступающих со всех ваших чатов. Любой другой тип обработчика использует ту же логику настройки, и у вас не должно возникнуть проблем с их настройкой, как только вы ознакомитесь с этим разделом.</p>
  <h3 id="sLeW">Используя декораторы</h3>
  <p id="gNCC">Самый элегантный способ зарегистрировать обработчик сообщений - это использовать декоратор <code>on_message()</code>:</p>
  <pre id="9VGG" data-lang="python">from pyrogram import Client

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


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


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


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


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

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

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

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@alikust/adZyvOr8hOe</guid><link>https://teletype.in/@alikust/adZyvOr8hOe?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust</link><comments>https://teletype.in/@alikust/adZyvOr8hOe?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust#comments</comments><dc:creator>alikust</dc:creator><title>telegram bot on pyrogram #table of contents</title><pubDate>Mon, 24 Jul 2023 19:05:59 GMT</pubDate><category>Pyrogram</category><description><![CDATA[Оглавление]]></description><content:encoded><![CDATA[
  <p id="dwkg">Оглавление</p>
  <p id="Fonx"><a href="https://teletype.in/@alikust/FMXpcViSbD_" target="_blank">0. telegram bot on pyrogram #beginning</a></p>
  <p id="KDjM"><a href="https://teletype.in/@alikust/Vx6EJLuS9fY" target="_blank">1. telegram bot on pyrogram #1</a></p>
  <p id="ZWzu"><a href="https://teletype.in/@alikust/8bmUvuAulea" target="_blank">2. telegram bot on pyrogram #2</a></p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@alikust/Vx6EJLuS9fY</guid><link>https://teletype.in/@alikust/Vx6EJLuS9fY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust</link><comments>https://teletype.in/@alikust/Vx6EJLuS9fY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust#comments</comments><dc:creator>alikust</dc:creator><title>telegram bot on pyrogram #1</title><pubDate>Mon, 24 Jul 2023 19:00:58 GMT</pubDate><category>Pyrogram</category><description><![CDATA[Выполнять вызовы API с помощью Pyrogram очень просто. Вот базовый пример, который мы рассмотрим шаг за шагом:]]></description><content:encoded><![CDATA[
  <p id="CKIq">Выполнять вызовы API с помощью Pyrogram очень просто. Вот базовый пример, который мы рассмотрим шаг за шагом:</p>
  <pre id="T8cU" data-lang="python">from pyrogram import Client

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


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


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

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


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


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


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

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


asyncio.run(main())</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@alikust/FMXpcViSbD_</guid><link>https://teletype.in/@alikust/FMXpcViSbD_?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust</link><comments>https://teletype.in/@alikust/FMXpcViSbD_?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=alikust#comments</comments><dc:creator>alikust</dc:creator><title>telegram bot on pyrogram #beginning</title><pubDate>Mon, 24 Jul 2023 18:32:18 GMT</pubDate><description><![CDATA[Не много не мало но у каждого кто интересуется созданием бота для Телеграмм наступает момент поиска нужной информации, урока, мануала и ещё чего бы то не было, чтобы самостоятельно написать годный, рабочий, возможно интересный и в то же время простой бот. Но я сейчас не о функциональности, а больше о возможностях.]]></description><content:encoded><![CDATA[
  <h2 id="C50s">Телеграмм бот на Pyrogram #начало</h2>
  <hr />
  <p id="dKzw"></p>
  <p id="Z4ww">Не много не мало но у каждого кто интересуется созданием бота для Телеграмм наступает момент поиска нужной информации, урока, мануала и ещё чего бы то не было, чтобы самостоятельно написать годный, рабочий, возможно интересный и в то же время простой бот. Но я сейчас не о функциональности, а больше о возможностях.</p>
  <p id="uhEu">Задумал я значит изучить сие творение, то есть создание бота на библиотеке, а как её создатели называют <strong>Telegram MTProto API Framework for Python (</strong>API-фреймворк Telegram MTProto для Python<strong>) <a href="https://docs.pyrogram.org/" target="_blank">Pyrogram</a></strong></p>
  <blockquote id="lgRT">Pyrogram — это современный, элегантный и асинхронный фреймворк MTProto API. Это позволяет вам легко взаимодействовать с основным Telegram API через учетную запись пользователя (пользовательский клиент) или идентификатор бота (альтернатива bot API) с использованием Python.</blockquote>
  <p id="ds3P">В целом и документацию можно почитать, но коли ты не обладаешь нужными знаниями чтобы бегло читать английский и так же бегло понимать его, то этот ликбез для тебя.</p>
  <h3 id="4oCD">Приступаем к гимнастике:</h3>
  <p id="Z8Z1">Прежде всего, как и во всём Python нам нужно создать виртуальное окружение:</p>
  <pre id="rmBP">python -m venv venv</pre>
  <p id="A9py" data-align="right">или</p>
  <pre id="iYjp">python3 -m venv venv</pre>
  <p id="kWCB">смотря какая у тебя операционная система, нужным способом активируем виртуальное окружение.</p>
  <pre id="2dlX">source venv/bin/activate</pre>
  <p id="PuLD">или</p>
  <pre id="vSA1">source venv/Script/activate</pre>
  <p id="rL2A">Дальше, установим библиотеку pyrogram:</p>
  <pre id="PcVB">pip install -U pyrogram</pre>
  <p id="gepU">Далее получаем на сайте Телеграмма <a href="https://core.telegram.org/api/obtaining_api_id" target="_blank">https://core.telegram.org/api/obtaining_api_id</a> ключ API, он состоит из двух частей: api_id и api_hash. Держи их в секрете.</p>
  <p id="Nb8I">Далее, настраиваем проект:</p>
  <pre id="UJbl" data-lang="python">from pyrogram import Client

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

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

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

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

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

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

app = Client(&quot;my_account&quot;)
app.run()</pre>
  </section>

]]></content:encoded></item></channel></rss>