Как добавить time.sleep() в f'' строку после return в функции def result()?
bot_script.py
import random
import time
import telebot
voc = [
'собака',
'енот',
'гусь',
'рыба',
'змея',
'кот'
]
def result():
diceroll = range(0, 6)
random_number = random.choice(diceroll)
for a in enumerate(voc):
if a[0] == random_number:
# вот сюда я пытаюсь добавить time.sleep() чтобы в телеграм
# боте оно написало 2 предложения с задержкой
# пример(Выпало 1. *пауза 2 сек* ты кот)
return f'выпало {random_number +1}\n' f'ты {a[1]}!'
Или как это можно сделать другим способом?
bot_run.py
import telebot
import bot_script
import time
bot = telebot.TeleBot("token")
@bot.message_handler(commands=['start'])
def start_game(message):
bot.send_message(message.chat.id, f'сыграем в игру?!\n /yes | /no ')
@bot.message_handler(commands=['yes'])
def start_game1(message):
bot.send_message(message.chat.id, bot_script.result())
time.sleep(1)
bot.send_message(message.chat.id, f'Нажми /start!? ')
@bot.message_handler(commands=['no'])
def start_game2(message):
bot.send_message(message.chat.id, f'Если передумаешь-нажми /start!? ')
bot.infinity_polling()
Ответы (2 шт):
Автор решения: bodya
→ Ссылка
import time
DELAY = 5
def sleep_after_return(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
time.sleep(DELAY)
return wrapper
@sleep_after_return
def print_abc():
print('abc')
print_abc()
Думаю, что данный декоратор сможет вам помочь, 'abc' отобразиться в потоке вывода после 5 секунд
Также, декораторы можно использовать последовательно
def some_decorator(func):
def wrapper(*args, **kwargs):
func(*args, **kwargs)
print('additional wrapper')
return wrapper
def sleep_after_return(func):
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
time.sleep(DELAY)
return wrapper
@sleep_after_return
@some_decorator
def print_abc():
print('abc')
print_abc()
Автор решения: insolor
→ Ссылка
return
завершает работу функции, после него уже ничего нельзя выполнить. Вам нужно не возвращать строку, а прямо в этой функции отправлять сообщения с паузой, в простейшем виде будет что-то такое:
def result(bot, chat_id):
bot.send_message(chat_id, "Выпало 1")
time.sleep(2)
bot.send_message(chat_id, "Ты кот")
@bot.message_handler(commands=['yes'])
def start_game1(message):
bot_script.result(bot, message.chat.id)