Пошаговый мануал и готовый код для создания Telegram-бота, который будет присылать уведомления при упоминании заданных ключевых слов в каналах, группах и чатах Telegram на которые подписан ваш аккаунт.
Данный скрипт, используя библиотеку Telethon, прослушивает все новые сообщения и анализирует их на наличие указанных ключевых слов и автоматически отправляет уведомления в заранее заданный чат через бота, созданного с помощью Aiogram.
Скрипт предоставляет следующие возможности:
- Подключение к вашему Telegram-аккаунту с помощью Telethon, что позволяет прослушивать все сообщения в реальном времени.
- Анализ всех входящих сообщений в каналах, группах и личных чатах на наличие заданных ключевых слов.
- Автоматическое формирование уведомлений с подробной информацией об отправителе, названии чата, ссылке на сообщение (если это возможно) и другими данными.
- Отправка уведомлений в заданный целевой чат через бота Telegram, используя библиотеку Aiogram.
Работу скрипта можно настроить на сервере или на своем PC (будет бесплатно). В рамках этого материала рассмотрим вариант настройки на сервере, на Windows и macOS.
Результат работы
Скрипт подходит для отслеживания активности в Telegram, когда необходимо оперативно получать информацию о сообщениях, содержащих важные ключевые слова. Результат работы будет выглядеть следующим образом:
Исходный код
Создавать и настраивать бота будем используя этот скрипт:
from telethon import TelegramClient, events, types from aiogram import Bot import asyncio # API ID and Hash obtained through my.telegram.org api_id = 'ВАШ_API_ID' api_hash = 'ВАШ_API_HASH' # Your bot token created through BotFather bot_token = 'ВАШ_BOT_TOKEN' # Your account phone number phone_number = 'ВАШ_ТЕЛЕФОННЫЙ_НОМЕР' # Keywords to monitor keywords = ['cparip', 'rip'] # Create a Telethon client client = TelegramClient('session_name', api_id, api_hash) # Create a bot instance to send messages bot = Bot(token=bot_token) @client.on(events.NewMessage) async def new_message_listener(event): """ Listen for all new messages in channels and groups. """ # Split the message text into words and check for exact keyword match (case insensitive) message_words = event.raw_text.lower().split() matched_keyword = next((keyword for keyword in keywords if keyword.lower() in message_words), None) if matched_keyword: try: sender = await event.get_sender() # Get information about the sender except Exception as e: sender = None print(f"Error getting sender information: {e}") # Start forming the message to send username = "Unknown sender" full_name = "Unknown" channel_link = "Link not available" chat_title = "Unknown chat" # Title of the group, channel, or chat # Get chat information from the event chat = await event.get_chat() # Check if the sender is not None if sender is None: username = "Unknown sender" full_name = "Unknown" elif isinstance(sender, types.User): # For users username = f"@{sender.username}" if sender.username else "not available" full_name = f"{sender.first_name} {sender.last_name if sender.last_name else ''}".strip() elif isinstance(sender, (types.Channel, types.Chat)): # For channels or chats username = "Channel or group" full_name = sender.title if sender.title else "Unknown" # Check if chat information is available and fill in the data if chat: chat_title = chat.title if hasattr(chat, 'title') and chat.title else "Unknown chat" # Check if there is a username to form a direct link to the channel or group if hasattr(chat, 'username') and chat.username: channel_link = f"https://t.me/{chat.username}" else: channel_link = "Link not available" # Form a link to the specific message try: if isinstance(chat, types.Channel) or isinstance(chat, types.Chat): if hasattr(chat, 'username') and chat.username: # If the group or channel has a username, form a direct link to the message message_link = f'https://t.me/{chat.username}/{event.id}' else: # If the username is not available, use the chat ID to form the link chat_id_str = str(event.chat_id).replace('-100', '') if event.chat_id < 0 else str(event.chat_id) message_link = f'https://t.me/c/{chat_id_str}/{event.id}' else: message_link = "Message link not available" except Exception as e: message_link = "Message link not available" print(f"Error forming message link: {e}") # Form the notification text text = ( f'<b>Keyword found:</b> {matched_keyword}\n' f'<b>Chat title:</b> {chat_title}\n' f'<b>Username:</b> {username}\n' f'<b>Chat ID:</b> {event.chat_id}\n' f'<b>Full name:</b> {full_name}\n' f'<b>Message link:</b> <a href="{message_link}">Find message</a>\n' f'<b>Channel/Group link:</b> {channel_link}' ) # Send the message to the specified chat via your bot target_chat_id = '-1000000000' # Specify the chat ID where the bot should send notifications async with bot: try: await bot.send_message(chat_id=target_chat_id, text=text, parse_mode='HTML') except Exception as e: print(f"Error sending message: {e}") async def main(): # Start the Userbot await client.start(phone_number) print("Userbot started and listening to channels and groups...") # Userbot will run until manually stopped await client.run_until_disconnected() # Start the client if __name__ == "__main__": with client: client.loop.run_until_complete(main())
В этом коде необходимо заменить значения следующих переменных на свои:
api_id = 'ВАШ_API_ID'
api_hash = 'ВАШ_API_HASH'
bot_token = 'ВАШ_BOT_TOKEN'
phone_number = 'ВАШ_TЕЛЕФОННЫЙ_НОМЕР'
target_chat_id = '-1000000000' # Указываем ID целевого чата
keywords = ['cparip', 'rip'] # Ключевые слова для отслеживания
Получение данных для настройки скрипта
API ID и API Hash
Важно: Не советуем использовать личный Telegram-аккаунт для данного скрипта.
Переходим на http://my.telegram.org, чтобы получить API для Telegram-аккаунта. Вводим номер телефона, привязанный к аккаунту, и нажимаем «Next».
Вводим код, который пришел в Telegram-аккаунт, и нажимаем «Sign In».
Заполняем поля «App title» и «Short name» произвольными значениями. Затем нажимаем «Create application».
Подставляем данные в код, используя значения из полей «App api_id» и «App api_hash»:
api_id = 'ВАШ_API_ID'
api_hash = 'ВАШ_API_HASH'
Bot Token
- Создаем бота в Telegram с помощью @BotFather: отправляем команду
/newbot
, вводим название бота, а затем придумываем и отправляем его юзернейм. - Выданный API-токен сохраняем и вставляем в строку:
bot_token = 'ВАШ_BOT_TOKEN'
.
Телефонный номер
Важно: Не советуем использовать личный Telegram-аккаунт для данного скрипта.
Вписываем номер телефона от Telegram-аккаунта, который будет использоваться для авторизации через Telethon.
phone_number = 'ВАШ_TЕЛЕФОННЫЙ_НОМЕР'
ID-чата для уведомлений
- Создаём канал или группу и с помощью бота @chatidcheck_bot узнаем ID-чата.
- Приглашаем туда созданного бота и выдаем ему все права администратора.
Заменяем target_chat_id
в коде на ID-чата, куда бот должен отправлять уведомления.
Запуск скрипта на VDS-сервере
Покупка сервера
Покупаем VDS-сервер на FriendHosting с операционной системой Ubuntu 22.04 bit и Без панели управления. После покупки VDS-сервера, на почту придут данные доступа к серверу (SSH).
Подключение к VDS
Создаем подключение к серверу через SSH:
Используйте терминал на macOS, или установите программу для подключения через SSH на Windows, например, PuTTY.
Подключаемся к серверу по команде:
ssh ЛОГИН@IP-СЕРВЕРА -p ПОРТ
Вводим пароль:
Установка Python и необходимых инструментов
Добавляем Python и его инструменты для работы с виртуальными окружениями и установкой зависимостей:
apt install python3 python3-venv python3-pip -y
Эта команда установит Python 3, инструменты для работы с виртуальными окружениями и пакетный менеджер pip.
Создание папки для проекта
- Создаем папку для проекта:
mkdir telegram_bot
Папка нужна для удобной работы с проектом.
- Переходим в созданную папку:
cd telegram_bot
Создание и активация виртуального окружения
- Создаем виртуальное окружение:
python3 -m venv venv
Виртуальное окружение необходимо для изоляции зависимостей проекта.
- Активируем виртуальное окружение:
source venv/bin/activate
После активации виртуального окружения, ваша командная строка должна измениться, отображая (venv)
.
Установка необходимых библиотек
- Добавляем нужные библиотеки:
pip install telethon aiogram
Эти библиотеки необходимы для работы с Telegram API.
Добавление скрипта на сервер
- Создаем файл с вашим скриптом:
nano telegram_bot.py
nano — это текстовый редактор в командной строке. Вы также можете использовать любой другой редактор, с которым вы знакомы.
- Добавляем ваш ранее подготовленный код в файл telegram_bot.py. Для этого вставьте его в nano. Для вставки используйте правую кнопку мыши или CTRL+C / CTRL + V.
- После добавления кода зажмите CTRL + O, чтобы сохранить изменения, затем нажмите «Enter».
- Чтобы выйти из редактора зажмите CTRL + X.
Запуск бота в фоновом режиме
Чтобы бот продолжал работу после закрытия терминала, используем утилиту screen.
- Устанавливаем screen:
apt install screen -y
- Создаем новую сессию screen:
screen -S telegram_bot
- Запускаем скрипт:
python telegram_bot.py
При первом запуске скрипта запросит код подтверждения, отправленный на номер телефона. Вводим этот код в терминал, чтобы завершить процесс авторизации.
- Please enter your phone (or bot token): Номер телефона от Telegram
- Please enter the code you received: Код подтверждения
- Please enter your password: Код 2FA (Если на аккаунте установлена двухфакторная аутентификация)
- При успешном запуске в терминале появится сообщение: «Userbot запущен и слушает каналы и группы…».
- Если бот найдет сообщения с ключевыми словами, он отправит уведомление в указанный чат.
После этого бот начнет работать в данной сессии screen.
- Отсоединяемся от screen сессии: Зажмите CTRL + A, затем D, чтобы выйти из сессии, оставив ее работающей.
- Чтобы снова вернуться в screen:
screen -r telegram_bot
Запуск скрипта локально (на PC)
Запуск скрипта локально поможет сэкономить на покупке сервера, но придется держать компьютер включенным, а терминал с запущенным скриптом.
Установка Python
- Переходим на официальный сайт Python: https://www.python.org/downloads/.
- Скачиваем и устанавливаем последнюю версию Python.
Важно: На Windows обязательно отмечаем галочку «Add Python to PATH», чтобы Python был доступен в командной строке. На macOS эта настройка обычно выполняется автоматически.
Проверяем установку Python:
- Windows: Открываем Командную строку и выполняем команду:
python --version
- macOS: Открываем Терминал и выполняем команду:
python3 --version
Если всё успешно, увидим версию Python, например Python 3.10.0.
Установка Visual Studio Code
- Скачиваем и устанавливаем Visual Studio Code с официального сайта: https://code.visualstudio.com/.
- После установки запускаем VS Code.
Установка расширения в Visual Studio Code
- Запускаем VS Code и переходим на вкладку Extensions (значок квадратов на боковой панели или зажимаем Ctrl+Shift+X).
- В поиске расширений вводим Python и устанавливаем расширение от Microsoft, которое необходимо для работы с Python в VS Code и запуска нашего скрипта.
Настройка виртуального окружения для проекта
- Создаем папку для проекта, называем её, например, telegram_bot.
- Открываем эту папку в Visual Studio Code: выбираем в меню
File -> Open Folder
(илиFile -> Open
на macOS) и находим созданную папку.
Создание виртуального окружения:
- Windows: Открываем терминал в VS Code (
View -> Terminal
) и создаем виртуальное окружение командой:
python -m venv venv
- macOS: Открываем терминал в VS Code (
Terminal -> New Terminal
) и создаем виртуальное окружение командой:
python3 -m venv venv
Это создаст виртуальное окружение с именем venv
в папке проекта.
Активация виртуального окружения
- Windows: Выполняем команду:
.\venv\Scripts\activate
- macOS: Выполняем команду:
source venv/bin/activate
После активации в начале строки терминала должно появиться (venv)
, что подтверждает успешную активацию виртуального окружения.
Установка необходимых библиотек
В открытом терминале в VS Code устанавливаем библиотеки Telethon и Aiogram:
- Windows:
pip install telethon aiogram
- На macOS может потребоваться использовать pip3:
pip3 install telethon aiogramм
Проверяем установку библиотек:
pip list
В списке установленных библиотек должны быть видны telethon и aiogram.
Создание Python файла и вставка кода
- В Visual Studio Code в папке Telegram_Bot создаем новый файл, называем его
telegram_bot.py
- Вставляем в него ранее подготовленный код:
Важно: Перед запуском скрипта, убедитесь, что ваш файл сохранен.
Сохранение файла в VS Code на Windows:
- Сочетание клавиш: Нажмите Ctrl + S, чтобы сохранить текущий файл.
Через меню: Вы также можете перейти в меню в верхней части окна:
- Нажмите Файл (File).
- Выберите Сохранить (Save).
Сохранение файла в VS Code на macOS:
- Сочетание клавиш: Нажмите Cmd (⌘) + S, чтобы сохранить текущий файл.
Через меню: Также можно воспользоваться верхним меню:
- Нажмите File.
- Выберите Save.
Запуск скрипта на PC
Windows: Убедитесь, что виртуальное окружение активировано (venv) должно быть в начале строки терминала). Выполняем команду:
python telegram_bot.py
macOS: Аналогично, если окружение активировано, выполняем:
python3 telegram_bot.py
При первом запуске скрипта запросит код подтверждения, отправленный на номер телефона. Вводим этот код в терминал, чтобы завершить процесс авторизации.
- Please enter your phone (or bot token): Номер телефона от Telegram
- Please enter the code you received: Код подтверждения
- Please enter your password: Код 2FA (Если на аккаунте установлена двухфакторная аутентификация)
- При успешном запуске в терминале появится сообщение: «Userbot запущен и слушает каналы и группы…».
- Если бот найдет сообщения с ключевыми словами, он отправит уведомление в указанный чат.
Возможные проблемы и их решения
Ошибка подключения к Telegram:
- Убедитесь, что интернет-соединение стабильно и что ваш IP не заблокирован Telegram. Зачастую не хочет дружить с VPN.
Бот не отслеживает новые сообщения:
- Проверьте терминал: если соединение прервано, перезапустите скрипт.
Проблемы с библиотеками:
- Убедитесь, что все нужные библиотеки установлены, и что виртуальное окружение правильно активировано.
Проблемы с правами бота:
- Проверьте, чтобы у бота были все необходимые права для отправки сообщений в целевой чат.
Выбор интерпретатора Python в VS Code:
- Иногда VS Code может не видеть нужный интерпретатор Python. Нажимаем на версию Python в левом нижнем углу и выбираем интерпретатор, находящийся в папке venv.