Telethon для взаимодействия с API Telegram на уровне клиента и python-telegram-bot для управления функциями самого бота.В современном информационном потоке бывает сложно уследить за всеми интересующими источниками. Telegram-каналы являются популярным средством распространения новостей, обновлений и различного контента. Бот, который автоматически парсит (собирает и анализирует) текст из заданного Telegram-канала и отправляет уведомления, может стать незаменимым помощником. Он позволит вам:
Создание такого бота – это задача, вполне реализуемая с помощью современных инструментов и библиотек, в частности, на языке Python.
Процесс создания Telegram-бота для парсинга канала и отправки уведомлений включает несколько ключевых шагов, от получения необходимых учетных данных до написания и запуска кода.
Настройка Telegram-бота для получения уведомлений.
Для того чтобы ваш скрипт мог взаимодействовать с Telegram API от имени пользователя (что необходимо для чтения сообщений из каналов), вам нужно зарегистрировать свое приложение:
api_id и api_hash. Сохраните их – они понадобятся для аутентификации вашего скрипта.Для отправки уведомлений от имени бота вам потребуется создать самого бота и получить его уникальный токен:
@BotFather (официальный бот для управления другими ботами)./start./newbot для создания нового бота.@BotFather попросит вас придумать имя для бота (например, "Мой Парсер Уведомлений") и затем юзернейм для бота, который должен заканчиваться на "bot" (например, MyNotificationParserBot). Юзернейм должен быть уникальным.@BotFather предоставит вам токен доступа (API token). Этот токен выглядит как длинная строка символов (например, 123456:ABC-DEF1234ghIkl-zyx57W2v1u0T). Обязательно сохраните этот токен в надежном месте, так как он используется для управления вашим ботом.Для разработки нашего бота мы будем использовать язык Python и несколько специализированных библиотек:
api_id и api_hash).BOT_TOKEN).Установите эти библиотеки с помощью менеджера пакетов pip:
pip install telethon python-telegram-bot
Убедитесь, что у вас установлен Python версии 3.7 или выше, так как обе библиотеки активно используют современные возможности языка, включая асинхронность.
Для корректной работы бота необходимо знать несколько идентификаторов:
@examplechannel) или его числовой ID (для приватных каналов, если у вашего аккаунта есть доступ).@userinfobot или @RawDataBot. Он в ответ пришлет информацию о вашем аккаунте, включая "Id".Эти значения будут использоваться в коде бота.
Ниже приведен пример кода на Python, который объединяет использование Telethon для мониторинга сообщений в указанном канале и python-telegram-bot для отправки уведомлений.
import asyncio
from telethon import TelegramClient, events
from telegram import Bot
# Рекомендуется импортировать ошибки для более надежной обработки
# from telegram.error import TelegramError
# --- НАСТРОЙКИ ---
API_ID = YOUR_API_ID # Замените на ваш api_id (число)
API_HASH = 'YOUR_API_HASH' # Замените на ваш api_hash (строка)
BOT_TOKEN = 'YOUR_BOT_TOKEN' # Токен вашего бота от @BotFather (строка)
# Юзернейм канала, который нужно парсить (например, 'some_public_channel' или числовой ID)
CHANNEL_USERNAME = 'target_channel_username'
# Ваш Telegram User ID для получения уведомлений (число)
# Узнать можно, например, у @userinfobot
USER_CHAT_ID = YOUR_TELEGRAM_USER_ID
# Имя файла сессии для Telethon (будет создан автоматически)
SESSION_NAME = 'my_parser_session'
# Ключевые слова для фильтрации (оставьте пустым, чтобы получать все сообщения)
# Пример: KEYWORDS = ['важно', 'обновление', 'акция']
KEYWORDS = []
# --- КОНЕЦ НАСТРОЕК ---
# Инициализация клиента Telethon (для чтения сообщений из канала)
# Он будет работать от имени вашего пользовательского аккаунта
client = TelegramClient(SESSION_NAME, API_ID, API_HASH)
# Инициализация бота (для отправки уведомлений)
# Он будет работать от имени созданного вами бота
telegram_bot = Bot(token=BOT_TOKEN)
@client.on(events.NewMessage(chats=CHANNEL_USERNAME))
async def new_message_handler(event):
"""
Обработчик новых сообщений в указанном канале.
"""
message_text = event.message.message
sender = await event.get_sender()
sender_username = getattr(sender, 'username', 'N/A')
print(f"Новое сообщение из канала {CHANNEL_USERNAME} от {sender_username}: {message_text[:100]}...")
# Проверка на наличие текста в сообщении
if not message_text:
print("Сообщение не содержит текста, пропуск.")
return
# Фильтрация по ключевым словам
if KEYWORDS:
# Проверяем, содержит ли сообщение хотя бы одно ключевое слово
# Приводим текст сообщения и ключевые слова к нижнему регистру для регистронезависимого поиска
message_lower = message_text.lower()
if not any(keyword.lower() in message_lower for keyword in KEYWORDS):
print(f"Сообщение не содержит ключевых слов: {', '.join(KEYWORDS)}. Пропуск.")
return
# Формирование текста уведомления
notification_message = f"🔔 Новое сообщение в канале {CHANNEL_USERNAME}:\n\n"
if sender_username and sender_username != 'N/A':
notification_message += f"👤 Отправитель: @{sender_username}\n"
notification_message += f"💬 Текст: {message_text}"
try:
# Отправка уведомления через вашего бота
await telegram_bot.send_message(chat_id=USER_CHAT_ID, text=notification_message)
print(f"Уведомление успешно отправлено пользователю {USER_CHAT_ID}.")
except Exception as e: # Лучше ловить конкретные ошибки TelegramError
print(f"Ошибка при отправке уведомления: {e}")
async def main():
"""
Основная функция для запуска клиента Telethon.
"""
# Подключение клиента Telethon
# При первом запуске потребуется ввести номер телефона и код из Telegram
await client.start(phone=lambda: input('Пожалуйста, введите ваш номер телефона (в международном формате, например +1234567890): '),
password=lambda: input('Пожалуйста, введите ваш пароль (если установлен 2FA): '))
print("Клиент Telethon успешно запущен и слушает канал.")
# Проверка, может ли бот отправлять сообщения (опционально, но полезно)
try:
bot_info = await telegram_bot.get_me()
print(f"Бот {bot_info.username} готов к отправке уведомлений.")
except Exception as e:
print(f"Ошибка при проверке бота: {e}. Убедитесь, что BOT_TOKEN корректен.")
return
# Оставляем клиент работать до его остановки (например, Ctrl+C)
await client.run_until_disconnected()
if __name__ == '__main__':
# Запуск асинхронной функции main
# В Python 3.7+ можно использовать asyncio.run(main())
# Для более старых версий или других окружений может потребоваться loop.run_until_complete(main())
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(main())
except KeyboardInterrupt:
print("Бот остановлен пользователем.")
finally:
# Корректное завершение работы клиента
if client.is_connected():
loop.run_until_complete(client.disconnect())
print("Клиент Telethon отключен.")
API_ID, API_HASH, BOT_TOKEN, юзернейм целевого канала (CHANNEL_USERNAME), и ваш USER_CHAT_ID для получения уведомлений. Также можно задать список KEYWORDS для фильтрации.TelegramClient (для Telethon) и Bot (для python-telegram-bot).new_message_handler(event): Эта асинхронная функция декорирована @client.on(events.NewMessage(chats=CHANNEL_USERNAME)). Это означает, что функция будет автоматически вызываться каждый раз, когда в указанном канале (CHANNEL_USERNAME) появляется новое сообщение.
event.message.message).KEYWORDS, проверяется их наличие в тексте сообщения. Уведомление отправляется только если найдено хотя бы одно ключевое слово.USER_CHAT_ID с помощью await telegram_bot.send_message(...).main(): Основная асинхронная функция, которая запускает клиент Telethon. При первом запуске client.start() запросит ваш номер телефона и код подтверждения из Telegram (а также пароль, если у вас включена двухфакторная аутентификация) для авторизации сессии. Эта информация сохранится в файле сессии (SESSION_NAME.session), и при последующих запусках авторизация будет происходить автоматически.if __name__ == '__main__': обеспечивает запуск функции main() при выполнении скрипта. Используется asyncio для управления асинхронными операциями..py (например, telegram_parser_bot.py).python telegram_parser_bot.py.В случае возникновения ошибок, внимательно читайте сообщения в консоли – они помогут определить причину проблемы.
При разработке и использовании такого бота стоит учитывать несколько важных аспектов для его стабильной и корректной работы:
try...except для перехвата исключений и логирования проблем.api_id, api_hash и BOT_TOKEN в общедоступных местах (например, в публичных репозиториях кода). Используйте переменные окружения или конфигурационные файлы, которые не добавляются в систему контроля версий.async/await с библиотекой asyncio) критически важно для производительности и отзывчивости бота, особенно если он будет выполнять несколько задач одновременно.Для создания бота, который парсит каналы и отправляет уведомления, можно использовать различные комбинации инструментов. Основные аспекты для сравнения — это возможности доступа к данным канала и способ отправки уведомлений. Ниже представлен радарный график, иллюстрирующий сильные стороны комбинации Telethon (для чтения канала как пользователь) и Telegram Bot API (для отправки уведомлений ботом).
Интерпретация графика:
Комбинация Telethon для чтения и Telegram Bot API для отправки уведомлений является мощным и гибким решением для поставленной задачи.
Для наглядного представления структуры и взаимосвязей компонентов бота, рассмотрим следующую ментальную карту. Она охватывает основные этапы от подготовки до развертывания и поддержки бота.
Эта карта помогает структурировать процесс разработки и не упустить важные детали на каждом этапе.
Для создания нашего Telegram-бота потребуется набор инструментов и технологий. В таблице ниже приведены основные из них с кратким описанием назначения:
| Инструмент/Библиотека | Назначение | Пример использования (концептуально) |
|---|---|---|
| Python | Основной язык программирования для разработки бота. | Написание всей логики бота, управление библиотеками. |
my.telegram.org |
Официальный сайт Telegram для разработчиков. Используется для получения api_id и api_hash, которые необходимы для авторизации вашего скрипта как пользовательского приложения Telegram. |
Регистрация нового приложения, получение и копирование учетных данных (api_id, api_hash). |
@BotFather |
Официальный бот Telegram для создания и управления другими ботами. Используется для регистрации вашего бота и получения BOT_TOKEN. |
Отправка команд /newbot для создания бота, /token для получения токена существующего бота. |
Библиотека Telethon (Python) |
Асинхронная Python-библиотека для взаимодействия с Telegram API на уровне клиента (пользователя). Позволяет читать сообщения из каналов, групп, получать информацию о пользователях и т.д. | client = TelegramClient('session_name', api_id, api_hash)@client.on(events.NewMessage(...)) |
Библиотека python-telegram-bot (Python) |
Библиотека для разработки Telegram-ботов на Python. Предоставляет удобный интерфейс для работы с Telegram Bot API: отправка сообщений, обработка команд, создание клавиатур и т.д. | bot = Bot(token=BOT_TOKEN)await bot.send_message(chat_id=..., text=...) |
Chat ID / Username |
Уникальный идентификатор чата, канала или пользователя в Telegram. Юзернейм – это публичное имя (например, @channelname). |
Указание канала-источника для парсинга (CHANNEL_USERNAME) и ID пользователя для отправки уведомлений (USER_CHAT_ID). |
asyncio (Python) |
Стандартная библиотека Python для написания конкурентного кода с использованием синтаксиса async/await. Необходима для эффективной работы с сетевыми операциями в Telethon. |
async def main(): ...await client.start()await asyncio.sleep(...) |
Понимание роли каждого из этих компонентов является ключом к успешной разработке и поддержке вашего Telegram-бота.
Для лучшего понимания процесса создания бота, который может получать сообщения из каналов, предлагаем ознакомиться со следующим видео. В нем демонстрируются практические аспекты использования Python и соответствующих библиотек для взаимодействия с Telegram. Хотя видео может охватывать более широкий спектр задач, принципы работы с сообщениями каналов будут полезны.
В этом видео рассматривается, как использовать Python для получения сообщений из публичных и приватных каналов/групп Telegram, а также списков пользователей. Хотя конкретная реализация бота для уведомлений может отличаться, основы работы с сообщениями и авторизацией через API являются общими. Обратите внимание на процесс получения `api_id`, `api_hash` и работу с библиотеками, подобными Telethon, для доступа к данным канала.
chat_id канала или свой собственный?
api_id и api_hash?
Если вы хотите углубить свои знания и расширить функционал бота, вот несколько направлений для исследования: