Категории

Новостной бот

bot.py

from config import BOT_TOKEN, CHANNEL_ID, RSS_URL
from telegram import Bot
import asyncio
from fetcher import fetch_news
from filter import is_relevant

bot = Bot(token=BOT_TOKEN)

async def main():
    articles = fetch_news()
    for article in articles:
        if is_relevant(article):
            message = f"📰 <b>{article['title']}</b>\n{article['link']}"
            await bot.send_message(chat_id=CHANNEL_ID, text=message, parse_mode='HTML')

if __name__ == "__main__":
    asyncio.run(main())

config.py

from dotenv import load_dotenv
import os

load_dotenv()

BOT_TOKEN = os.getenv("BOT_TOKEN")
RSS_URL = os.getenv('RSS_URL')
CHANNEL_ID = os.getenv("CHANNEL_ID")
KEYWORDS = ["action", "боевик", "gunfight", "explosion", "chase", "military", "shootout"]

print("BOT_TOKEN:", BOT_TOKEN)

fetcher.py

import feedparser
from config import RSS_URL

def fetch_news():
    feed = feedparser.parse(RSS_URL)
    articles = []
    for entry in feed.entries:
        articles.append({
            'title': entry.title,
            'link': entry.link,
            'summary': entry.summary if 'summary' in entry else ''
        })
    return articles

fetcher.py

from config import KEYWORDS

def is_relevant(article):
    text = (article['title'] + " " + article['summary']).lower()
    return any(keyword.lower() in text for keyword in KEYWORDS)

requirements.txt

python-telegram-bot==20.7 feedparser==6.0.11 python-dotenv==1.0.1