
ich bin am verzweifeln und brauche eure Hilfe. Ich habe einen Event-Listener gebaut, der Telegram ausließt und Dinge abarbeitet.
In unbestimmten Intervallen hört der Loop einfach auf zu arbeiten und arbeitet erst dann weiter, wenn ich Strg+C drücke.
Ich habe nun versucht zu filtern, ob der Client vielleicht nicht mehr verbunden ist oder andere Probleme vorliegen - aber sehe, dass der Loop einfach aufhört zu arbeiten und einfriert.
Gibt's diese Erfahrung schon? Ggf. eine Lösung dazu?
Es ist übrigens unerheblich, ob ich Asyncio verwende oder die Telethon eigene Funktion runUntilDisconnected(), um den Loop zu steuern.
Code: Alles auswählen
import configparser
import json
import asyncio
import mysql.connector
import re
import time
import threading
import sys
from datetime import datetime
from datetime import timedelta
import time
from telethon.sync import TelegramClient
from telethon import TelegramClient, events
from telethon.errors import SessionPasswordNeededError
from telethon.tl.functions.channels import GetParticipantsRequest
from telethon.tl import types, functions
from telethon.tl.types import InputPeerUser
from telethon.tl.functions.messages import SendMessageRequest
from telethon.tl.functions.messages import GetHistoryRequest
from telethon.tl.types import (
PeerChannel
)
# Reading Configs
config = configparser.ConfigParser()
config.read("config.ini")
# Setting configuration values
api_id = config['Telegram']['api_id']
api_hash = config['Telegram']['api_hash']
api_hash = str(api_hash)
phone = config['Telegram']['phone']
username = config['Telegram']['username']
def OpenDbConnection():
#create mysql connection
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="*****",
database="*****"
)
print("database **** connected")
return mydb
def CloseDbConnection(_mydb):
_mydb.close()
print("database **** disconnected")
# Create the client and connect
client = TelegramClient(username, api_id, api_hash)
client.start()
print("Client started")
@client.on(events.NewMessage(chats=(1332361311)))
async def normal_handler(event):
bla bla
@client.on(events.NewMessage(chats=(1150597976)))
async def normal_handler(event):
bla bla
@client.on(events.NewMessage(chats=(1369125754)))
async def normal_handler(event):
bla bla
async def run():
while 1:
print(f"time: {time.strftime('%X')}")
if not await client.is_user_authorized():
await client.send_code_request(phone)
try:
await client.sign_in(phone, input('Enter the code: '))
except SessionPasswordNeededError:
await client.sign_in(password=input('Password: '))
print("User is not authorized")
else:
print("User is authorized")
if not client.is_connected():
await client.connect()
print("Client not connected")
else:
print("Client connected")
await asyncio.sleep(240)
sys.stdout.flush()
loop = asyncio.get_event_loop()
loop.run_until_complete( run() )
print("After")
Es bleibt nicht in der Bearbeitung der Nachrichten hängen stehen - der Loop wird zu ZP x einfach nicht mehr ausgeführt und die Zeit nicht mehr ausgegeben.
Bei Strg+C wird der ganze Buffer dann runtergerasselt - der Loop mithin beendet.
Was mache ich falsch?
Ich danke für alle hilfreichen Antworten!
