Telethon - Wartezeit zwischen den Nachrichten
Verfasst: Sonntag 29. Dezember 2019, 13:58
Moin da draußen...
ich habe ein Problem. Ich versuche mit Telethon eine automatische Weiterleitung zu programmieren. Und zwar sollen alle Nachrichten aus bestimmten Telegram-Gruppen zu einen Andere weitergeleitet werden.
Aber ich möchte die Nachrichten nicht alle auf einmal weiterleiten lassen, sondern versetzt nach z.B. 10 Sekunden. Also wenn 100 Nachrichten ankommen, sollen nicht sofort alle 100 auf einmal weitergeleitet werden, sondern in Abstand von 10 Sekunden.
Aber ich bekomme es einfach nicht hin.
Als Grundlage-Code habe ich den Code von https://github.com/glogiotatidis/tg-relay genommen.
Hier ist mein Code:
Kann mir vielleicht jemand bitte einen Tipp geben. Danke 
ich habe ein Problem. Ich versuche mit Telethon eine automatische Weiterleitung zu programmieren. Und zwar sollen alle Nachrichten aus bestimmten Telegram-Gruppen zu einen Andere weitergeleitet werden.
Aber ich möchte die Nachrichten nicht alle auf einmal weiterleiten lassen, sondern versetzt nach z.B. 10 Sekunden. Also wenn 100 Nachrichten ankommen, sollen nicht sofort alle 100 auf einmal weitergeleitet werden, sondern in Abstand von 10 Sekunden.
Aber ich bekomme es einfach nicht hin.
Als Grundlage-Code habe ich den Code von https://github.com/glogiotatidis/tg-relay genommen.
Hier ist mein Code:
Code: Alles auswählen
#!/usr/bin/env python
import asyncio
import logging
import datetime
import hashlib
from telethon import TelegramClient, events
import config
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
client = TelegramClient(config.SESSION_NAME, config.API_ID, config.API_HASH)
client.start()
RELAY_MAP = {}
async def setup():
user = await client.get_me()
logger.info(' Starte Server durch {}'.format(user.first_name))
await client.get_dialogs()
for x in config.RELAY_MAP.split(';'):
if not x:
return
key, values = x.split(':', 1)
values = values.split(',')
RELAY_MAP[int(key)] = [int(x) for x in values]
@client.on(events.NewMessage)
async def my_event_handler(event):
for chat_id, relays in RELAY_MAP.items():
if event.chat and event.chat.id == chat_id:
for relay in relays:
# Prüfen ob die angekommene Nachricht überhaupt Text enthält...
if event.raw_text == "":
print(
"🅾️ " + datetime.datetime.now().strftime('%X') + ": Nachricht enthält keinen Text...")
# Sonst diese Benachrichtigung ausgeben und die Nachricht posten
else:
print("✅ " + datetime.datetime.now().strftime(
'%X') + ": Nachricht '{}...' wurde von {} zu {} gesendet".format(event.raw_text[:50].replace("\n", " "), event.chat.id, relay))
# Die Nachricht wird gepostet
await client.send_message(relay, event.message)
break
loop = asyncio.get_event_loop()
loop.run_until_complete(setup())
client.run_until_disconnected()