Как сделать кулдаун для команд в python
Доброго времени суток.
Есть бот, которому нужно сделать кулдаун на команды.
Вот как он выглядит:
email = 'email'
password = 'password'
comid = 'comid'
chatid = 'chatid'
class Bot:
def run(self):
while True:
messages = sub_client.get_chat_messages(chatId=chatid, size=10) # Получает последние 10 сообщений в чате
for id, message, author, authorid in zip(messages.messageId,
messages.content,
messages.author.nickname,
messages.author.id):
if message.lower() == "!бот": # Команда 1
try:
send_message(message="Бот", chatId=chatid)
except:
send_message(chatId=chatid, message="Не правильно.", replyTo=id)
if message.lower() == "!ping": # Команда 2
try:
send_message(message="Pong!", chatId=chatid)
except:
send_message(chatId=chatid, message="Не правильно.", replyTo=id)
if message.lower() == "!привет": # Команда 3
try:
send_message(message="пока", chatId=chatid)
except:
send_message(chatId=chatid, message="Не правильно.", replyTo=id)
Как-то так он выглядит(много чего удалил, этот кусок кода как наглядный пример)
Нужно сделать кулдаун в 5 секунд для каждой команды, при этом чтобы программа не останавливалась, как в случае с time.sleep, а давала возможность вызова других команд.
Возможно стоит каждую команду обернуть в функцию, думал над этим, но не уверен, так как не знаю как реализовать кулдаун в python.
Спасибо за помощь.
Ответы (1 шт):
Простой вариант: сохранять для каждой команды последнее время ее выполнения и проверять перед выполнением команды, что с предыдущего ее вызова прошел кулдаун.
И да, лучше обернуть каждую команду (точнее каждый ваш ответ) в отдельную функцию, потому что вы зашьетесь потом проверять кучу условий, если добавите в них хоть каплю функционала.
class Bot:
def run():
from time import time
last_time = [0] * 3
while True:
messages = sub_client.get_chat_messages(chatId=chatid, size=10)
for id, message, author, authorid in zip(messages.messageId,
messages.content,
messages.author.nickname,
messages.author.id):
message = message.lower()
if message == '!бот':
if time() > last_time[0] + 5:
try:
send_message(message="Бот", chatId=chatid)
except:
send_message(chatId=chatid, message="Не правильно.", replyTo=id)
last_time[0] = time()
else if ...