# telegram_bot.py (erweitert) from config import SETTINGS import logging logger = logging.getLogger(__name__) class TelegramBot: def __init__(self): self.chat_id = SETTINGS["6695197012"] self.token = SETTINGS["7562186384:AAEvykmSQHkdkFMQhq8FJss>"] self.message_queue = asyncio.Queue() self.semaphore = asyncio.Semaphore(5) # Parallele Anfragen async def format_message(self, article): emoji_map = { "technology": "📱", "politics": "🏛️", "sports": "⚽", "general": "📰" } emoji = emoji_map.get(article["category"], "📌") return ( f"{emoji} *{article['title']}*\n" f"🗓️ {article['published'].strftime('%d.%m.%Y %H:%M')}\n" f"📰 Quelle: {article['source']}\n\n" f"{article['description']}\n\n" f"[➡️ Vollständiger Artikel]({article['link']})" ) async def send_message(self, text): async with aiohttp.ClientSession() as session: url = f"https://api.telegram.org/bot{self.token}/sendMessage" payload = { "chat_id": self.chat_id, "text": text, "parse_mode": "Markdown", "disable_web_page_preview": False } async with self.semaphore: try: async with session.post(url, json=payload) as response: if response.status != 200: logger.error(f"Telegram API Fehler: {await response.text()}") except Exception as e: logger.error(f"Nachricht konnte nicht gesendet werden: {str(e)}") async def process_queue(self): while True: article = await self.message_queue.get() try: message = await self.format_message(article) await self.send_message(message) finally: self.message_queue.task_done()