Installation¶
Telethon is a Python library, which means you need to download and install Python from https://www.python.org/downloads/ if you haven’t already. Once you have Python installed, upgrade pip and run:
python3 -m pip install --upgrade pip python3 -m pip install --upgrade telethon
…to install or upgrade the library to the latest version.
Installing Development Versions¶
If you want the latest unreleased changes, you can run the following command instead:
python3 -m pip install --upgrade https://github.com/LonamiWebs/Telethon/archive/v1.zip
The development version may have bugs and is not recommended for production use. However, when you are reporting a library bug, you should try if the bug still occurs in this version.
Verification¶
To verify that the library is installed correctly, run the following command:
python3 -c "import telethon; print(telethon.__version__)"
The version number of the library should show in the output.
Optional Dependencies¶
If cryptg is installed, the library will work a lot faster, since encryption and decryption will be made in C instead of Python. If your code deals with a lot of updates or you are downloading/uploading a lot of files, you will notice a considerable speed-up (from a hundred kilobytes per second to several megabytes per second, if your connection allows it). If it’s not installed, pyaes will be used (which is pure Python, so it’s much slower).
If pillow is installed, large images will be automatically resized when sending photos to prevent Telegram from failing with “invalid image”. Official clients also do this.
If aiohttp is installed, the library will be able to download WebDocument media files (otherwise you will get an error).
If hachoir is installed, it will be used to extract metadata from files when sending documents. Telegram uses this information to show the song’s performer, artist, title, duration, and for videos too (including size). Otherwise, they will default to empty values, and you can set the attributes manually.
Some of the modules may require additional dependencies before being installed through pip . If you have an apt -based system, consider installing the most commonly missing dependencies (with the right pip ):
apt update apt install clang libjpeg-turbo,webp>-dev python,-dev> zlib-dev pip install -U --user setuptools pip install -U --user telethon cryptg pillow
Thanks to @bb010g for writing down this nice list.
© Copyright 2017 — 2019, Lonami Revision 7325718f .
Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: stable
Versions stable Downloads pdf html epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
Installation¶
Needless to say, you must have Python 3 and PyPi installed in your system. See https://python.org and https://pypi.python.org/pypi/pip for more.
If you already have the library installed, upgrade with:
pip3 install --upgrade telethon
You can also install the library directly from GitHub or a fork:
# pip3 install git+https://github.com/LonamiWebs/Telethon.git or $ git clone https://github.com/LonamiWebs/Telethon.git $ cd Telethon/ # pip install -Ue .
If you don’t have root access, simply pass the —user flag to the pip command. If you want to install a specific branch, append @branch to the end of the first install command.
By default the library will use a pure Python implementation for encryption, which can be really slow when uploading or downloading files. If you don’t mind using a C extension, install cryptg via pip or as an extra:
pip3 install telethon[cryptg]
Manual Installation¶
- Install the required pyaes (GitHub | PyPi) and rsa (GitHub | PyPi) modules:
pip3 install pyaes rsa
git clone https://github.com/LonamiWebs/Telethon.git
cd Telethon
python3 setup.py gen
To generate the method documentation, python3 setup.py gen docs .
Optional dependencies¶
If pillow is installed, large images will be automatically resized when sending photos to prevent Telegram from failing with “invalid image”. Official clients also do this.
If aiohttp is installed, the library will be able to download WebDocument media files (otherwise you will get an error).
If hachoir is installed, it will be used to extract metadata from files when sending documents. Telegram uses this information to show the song’s performer, artist, title, duration, and for videos too (including size). Otherwise, they will default to empty values, and you can set the attributes manually.
If cryptg is installed, encryption and decryption will be made in C instead of Python which will be a lot faster. If your code deals with a lot of updates or you are downloading/uploading a lot of files, you will notice a considerable speed-up (from a hundred kilobytes per second to several megabytes per second, if your connection allows it). If it’s not installed, pyaes will be used (which is pure Python, so it’s much slower).
© Copyright 2017, Lonami Revision 744f5f50 .
Built with Sphinx using a theme provided by Read the Docs.
Read the Docs v: stable
Versions latest stable Downloads On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
Библиотека Telethon в Python, Telegram клиент
Библиотека Telethon предназначена для облегчения разработки программ на Python, которые могут взаимодействовать с платформой Telegram. Представляет собой асинхронную обертку API Telegram, которая делает всю тяжелую и нудную работу, тем самым позволяя сосредоточиться на разработке приложения.
Установка модуля Telethon в виртуальное окружение:
# создаем виртуальное окружение $ python3 -m venv .venv --prompt VirtualEnv # активируем виртуальное окружение $ source .venv/bin/activate # обновляем установщик пакетов python3 -m pip install --upgrade pip # ставим пакет telethon python3 -m pip install --upgrade telethon
Содержание:
- Авторизация в Telegram с помощью библиотеки Telethon ;
- Вход в качестве учетной записи бота;
- Вход в систему через прокси-сервер;
- Использование прокси-серверов MTProto ;
- Еще примеры получения обновлений;
Авторизация в Telegram с помощью библиотеки Telethon .
Прежде чем работать с API Telegram, необходимо получить собственный идентификатор и хеш API:
- Необходимо войти в свою учетную запись Telegram, указав номер телефона учетной записи разработчика. Страница https://my.telegram.org «Delete Account or Manage Apps«.
- Далее нужно нажать «Инструменты разработки API«: появится окно «Создать новое приложение«. Заполните данные нового приложения. Нет необходимости вводить какой-либо URL-адрес, позже можно изменить только первые два поля (название приложения и краткое имя).
- В конце нажмите «Создать заявку«. Помните, что ваш хэш API является секретным, и Telegram не позволит вам его отозвать. Никуда его не публикуйте!
Примечание. Идентификатор и хэш API используются только приложением, а не номером телефона. Другими словами можно использовать этот идентификатор и хэш с любым номером телефона или даже для учетных записей ботов.
После получения идентификатора и хэша API можно написать код для входа в учетную запись Telegram!
# файл tеst.py from telethon import TelegramClient # Подставляем собственные значения из `my.telegram.org` api_id = 12345 api_hash = '0123456789abcdef0123456789abcdef' # Первый аргумент - это имя файла `.session` (допускаются абсолютные пути). with TelegramClient('anon', api_id, api_hash) as client: client.loop.run_until_complete(client.send_message('me', 'Hello, myself!'))
Важно! Не называйте скрипт telethon.py ! Python попытается импортировать клиент из telethon.py , которого там нет. В итоге сценарий завершится неудачей с ошибкой ImportError : cannot import name TelegramClient . .
В первой строке импортируется имя класса, чтобы создать экземпляр клиента. Затем определяются переменные для удобного хранения идентификатора и хеша API.
Наконец, создается новый экземпляр TelegramClient и называем его client . Теперь можно использовать переменную client для чего угодно, например для отправки сообщения самому себе.
Примечание. Так как Telethon является асинхронной библиотекой, то необходимо дождаться await выполнения функций сопрограммы (или, в противном случае, запускать цикл до их завершения). В этом примере не создается асинхронное определение async def`.
Использование контекстного менеджера with является предпочтительным способом использования библиотеки. Он автоматически запустит клиент TelegramClient.start() , выполнив вход или регистрацию при необходимости.
Если файл .session уже существует и куда нибудь перемещен или переименован, то клиент не сможет снова войти (имейте это в виду)!
Вход в качестве учетной записи бота.
Также можно использовать пакет Telethon для своих ботов (обычных учетных записей ботов, а не пользователей). Для этого все равно понадобится идентификатор и хэш API, но процесс очень похож:
from telethon.sync import TelegramClient api_id = 12345 api_hash = '0123456789abcdef0123456789abcdef' bot_token = '12345:0123456789abcdef0123456789abcdef' # если нам нужен явный токен бота, # то нужно вручную вызвать `TelegramClient.start()`. bot = TelegramClient('bot', api_id, api_hash).start(bot_token=bot_token) # Тогда можем использовать экземпляр клиента как обычно. with bot as bot_client: .
Для получения аккаунта бота, необходимо поговорить с @BotFather .
Вход в систему через прокси-сервер.
Для доступа к Telegram через прокси сервер, необходим Python >= 3.6 и установка модуля python-socks[asyncio] . Затем в коде необходимо изменить строку с созданием клиента:
# было TelegramClient('anon', api_id, api_hash) # стало (замените протокол, IP и порт на собственные). proxy=("socks5", '127.0.0.1', 4444) TelegramClient('anon', api_id, api_hash, proxy=proxy)
Аргумент proxy должен быть словарем (или кортежем для обратной совместимости), состоящим из параметров, как в описании модуля PySocks .
Допустимые значения аргумента proxy_type :
- socks.SOCKS5 или ‘socks5’
- socks.SOCKS4 или ‘socks4’
- socks.HTTP или ‘http’
- python_socks.ProxyType.SOCKS5
- python_socks.ProxyType.SOCKS4
- python_socks.ProxyType.HTTP
proxy = # обязательный протокол 'proxy_type': 'socks5', # обязательный IP-адрес прокси 'addr': '1.1.1.1', # обязательный номер порта прокси-сервера 'port': 5555, # имя пользователя, если прокси требует авторизации (необязательно) 'username': 'foo', # пароль, если прокси-сервер требует авторизации (необязательно) 'password': 'bar', # использовать удаленное или локальное разрешение, по умолчанию удаленное (необязательно) 'rdns': True > client = TelegramClient('anon', api_id, api_hash, proxy=proxy)
Для обратной совместимости с PySocks возможен следующий формат (но не рекомендуется):
proxy = (socks.SOCKS5, '1.1.1.1', 5555, True, 'foo', 'bar') client = TelegramClient('anon', api_id, api_hash, proxy=proxy)
Использование прокси-серверов MTProto .
Прокси MTProto — это альтернатива Telegram обычным прокси, работающая немного по-другому. Доступны следующие протоколы:
- ConnectionTcpMTProxyAbridged ;
- ConnectionTcpMTProxyIntermediate ;
- ConnectionTcpMTProxyRandomizedIntermediate (предпочтительный).
Если используется прокси-сервер MTProto , то на данный момент необходимо вручную указать эти специальные режимы подключения. В итоге код будет выглядеть следующим образом:
from telethon import TelegramClient, connection # необходимо изменить соединение client = TelegramClient( 'anon', api_id, api_hash, # Используем один из доступных режимов подключения. # Обычно этот вариант работает с большинством прокси. connection=connection.ConnectionTcpMTProxyRandomizedIntermediate, # Затем передайте данные прокси в виде кортежа: # (имя хоста, порт, секрет прокси) # Если у прокси нет секрета, то вместо него пишем: # '00000000000000000000000000000000' proxy=('mtproxy.example.com', 2002, 'secret') )
В будущих обновлениях команда разработчиков telethon может упростить использование прокси-серверов MTProto (например, убрать аргумент connection ).
Короче говоря, тот же код, который выше, но без комментариев, чтобы было понятнее:
from telethon import TelegramClient, connection client = TelegramClient( 'anon', api_id, api_hash, connection=connection.ConnectionTcpMTProxyRandomizedIntermediate, proxy=('mtproxy.example.com', 2002, 'secret') )
Дружественные методы работы с библиотекой telethon
Рассмотрим более длинный пример, с целью изучения некоторых методов, которые может предложить библиотека telethon . Они известны как «дружественные методы«, и их необходимо использовать всегда, если это возможно.
Код ниже показывает, как войти в Telegram, получить информацию о себе, отправить сообщения, файлы, войти в чат, распечатать сообщения и загрузить файлы.
from telethon import TelegramClient # подставляем собственные значения api_id = 12345 api_hash = '0123456789abcdef0123456789abcdef' client = TelegramClient('anon', api_id, api_hash) async def main(): # Получение информации о себе me = await client.get_me() # `me` - это пользовательский объект. Можно красиво напечатать # любой объект Telegram с помощью метода `.stringify`: print(me.stringify()) # Можно получить доступ ко всем атрибутам объектов Telegram с помощью # оператора точки. Например, чтобы получить имя пользователя: username = me.username print(username) print(me.phone) # Можно распечатать все диалоги/разговоры, в которых вы участвуете: async for dialog in client.iter_dialogs(): print(dialog.name, 'has ID', dialog.id) # Можно отправлять сообщения самому себе. await client.send_message('me', 'Hello, myself!') # . к какому-нибудь идентификатору чата await client.send_message(-100123456, 'Hello, group!') # . к каким-то контактам await client.send_message('+34600123123', 'Hello, friend!') # . или даже к любому имени пользователя await client.send_message('username', 'Testing Telethon!') # конечно, можно использовать `markdown` в своих сообщениях: message = await client.send_message( 'me', 'This message has **bold**, `code`, __italics__ and ' 'a [nice website](https://example.com)!', link_preview=False ) # Отправка сообщения возвращает объект отправленного # сообщения, который можно использовать повторно print(message.raw_text) # можно отвечать на сообщения напрямую, если есть объект сообщения. await message.reply('Cool!') # или отправляйте файлы, музыку, документы, альбомы. await client.send_file('me', '/home/me/Pictures/holidays.jpg') # можно распечатать историю сообщений любого чата: async for message in client.iter_messages('me'): print(message.id, message.text) # можно также загружать мультимедиа из сообщений! # Метод вернет путь, по которому был сохранен файл. if message.photo: path = await message.download_media() # печатает после завершения загрузки print('File saved to', path) with client: client.loop.run_until_complete(main())
Прежде чем продолжить, необходимо понимать, что делает представленный код, обратить внимание на то, как вызываются и используются методы и т. д.
ВАЖНО! Обратите внимание, что Telethon — это асинхронная библиотека, и поэтому к ней нужно привыкнуть и изучить основы модуля asyncio . Это очень поможет. Для начала, можно написать весь свой код внутри некоторого асинхронного определения, например:
client = . async def do_something(me): . async def main(): # Большая часть кода должна находиться здесь. # можно создать и использовать свою собственную асинхронную функцию (do_something). # функции должны быть быть асинхронными, если им нужно ждать получения данных. me = await client.get_me() await do_something(me) with client: client.loop.run_until_complete(main())
После осознания всего этого, можно использовать (если хотите) хук telethon.sync , но необходимо учитывать, что можно столкнуться с другими проблемами (у iPython, Anaconda и т. д. есть некоторые проблемы с ним).
Введение в получение обновлений.
Получение обновлений — важная тема для такой платформы обмена сообщениями, как Telegram. Всегда встает потребность получать уведомления, когда приходит новое сообщение, когда участник присоединяется, когда кто-то начинает печатать и т. д. Для этого можно использовать события events .
Важно! Настоятельно рекомендуется включать логирование при работе с событиями, так как исключения в обработчиках событий по умолчанию скрыты. Для этого необходимо добавить следующий фрагмент кода в самый верх сценария:
import logging logging.basicConfig(format='[%(levelname) 5s/%(asctime)s] %(name)s: %(message)s', level=logging.WARNING)
Начнем с примера автоматизации ответов:
from telethon import TelegramClient, events client = TelegramClient('anon', api_id, api_hash) @client.on(events.NewMessage) async def my_event_handler(event): if 'hello' in event.raw_text: await event.reply('hi!') client.start() client.run_until_disconnected()
В этом небольшом фрагменте кода некоторые вещи могут быть неясны. Разберем его:
@client.on(events.NewMessage)
Этот декоратор Python прикреплен к определению функции my_event_handler() и по сути означает, что при событии NewMessage будет вызвана упомянутая функция обратного вызова:
async def my_event_handler(event): if 'hello' in event.raw_text: await event.reply('hi!')
Если происходит событие NewMessage и в тексте сообщения содержится слово hello, то отвечаем на это событие сообщением hi! event.reply(‘hi!’) .
Примечание. Обработчики событий должны быть асинхронными по определению. Telethon — это асинхронная библиотека, основанная на asyncio , которая является более безопасным и зачастую более быстрым подходом чем потоки threads .
Другими словами, необходимо дождаться await всех вызовов, использующих сетевые запросы, а это большинство из них.
Еще примеры получения обновлений.
@client.on(events.NewMessage(outgoing=True, pattern=r'\.save')) async def handler(event): if event.is_reply: replied = await event.get_reply_message() sender = replied.sender await client.download_profile_photo(sender) await event.respond(f'Saved your photo sender.username>')
Событие в коде фильтрует сообщения (только те, которые отправляем outgoing=True , активируют метод), затем фильтруем по регулярному выражению r’.save’ , которое будет соответствовать сообщениям, начинающимся с ‘.save’ .
Внутри функции проверяем, отвечает ли событие на другое сообщение или нет. Если да, то получаем ответное сообщение и отправителя этого сообщения, а также загружаем его фотографию профиля.
Теперь удалим сообщения, содержащие слово ‘heck‘. Например, если в чате запрещено ругаться.
@client.on(events.NewMessage(pattern=r'(?i).*heck')) async def handler(event): await event.delete()
С помощью регулярного выражения r'(?i).*heck’ сопоставляем слово heck без учета регистра в любом месте сообщения.
Здесь представлен только объект события events.NewMessage , но есть еще много других полезных событий.
Понятие сущности entity пакета Telethon .
В библиотеке широко используется понятие entity «сущности«. Сущность будет ссылаться на любой объект User , Chat или Channel , который API может вернуть в ответ на определенные методы, такие как GetUsersRequest .
Когда нужен пользователь или чат, где произошло событие, необходимо использовать следующие методы:
async def handler(event): # Правильно chat = await event.get_chat() sender = await event.get_sender() chat_id = event.chat_id sender_id = event.sender_id # ПЛОХО. Не делате этого chat = event.chat sender = event.sender chat_id = event.chat.id sender_id = event.sender.id
События похожи на сообщения, но не содержат всей информации, которую содержит сообщение! Когда получаем сообщение вручную, оно будет содержать всю необходимую информацию. Когда получаем обновление о сообщении, оно не содержит всей информации, поэтому придется использовать методы, а не свойства.
Запомните как правило: новые события сообщений ведут себя так же, как объекты сообщений, поэтому с ними можно делать все, что можно делать с объектом сообщения.
Совместимость Telethon .
При разработке любой библиотеки, некоторые решения неизбежно окажутся неправильными в будущем. Одним из таких решений было использование потоков. Начиная с Python 3.6 стало возможным использование модуля asyncio с пользой для такой библиотеки, как Telethon.
Если приложение Telegram имеет старый код, просто используйте старые версии библиотеки! В этом нет ничего плохого, кроме отсутствия новых обновлений или исправлений, при этом возможно использовать исправленную версию с помощью pip install telethon==0.19.1.6 .
Нет смысла поддерживать синхронную версию Telethon, т.к. опыт показывает, что у людей нет времени обновляться, а было несколько изменений и чисток. Использование более старой версии — правильный путь.
Иногда принимаются и другие небольшие решения. Все это будет отражено в журнале изменений (истории версий), который следует прочитать при обновлении.
Если хотите окунуться в asyncio , вот некоторые вещи, которые понадобятся, чтобы начать миграцию действительно старого кода:
# 1. Импортируйте клиент из telethon.sync from telethon.sync import TelegramClient # 2. Измените этого монстра. try: assert client.connect() if not client.is_user_authorized(): client.send_code_request(phone_number) me = client.sign_in(phone_number, input('Enter code: ')) . # ОСТАЛЬНАЯ ЧАСТЬ КОДА finally: client.disconnect() # . на следующую строку: with client: . # ОСТАЛЬНАЯ ЧАСТЬ КОДА # 3. client.idle() больше не существует. # Измени это. client.idle() # на следующую строку: client.run_until_disconnected() # 4. `client.add_update_handler` больше не существует. # Измените это. client.add_update_handler(handler) # . на следующую строку: client.add_event_handler(handler)
Кроме того, все обработчики обновлений должны быть асинхронными, т.е. нужно ожидать вызовов методов, которые зависят от сетевых запросов, таких как получение чата или отправителя. Если обновления не используются, то все готово!
Удобство Telethon .
Весь код ниже предполагает, что выполнено одно из следующих действий:
from telethon import TelegramClient, sync # или from telethon.sync import TelegramClient
Это делает примеры короче и облегчает размышление.
Для быстрых скриптов, не требующих обновлений (например публикация сообщений в канал Telegram), гораздо удобнее забыть об asyncio и просто работать с последовательным кодом. Такое поведение может оказаться мощным гибридом для работы под управлением Python REPL.
# Обратите внимание, что `telethon.sync` # будет управлять циклом `asyncio` from telethon.sync import TelegramClient with TelegramClient(. ) as client: # обратите внимание на отсутствие `await` или loop.run_until_complete(). # т.к. цикл не выполняется, это делается за кулисами. print(client.get_me().username) message = client.send_message('me', 'Hi!') import time time.sleep(5) message.delete() # Также можно использовать гибрид синхронной # части и асинхронных обработчиков событий. from telethon import events @client.on(events.NewMessage(pattern='(?i)hi|hello')) async def handler(event): await event.reply('hey') client.run_until_disconnected()
Контекстный менеджер with и некоторые методы, такие как, TelegramClient.start() , TelegramClient.disconnect() и TelegramClient.run_until_disconnected() , по умолчанию работают как в синхронном, так и в асинхронном контекстах для удобства и во избежание небольших накладных расходов при использовании таких методов, как отправка сообщения, получение сообщений и т.д. Это сохраняет лучшее из оба мира как разумный вариант по умолчанию.
Примечание. Как правило, находясь внутри async def и при этом нужен клиент, то необходимо дождаться await вызовов API. Если вызываете другие функции, которым также требуются вызовы API, сделайте их async def и тоже ожидайте их. В противном случае в асинхронном режиме делать нечего.
Скорость и накладные расходы Telethon .
Когда будете готовы микро-оптимизировать свое приложение или просто не требуется вызывать какие-либо неосновные методы из синхронного контекста, то просто избавьтесь от импорта telethon.sync и работайте внутри async def :
Волшебный модуль telethon.sync по сути оборачивает каждый метод asyncio.run(main()) с некоторыми другими хитростями. Это накладные расходы, которые платите, если импортируете его, и то, что экономите, если не делаете этого.
import asyncio from telethon import TelegramClient, events async def main(): async with TelegramClient(. ) as client: # обратите внимание на скобки, здесь ожидается # вызов `client.get_me()`, а не свойства `.username`. print((await client.get_me()).username) message = await client.send_message('me', 'Hi!') await asyncio.sleep(5) await message.delete() @client.on(events.NewMessage(pattern='(?i)hi|hello')) async def handler(event): await event.reply('hey') await client.run_until_disconnected() asyncio.run(main())
Библиотека везде использует asyncio . Хотите научиться делать все правильно? Несмотря на то, что модулю asyncio посвящен отдельный раздел на https://docs-python.ru, в документации к библиотеке Telethon существует материал под названием Освоение asyncio для использования с Telethon , который познакомит с миром asyncio .
- КРАТКИЙ ОБЗОР МАТЕРИАЛА.
- Понимание сущностей entity библиотеки Telethon
- Все о получении обновлений модулем Telethon
- Файл сессии сеанса модуля Telethon
- Понятие типов Chats и Channels в модуле Telethon
- Освоение asyncio для использования с Telethon
- Переход с Telegram Bot API на библиотеку Telethon
- Двухфакторная авторизация (2FA) с модулем Telethon
- Ошибки RPCError модуля Telethon
- События еvents модуля Telethon
- Класс TelegramClient() модуля telethon
- Методы объекта TelegramClient модуля Telethon
- Свойства и методы объекта Message модуля Telethon
- Объект File модуля Telethon
- Объект Conversation модуля Telethon
- Объект Dialog модуля Telethon
- Класс Button модуля Telethon
- Объект InlineResult модуля Telethon
Создание телеграм бота с помощью Python

Как создать телеграм бота практически с неограниченным функционалом. Если вы знаете Python — то это будет несложно!
Какую библиотеку выбрать?
Одной из лучших библиотек Python для работы с Telegram является aiogram. Она предназначена для создания ботов на Telegram и имеет высокую производительность и поддержку. Однако, у aiogram может быть проблема с документацией, но есть чат в Telegram, где всегда можно получить помощь от разработчика библиотеки.
Если вам нужно что-то простое с несколькими хэндлерами и вы не хотите тратить много времени на изучение, то можно использовать библиотеку python-telegram-bot. У нее есть подробная документация, сниппеты кода и она поддерживает асинхронность с помощью декоратора @run_async.
Вы также можете запустить сервер без сервера на платформах Azure, Google, AWS или Yandex Functions с бесплатным лимитом в 1 000 000 обращений в месяц.
Также стоит обратить внимание на библиотеку telethon, если вам требуется делать то, что может только клиент Telegram, например, загружать файлы размером более 40 МБ. Она асинхронная и общается с серверами Telegram по протоколу MTProto. Одна из реализаций telethon, подходящая для создания ботов — Garnet.
Исходя из этой информации, можно сделать следующие выводы:
- Если вам нужна библиотека с высокой производительностью и поддержкой, но вы готовы справляться с возможными трудностями в документации, выбирайте aiogram.
- Если вам нужно что-то простое и хотите подробную документацию и сниппеты кода, обратите внимание на python-telegram-bot.
- Если вам нужно делать то, что может только клиент Telegram, рассмотрите библиотеку telethon.
Порядок создания нового телеграм бота
Действия в телеграм
- Создайте новый бот в Telegram через BotFather:
- Откройте Telegram и найдите BotFather.
- Начните диалог с BotFather и нажмите «/start».
- Следуйте инструкциям BotFather для создания нового бота:
- Введите имя бота (может быть любое, затем можно отредактировать)
- Введите логин бота (должен быть уникальным и заканчиваться на _bot)

Установка библиотеки
Установите и настройте необходимую библиотеку Python для работы с телеграм, например aiogram или python-telegram-bot.
Установка aiogram
Запустите командный интерпретатор (в Windows — cmd.exe)
pip install aiogramКак установить библиотеку Python Telegram Bot в Windows, Linux и MacOS:
- Windows:
- Откройте командную строку или PowerShell.
- Установите библиотеку с помощью команды: pip install python-telegram-bot
- Подождите, пока процесс установки завершится.
- Linux:
- Откройте терминал.
- Установите библиотеку с помощью команды: pip install python-telegram-bot .
- Подождите, пока процесс установки завершится.
- MacOS:
- Откройте терминал.
- Установите библиотеку с помощью команды: pip install python-telegram-bot
- Подождите, пока процесс установки завершится.
После завершения установки библиотеки Python Telegram Bot вы можете использовать ее в своих проектах для создания телеграм-ботов.
Как установить библиотеку telethon
Windows:
- Откройте командную строку или PowerShell.
- Введите команду: pip install telethon .
- Нажмите клавишу Enter и дождитесь завершения установки.
Linux:
- Откройте терминал.
- Введите команду: pip install telethon .
- Нажмите клавишу Enter и дождитесь завершения установки.
MacOS:
- Откройте терминал.
- Введите команду: pip install telethon .
- Нажмите клавишу Enter и дождитесь завершения установки.
После завершения установки вы сможете использовать библиотеку Telethon в своих проектах для взаимодействия с API Telegram.
Обратите внимание, что для успешной установки библиотеки Telethon вам может потребоваться наличие Python и pip на вашей системе. Если они не установлены, вам следует установить их перед установкой библиотеки Telethon.
Реализация простого бота в aiogram
- Импортируйте необходимые модули и классы из выбранной библиотеки.
- Создайте экземпляр класса бота и передайте ему токен вашего бота:
import aiogram # Импортируйте модуль из выбранной библиотеки bot = aiogram.Bot(token='YOUR_BOT_TOKEN') # Создайте экземпляр класса бота и передайте токен вашего ботаdispatcher = aiogram.Dispatcher(bot) # Создайте экземпляр класса Dispatcher и передайте экземпляр класса бота@dispatcher.message_handler() # Обработчик для обычных сообщений async def handle_message(message: aiogram.types.Message): # Ваш код для обработки сообщения @dispatcher.callback_query_handler() # Обработчик для inline-кнопок async def handle_callback_query(callback_query: aiogram.types.CallbackQuery): # Ваш код для обработки inline-кнопки # Добавьте другие обработчики по необходимостиasync def main(): await dispatcher.start_polling() # Запустить бота для получения входящих сообщений и событий if __name__ == '__main__': aiogram.executor.start_polling(dp, skip_updates=True) # Запустить основной цикл выполнения ботаimport aiogram bot = aiogram.Bot(token='YOUR_BOT_TOKEN') dispatcher = aiogram.Dispatcher(bot) @dispatcher.message_handler() async def handle_message(message: aiogram.types.Message): # Ваш код для обработки сообщения @dispatcher.callback_query_handler() async def handle_callback_query(callback_query: aiogram.types.CallbackQuery): # Ваш код для обработки inline-кнопки async def main(): await dispatcher.start_polling() if __name__ == '__main__': aiogram.executor.start_polling(dp, skip_updates=True)Пример простейшего бота на aiogram
import logging from aiogram import Bot, Dispatcher, types from aiogram.contrib.fsm_storage.memory import MemoryStorage # Установка уровня логов для отладки logging.basicConfig(level=logging.INFO) # Инициализация бота и диспетчера bot = Bot(token="YOUR_TELEGRAM_BOT_TOKEN") storage = MemoryStorage() dp = Dispatcher(bot, storage=storage) # Обработчик команды /start @dp.message_handler(commands=['start']) async def start_command(message: types.Message): # Отправка приветственного сообщения await message.answer("Привет! Я бот, который может отправить тебя на сайт Victor Komlev.") # Создание кнопки с ссылкой на сайт button = types.InlineKeyboardButton(text="Перейти на сайт", url="https://victor-komlev.ru") keyboard = types.InlineKeyboardMarkup().add(button) # Отправка кнопки пользователю await message.answer("Нажми на кнопку, чтобы перейти на сайт:", reply_markup=keyboard) # Запуск бота if __name__ == '__main__': from aiogram import executor executor.start_polling(dp, skip_updates=True)После этого вы можете запустить бота, и он будет приветствовать пользователей и создавать кнопку, которая ссылается на указанный сайт.
Обратите внимание, что для работы этого кода необходима версия Python 3.7 или выше
Эхо-бот
Бот отвечает тем же сообщением, что и было отправлено. Кроме случая, когда отправлены слова cat, cats, puss. В этом случае, будет отправлена картинка, сохраненная в файле data\cats.jpg
TOKEN = "Ваш токен" """ This is a echo bot. It echoes any incoming text messages. """ import logging from aiogram import Bot, Dispatcher, executor, types # Configure logging logging.basicConfig(level=logging.INFO) # Initialize bot and dispatcher bot = Bot(token=TOKEN) dp = Dispatcher(bot) @dp.message_handler(commands=['start', 'help']) async def send_welcome(message: types.Message): """ This handler will be called when user sends `/start` or `/help` command """ await message.reply("Hi!\nI'm EchoBot!\nPowered by aiogram.") @dp.message_handler(regexp='(^cat[s]?$|puss)') async def cats(message: types.Message): with open('data/cats.jpg', 'rb') as photo: ''' # Old fashioned way: await bot.send_photo( message.chat.id, photo, caption='Cats are here ', reply_to_message_id=message.message_id, ) ''' await message.reply_photo(photo, caption='Cats are here ') @dp.message_handler() async def echo(message: types.Message): # old style: # await bot.send_message(message.chat.id, message.text) await message.answer(message.text) if __name__ == '__main__': executor.start_polling(dp, skip_updates=True)