проблема в работе telebot и telethon

есть скрипт, который по ссылке на чат в тг записывает в бд данные участников, а также в другом файле есть тг бот написанный на telebot, и нужно вставить этот скрипт в бота, но т.к. telethon ассинхронная вылазят ошибки, я понимаю, что совмещать ассинхронный и многопоточный код неправильно, поэтому пытался импортировать фунцию из скрипта в бота, не получилось, решил всё таки просто вставить скрипт в хендлер в боте, но вылазит такая ошибка RuntimeError: There is no current event loop in thread 'WorkerThread2'. не знаю что ещё можно сделать, вот сам скрипт

import configparser
import sqlite3

from telethon.sync import TelegramClient

# классы для работы с каналами
from telethon.tl.functions.channels import GetParticipantsRequest
from telethon.tl.types import ChannelParticipantsSearch

# Считываем учетные данные
config = configparser.ConfigParser()
config.read("config.ini")

# Присваиваем значения внутренним переменным
api_id   = config['Telegram']['api_id']
api_hash = config['Telegram']['api_hash']
username = config['Telegram']['username']

client = TelegramClient(username, api_id, api_hash)

client.start()

url = input("Введите ссылку на канал или чат: ")
channel = client.get_entity(url)

comn = sqlite3.connect('users.sql')
cur = comn.cursor()

cur.execute('CREATE TABLE IF NOT EXISTS "%s"(id int, first_name varchar(50), username varchar(50))' % (channel.title))

comn.commit()
cur.close()
comn.close()

async def dump_all_participants(channel):
    """Записывает json-файл с информацией о всех участниках канала/чата"""
    offset_user = 0    # номер участника, с которого начинается считывание
    limit_user = 100   # максимальное число записей, передаваемых за один раз

    all_participants = []   # список всех участников канала
    filter_user = ChannelParticipantsSearch('')

    while True:
        participants = await client(GetParticipantsRequest(channel,
            filter_user, offset_user, limit_user, hash=0))
        if not participants.users:
            break
        all_participants.extend(participants.users)
        offset_user += len(participants.users)

    all_users_details = []   # список словарей с интересующими параметрами участников канала

    for participant in all_participants:
        all_users_details.append({"id": participant.id,
            "first_name": participant.first_name,
            "user": participant.username})

    conn = sqlite3.connect('users.sql')
    cur = conn.cursor()

    cur.execute('SELECT id FROM "%s"' % (channel.title))
    cor_users_id = cur.fetchall()
    users_id = []
    for i in cor_users_id:
        for j in i:
            users_id.append(j)

    for i in all_users_details:
        try:
            if i.get('id') in users_id:
                continue
            else:
                cur.execute('INSERT INTO "%s"(id, first_name, username) VALUES ("%s","%s", "%s")' % (channel.title, i.get('id'), i.get('first_name'), i.get('user')))
        except:
            continue
    conn.commit()

    cur.close()
    conn.close()

async def main():
    global channel
    await dump_all_participants(channel)


with client:
    client.loop.run_until_complete(main())

а вот этот скрипт в хендлере

@bot.message_handler(commands=['search'])
    def get_url_channel(message):
        bot.send_message(message.chat.id, "Введите ссылку на канал или чат: ")
        bot.register_next_step_handler(message, url_channel)

    def url_channel(message):
        url = message.text
        channel = client.get_entity(url)

        comn = sqlite3.connect('users.sql')
        cur = comn.cursor()

        cur.execute('CREATE TABLE IF NOT EXISTS "%s"(id int, first_name varchar(50), username varchar(50))' % (channel.title))

        comn.commit()
        cur.close()
        comn.close()
        bot.register_next_step_handler(message, main)


    async def dump_all_participants(channel):
        offset_user = 0  
        limit_user = 100  

        all_participants = []
        filter_user = ChannelParticipantsSearch('')

        while True:
            participants = await client(GetParticipantsRequest(channel,
                                                               filter_user, offset_user, limit_user, hash=0))
            if not participants.users:
                break
            all_participants.extend(participants.users)
            offset_user += len(participants.users)

        all_users_details = []

        for participant in all_participants:
            all_users_details.append({"id": participant.id,
                                      "first_name": participant.first_name,
                                      "user": participant.username})

        conn = sqlite3.connect('users.sql')
        cur = conn.cursor()

        cur.execute('SELECT id FROM "%s"' % (channel.title))
        cor_users_id = cur.fetchall()
        users_id = []
        for i in cor_users_id:
            for j in i:
                users_id.append(j)

        for i in all_users_details:
            try:
                if i.get('id') in users_id:
                    continue
                else:
                    cur.execute('INSERT INTO "%s"(id, first_name, username) VALUES ("%s","%s", "%s")' % (
                    channel.title, i.get('id'), i.get('first_name'), i.get('user')))
            except:
                continue
        conn.commit()

        cur.close()
        conn.close()

    async def main():
        global channel
        await dump_all_participants(channel)

очень прошу помощи


Ответы (0 шт):