Ошибка при запуске телеграм бота на aiogram

При запуске бота на aiogram 2.25 (python 3.10) возникает ошибка:

Traceback (most recent call last):
  File "/home/ch/rentacar/main.py", line 31, in <module>
    executor.start_polling(dp, on_startup=run.on_startup)
  File "/home/ch/rentacar/venv/lib/python3.10/site-packages/aiogram/utils/executor.py", line 45, in start_polling
    executor.start_polling(
  File "/home/ch/rentacar/venv/lib/python3.10/site-packages/aiogram/utils/executor.py", line 317, in start_polling
    loop = asyncio.get_event_loop()
  File "/usr/lib/python3.10/asyncio/events.py", line 656, in get_event_loop
    raise RuntimeError('There is no current event loop in thread %r.'
RuntimeError: There is no current event loop in thread 'MainThread'.

Код: (не весь)

print('main.py: load modules\n\n')
from aiogram import Bot, Dispatcher, executor, types
from random import randint

# ========= import requirements =============
print('main.py: load custom\n\n')
from config import *
from buttons import *
from classes import *
from select_date import *
from handlers import extra, admin, user, callbacks, fsm_analog, brones
import startup as run
import creeck

# =========== base variables =============
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

# ========== handlers ============
print('main.py: init handlers\n\n')
isAdminData, userId, doing = extra.handlers(dp, types, isAdminData, userId, doing)
isAdminData, doing = admin.handlers(bot, dp, types, isAdminData, doing)
user.handlers(dp, types, userId, isAdminData)
doing = brones.handlers(bot, dp, types, userId, doing)
doing = callbacks.handlers(bot, dp, types, doing, userId, isAdminData)
doing = fsm_analog.handlers(dp, bot, types, randint, doing, run.is_auto)

# ============ polling ==============
print('main.py: run bot')
run.bot = bot

executor.start_polling(dp, on_startup=run.on_startup)

#version 10.0.5

Бота я делаю давно, и здесь тьма тьмущая функций, и раскидал их в папку handlers.
Бот использует aigroam, requests, random, sqlite3, aioschedule.
После того, как я добавил aioschedule, бот начал выдавать ошибку. Если что, вот код который я добавил:

print('creeck.py: import modules')
from aioschedule import every, run_pending
from asyncio import run
from database import *
from api import CreeckAPI

creeck = CreeckAPI()

def main():
    data = creeck_get_all()
    for i in data:
        if i[1] == 'create':
            exec(f'creeck.create_{i[2]}({i[3]})', creeck)
            creeck_delete(i[0])
        elif i[1] == 'update':
            info = eval(i[3])
            exec(f'creeck.update_{i[2]}({info[0]}, "{info[1]}", "{info[2]}")', creeck)
            creeck_delete(i[0])
        elif i[1] == 'delete':
            exec(f'creeck.delete_{i[2]}({i[3]})', creeck)
            creeck_delete(i[0])
        else:
            print(f'creeck.py: warning - incorrect type "{i[1]}", dont update this\nmodule:', i[2], '\ndata:', i[3], '\nid:', i[0], '\n\n')

every(1).hour.do(main)

print('creeck.py: run schedule')
run(run_pending())

#version 1.0

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

Автор решения: Folov3r

Может это поможет:

  1. Перейти на другой шедулер — пакет, позволяющий выполнять операции в нужные интервалы времени. В качестве альтернативы можно использовать, например, пакет apscheduler.

  2. Внести изменения в вашу локальную копию пакета aioschedule. В файле aioschedule/__init__.py строку 107:

    jobs = [job.run() for job in self.jobs if job.should_run]
    

    замените на:

    jobs = [asyncio.create_task(job.run()) for job in self.jobs if job.should_run]
    

Сам столкнулся с этой ошибкой, люди говорят что это из-за старости библиотеки aioschedule.

→ Ссылка