@dp.message(CommandStart()) # обработчик события!
async def dejur(message: Message):
...
aioschedule.every().minute.do(dejur) # планируем вызов функции
async def send_duty_list(chat: int):
print(1)
global n,skipper
if weekday():
await bot.send_message(chat, text=f"Дежурные: {spisok[n]}")
if skipper == True:
if n!=14:
n = n+1
else:
n=0
return n
else:
skipper = True
return skipper
@dp.message(CommandStart())
async def dejur(message: Message):
await send_duty_list(message.chat.id) # шлём ответ в тот же чат, где была команда
async def scheduler():
aioschedule.every().minute.do(send_duty_list, chat=1108995102) # а тут шлём фиксированному юзеру
while True:
await aioschedule.run_pending()
await asyncio.sleep(1)
async def on_startup(_):
asyncio.create_task(scheduler())
scheduler_task = None
async def on_startup(_):
global scheduler_task
scheduler_task = asyncio.create_task(scheduler())
Вся проблема в том, что мне нужно вызвать функцию "Tsize_3" в ручную
cmd.exe /C "net stop имя_твоей_службы && net start имя_твоей_службы"
:restart
python bot.py
IF ERRORLEVEL 1 GOTO restart
sys.exit(0)
, а для перезапуска sys.exit(1)
. Бонус: бот также перезапустится при непойманном исключении.os.startfile(sys.argv[0])
, и сразу же выйти самому. Но приведённый вариант не дружит с виртуальным окружением, так что может потребоваться модификация вроде os.startfile('/path/to/venv/python3', 'open', sys.argv[0])
. Если нужно ещё и параметры командной строки передать, дело усложняется. dict_data_user = await state.get_data()
list_data_user = [] # сначала список пуст
for k, v in dict_data_user.items(): # начинаем цикл, первая итерация
list_data_user.append(v) # добавляем в список элемент. Длина списка равна 1.
user_id = message.from_user.id
id_product = list_data_user[0] # читаем из списка элемент с индексом 0. ОК, он есть, мы его только что добавили
full_name = list_data_user[1] # откуда бы взяться элементу с индексом 1 в списке из одного элемента?!
index_adress = list_data_user[2]
number_phon = list_data_user[3]
user_db.add_user(id_product=id_product, user_id=user_id, full_name=full_name,
index_adress=index_adress, number_phon=number_phon)
await state.clear()
dt_string = now.strftime("%d/%m/%Y %H:%M:%S") # метка времени вида дд/мм/гггг чч:мм:сс
if (dt_string == "19:04:00") and x == 6: # ВНЕЗАПНО метка времени вида чч:мм:сс, дата куда-то пропала
await asyncio.create_task(start_checking_price(1800))
await asyncio.create_task(some_coro(...))
не имеет смысла практически никогда! Если тебе нужно запустить корутину и дождаться результата, делаешь просто await some_coro(...)
.# ...
check_task = asyncio.create_task(start_checking_price(1800)) # нету await, мы не ждём созданную задачу!
try:
await dp.start_polling()
finally:
check_task.cancel() # отменяем корутину
# внутри start_checking_price() текущий выполняемый await выкинет исключение CancelledError
# это исключение всплывёт наружу, если мы сделаем await, и позволит отработать
# блокам finally, with и т.п. инструментам. Также можно явно поймать это исключение,
# чтобы обработать отмену корутины. Но в твоём случае это не требуется.
try:
await check_task # даём корутине отработать завершение
except asyncio.CancelledError: # ловим всплывшее CancelledError
pass # всё ок, никакие действия не требуются
await my_bot.close()