Как добавить 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)
→ Ссылка