Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как поставить Таймер в команду?

Роман Летнев Профи (978), на голосовании 3 недели назад
Доброе время суток, у меня тут возник вопрос. Как поставить таймер в команду бота. Пример:
 [{user[1]} предложил руки и сердца {user[2]}] - у вас есть 5 минут на соглашение иначе брак не будет осуществлён 
использую библиотеку Telebot
Голосование за лучший ответ
Malenkiuprinter Kpachemokoc Мастер (1716) 1 месяц назад
 import telebot 
import threading
import time

bot = telebot.TeleBot('YOUR_API_KEY')

# Словарь для хранения предложений и таймеров
proposals = {}

# Команда для предложения
@bot.message_handler(commands=['propose'])
def propose(message):
user1 = message.from_user.first_name
user2 = message.text.split()[1]

# Сохранение предложения
proposals[user2] = {
'from': user1,
'timestamp': time.time()
}

bot.send_message(message.chat.id, f"{user1} предложил руки и сердца {user2}. У вас есть 5 минут на соглашение, иначе брак не будет осуществлён.")

# Запуск таймера
threading.Timer(300, check_proposal, args=(message.chat.id, user2)).start()

# Команда для соглашения
@bot.message_handler(commands=['accept'])
def accept(message):
user2 = message.from_user.first_name

if user2 in proposals:
user1 = proposals[user2]['from']
bot.send_message(message.chat.id, f"{user2} согласился на предложение {user1}. Брак состоялся!")
# Удаление предложения после согласия
del proposals[user2]
else:
bot.send_message(message.chat.id, "Предложение не найдено или время истекло.")

# Функция для проверки предложения по истечении времени
def check_proposal(chat_id, user2):
if user2 in proposals:
bot.send_message(chat_id, f"Время истекло. Брак между {proposals[user2]['from']} и {user2} не состоялся.")
del proposals[user2]

# Запуск бота
bot.polling(none_stop=True)
Как это работает:
Когда пользователь отправляет команду /propose @username, бот сохраняет это предложение и запускает таймер на 5 минут (300 секунд).
Если в течение 5 минут пользователь, которому сделали предложение, отправит команду /accept, то брак состоится, и предложение будет удалено.
Если 5 минут пройдут без ответа, сработает таймер, и предложение будет отменено.
Этот код использует поток для отсчёта времени и реагирует на события, которые происходят до истечения времени.
Похожие вопросы