Сразу к делу. Пытаюсь я для своего бота написать модуль таймеров, код примерно так выглядит:
@client.on(events.NewMessage(outgoing=True, pattern=f"{prefix}ntime"))
async def time(event):
if timeprov() == "True":
besedaid = event.chat.id
aa = event.text.split(" ")
times = aa[1]
interval = int(aa[2])
aa.pop(0)
aa.pop(0)
aa.pop(0)
aaa = " ".join(aa)
if is_int(times):
pass
elif times.lower() == "inf" or times.lower() == "infinity":
pass
else:
event.edit(" incorrect info, try again")
return
if is_int(interval):
pass
else:
event.edit(" incorrect info, try again")
return
cursor.execute(f"INSERT OR IGNORE into 'timers' ('chatid', 'times', 'interval', 'word') VALUES (?, ?, ?, ?)", (besedaid, times, interval, aaa,))
conn.commit()
await event.edit("✅ success")
interval *= 60
await sleep(interval)
if times.lower() == "inf":
while True:
await event.respond(aaa)
await sleep(interval)
else:
while times > 0:
times -= 1
await event.respond(aaa)
await sleep(interval)
Значит так, бот отделяет нужную информацию по порядку и проверяет ее синтаксис, если синтаксис верный - добавляет данные в бд. После бот начинает цикл по данным, которые ему задали. Нужно сделать так, чтобы цикл этот можно было как-то остановить при надобности, я хотел сделать отдельный параметр в бд, который проверяется при каждом исполнении цикла, и если его ответ не подходит под условие - цикл срывается, но для такого нужно найти строку с данными по которым эта штука работает, заменить в ней значение, а уже после добавить проверку этого условия. БД выглядит так:
id - первичный ключ, который генерируется автоматом
chatid - чат, в котором вызвали команду (в другом месте уже используется, к вопросу почти непричастно)
times - повторения
interval - интервал в минутах (конвертируется в секунды)
disable - отключить или выключить (то, что надо найти и проверить и получить возможность изменять)