Пишу код на telethon, объявил класс так как работать нужно будет с несколькими аккаунтами сразу и запустить его по старинке с помощью gathcher у меня не получилось, поэтому я сделал все функции обычными(без async) и запустил через потоки, что оказалось не тем что мне нужно. Как можно запустить их асинхронно?
from copyreg import pickle
from telethon import TelegramClient
import logging, eel
import telethon
from telethon.tl.functions.channels import JoinChannelRequest
from telethon.tl.functions.messages import ImportChatInviteRequest
from threading import Thread
import asyncio
logging.basicConfig(format='[%(levelname) 5s/%(asctime)s] %(name)s: %(message)s', level=logging.WARNING)
class Client:
def __init__(self, acc):
self.name = acc['name']
self.api = acc['api']
self.hash = acc['hash']
async def client(self):
print(f"{self.name} ----------------------------------------------")
try:
self.client = TelegramClient(self.name, self.api, self.hash)
clientFind = True
except Exception as err:
print(f"{self.name} не найден\n{err}")
clientFind = False
if clientFind:
try:
try:
await self.client(ImportChatInviteRequest(Link))
except telethon.errors.rpcerrorlist.InviteHashExpiredError:
await self.client(JoinChannelRequest(Link))
except Exception as err:
print(f"Не удалось войти в чат\n{err}")
while True:
print(f"{self.name} ----------------------------------------------")
await asyncio.sleep(1)
async def main():
accounts = [{'name': 'client1', 'api': 'api1', 'hash': 'hash1'},
{'name': 'client2', 'api': 'api2', 'hash': 'hash2'}]
clients = [Client(acc) for acc in accounts]
for client in clients:
await asyncio.gather(
client.client() # тут вызывается каждый из экземпляров класса
)
#client = Thread(target=client.client).start()
# код ниже к вопросу не принадлежит
@eel.expose
def start(links):
global Link
Link = links.split(',')
asyncio.run(main())
eel.init("web")
eel.start("main.html", host='127.0.0.2', port=0, size=(280,250))