# Работа с ботом
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher.handler import CancelHandler
from aiogram.dispatcher.middlewares import BaseMiddleware
from aiogram.bot.api import Methods
from aiogram.types.message import ContentType
from aiogram.dispatcher.filters import BoundFilter
import os
import os.path
from aiogram import Bot, Dispatcher, executor, types
from aiogram.bot import api
import aiogram
from config import owner, API_TOKEN_REZKOBOT
import logging
import asyncpg
import asyncio
import telebot
# Работа со временем
import time
# задаем уровень логов
logging.basicConfig(level=logging.INFO)
# инициализируем бота
bot = Bot(token=API_TOKEN_REZKOBOT)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
async def start_command():
await bot.send_message(owner, "Hello!")
while True:
asyncio.run(start_command())
time.sleep(10)
# запускаем лонг поллинг
if __name__ == '__main__':
executor.start_polling(dp, skip_updates=True)
'''
Так нельзя, это же asyncio, тут любой синхронный код блокирует event loop и всё ломает. Для начала, надо вместо time.sleep использовать asyncio.sleep.
Потом, таск бота запускается при вызове start_polling уже после цикла. При этом event loop к тому моменту закончился, так как asyncio.run отработал.
Надо сделать как-то так:
'''
async def main():
polling_task = asyncio.create_task(dp.start_polling())
while True:
await asyncio.sleep(60)
await bot.send_message(owner, "Hello!")
loop = asyncio.get_event_loop()
if __name__ == '__main__':
loop.run_until_complete(main())
loop.close()
'''
Ответ номер два:
Для этого придумали планировщик aka scheduler, читать тут
https://botfather.dev/blog/zapusk-funkczij-v-bote-po-tajmeru
'''