0, 1
не сработает. Если нужен непрерывный кусок списка (т.е. не в разбивку, а подряд), то сработает otvet in napitki[0:2]
, т.е. "начиная с нулевого, и до второго, НЕ включительно". Это называется срез (slice), советую почитать. import asyncio
from aiogram import Bot, Dispatcher, html
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.types import Message
import aioschedule
TOKEN = "..."
dp = Dispatcher()
async def run_scheduler(): # крутит цикл планировщика
while True:
await asyncio.sleep(1)
await aioschedule.run_pending()
async def job(bot, chat_id): # выполняется планировщиком - не обработчик команд!
await bot.send_message(chat_id, 'Пинг!')
@dp.message_handler(text='Попингуй')
async def (message: Message) -> None: # обработчик команды - только планирует выполнение
aioschedule.every(5).seconds.do(job, bot=bot, chat_id=message.chat.id) # указываем функцию и аргументы
await bot.send_message(message.chat.id, 'Ну ты сам попросил...')
async def main() -> None: # тело программы
bot = Bot(token=TOKEN, default=DefaultBotProperties(parse_mode=ParseMode.HTML))
schedule_task = asyncio.create_task(run_scheduler()) # запускаем планировщик фоном
try:
await dp.start_polling(bot) # крутим бота
finally: # бот докрутился до завершения
schedule_task.cancel() # обрываем выполнение планировщика
try:
await schedule_task # даём ему корректно завершиться
except asyncio.CancelledError:
pass # отменённая корутина выкинут CancelledError, это нормально
if __name__ == "__main__":
asyncio.run(main())