Test2 / telegram_bot.py
Dunevhhhh's picture
Create telegram_bot.py
d772b14 verified
# 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()