Не однократно в группе была просьба в комментариях сделать бота в ТГ, который мониторил бы иные каналы с целью ловить там промо-коды, акции, скидки, розыгрыши и прочее. Изначально мне было не интересно, но так как спрос на это есть и я уже знаком с API-телеграм application development и ботов, почему бы и нет.
Идея максимально топорная - есть бот, есть список каналов, а также набор ключевых слов. Он должен с момента запуска 24/7 мониторить все посты и выдавать в личные сообщения пересланные посты из каналов. Я взялся за реализацию и был написан код:
Дописал, обрадовался. Протестировал на своем канале для тестов. Работает - ура. Но вот незадача. У меня не получилось реализовать его работу в чужих каналах.
Видите ли, политика Telegram не предполагает, что боты могут сами добавляться в каналы, чаты. Это может сделать только администратор оного, что в корне убивает всю идею. Ведь список каналов для парсинга акций динамичен, плюс я не представляю, как можно договориться с администрацией канала, где раздают промики, чтобы они добавили вашего "промо-стиллера" в свое сообщество.
Но у меня все еще есть проблема и мне нужно ее решить. Буквально вчера я опубликовал пост с десктопным приложением, которое собирает информацию об активности аудитории на любом публичном канале, и делает это исправно. Отсюда и родилась идея. Ботом будет не "бот" Телеграма, а реальная учетная запись пользователя, зарегестрировнная по номеру телефона.
И так, отыскав вторую симку в тумбочке, я приступил к работе. Я снова получил уже на второй номер новые
Идея максимально топорная - есть бот, есть список каналов, а также набор ключевых слов. Он должен с момента запуска 24/7 мониторить все посты и выдавать в личные сообщения пересланные посты из каналов. Я взялся за реализацию и был написан код:
import logging
import os
from dotenv import load_dotenv
from telegram import Update
from telegram.ext import (
ApplicationBuilder,
ContextTypes,
MessageHandler,
filters,
)
# Тут я загружаю переменные окружения из файла .env
load_dotenv()
# Настраиваю логирование, чтобы отслеживать работу бота
logging.basicConfig(
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO
)
logger = logging.getLogger(__name__)
# Получаю токен бота и свой Telegram ID из переменных окружения
TOKEN = os.getenv('TELEGRAM_BOT_TOKEN')
YOUR_TELEGRAM_ID = int(os.getenv('YOUR_TELEGRAM_ID'))
# Определяю список каналов, которые буду мониторить (использую их @username)
MONITORED_CHANNELS = ['@realgachi', '@mgerkom']
# Задаю ключевые слова, по которым буду искать сообщения
KEYWORDS = ['промокод', 'акция', 'розыгрыш', 'раздача']
async def handle_messages(update: Update, context: ContextTypes.DEFAULT_TYPE):
message = update.effective_message
chat = update.effective_chat
# Проверяю, что сообщение поступило из одного из указанных каналов
if chat.username not in MONITORED_CHANNELS:
return
# Ищу наличие хотя бы одного ключевого слова в тексте сообщения
if message.text and any(keyword.lower() in message.text.lower() for keyword in KEYWORDS):
try:
# Пересылаю сообщение себе
await message.forward(chat_id=YOUR_TELEGRAM_ID)
logger.info(f"Сообщение из {chat.username} переслано.")
except Exception as e:
logger.error(f"Ошибка при пересылке сообщения: {e}")
def main():
# Создаю приложение бота с использованием токена
application = ApplicationBuilder().token(TOKEN).build()
# Создаю обработчик для новых сообщений из указанных каналов
message_handler = MessageHandler(
filters.Chat(username=MONITORED_CHANNELS) & filters.TEXT,
handle_messages
)
# Добавляю обработчик в диспетчер приложения
application.add_handler(message_handler)
# Запускаю бота и начинаю получать обновления
logger.info("Бот запущен и готов к работе.")
application.run_polling()
if __name__ == '__main__':
main()
Дописал, обрадовался. Протестировал на своем канале для тестов. Работает - ура. Но вот незадача. У меня не получилось реализовать его работу в чужих каналах.
Видите ли, политика Telegram не предполагает, что боты могут сами добавляться в каналы, чаты. Это может сделать только администратор оного, что в корне убивает всю идею. Ведь список каналов для парсинга акций динамичен, плюс я не представляю, как можно договориться с администрацией канала, где раздают промики, чтобы они добавили вашего "промо-стиллера" в свое сообщество.
Но у меня все еще есть проблема и мне нужно ее решить. Буквально вчера я опубликовал пост с десктопным приложением, которое собирает информацию об активности аудитории на любом публичном канале, и делает это исправно. Отсюда и родилась идея. Ботом будет не "бот" Телеграма, а реальная учетная запись пользователя, зарегестрировнная по номеру телефона.
И так, отыскав вторую симку в тумбочке, я приступил к работе. Я снова получил уже на второй номер новые
App api_id:
App api_hash: