Создать декоратор для телеграмм бота, который остановит оборачиваемую функцию
Нужно написать декоратор cancel_proc, который остановит оборачиваемую функцию по команде '/exit' Приведенный ниже способ не работает.
def cancel_proc(message):
def cancel(f):
def wrapped(*args, **kwargs):
if message.text == '/exit':
bot.send_message(message.from_user.id, 'Текущее действие остановлено.')
else:
return f(*args, **kwargs)
return wrapped
return cancel
@cancel_proc(message)
@bot.message_handler(commands=['command'])
def get_name_city(message: Optional[telebot.types.Message]) -> None:
while True:
bot.send_message(message.from_user.id, 'Происходит какое-то действие')
Ответы (1 шт):
Автор решения: Георгий Фролов
→ Ссылка
Получилось решить проблему следующим образом:
def stop(func: Callable) -> Callable:
"""
Wrapper for func to stop current action with command "/stop"
"""
def wrapped_func(*args, **kwargs):
message = args[0]
if message.text == '/stop':
bot.send_message(message.from_user.id, 'Текущее действие остановлено.')
else:
return func(*args, **kwargs)
return wrapped_func
@cancel_proc
@bot.message_handler(commands=['command'])
def get_name_city(message: Optional[telebot.types.Message]) -> None:
while True:
bot.send_message(message.from_user.id, 'Происходит какое-то действие')