|
|
|
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) |
|
|
|
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() |