File size: 2,034 Bytes
d772b14
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 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()