diff --git a/src/bot/__init__.py b/src/bot/__init__.py index 4139f92..46b287d 100644 --- a/src/bot/__init__.py +++ b/src/bot/__init__.py @@ -38,4 +38,7 @@ def create_bot(token: str, engine: mariadb.Connection) -> telebot.TeleBot: bot.register_message_handler( functools.partial(handlers.help, bot), commands=["help", "start"] ) + bot.register_message_handler( + functools.partial(handlers.cancel, bot), commands=["cancel"] + ) return bot diff --git a/src/bot/handlers.py b/src/bot/handlers.py index 76cbac3..1fd1d94 100644 --- a/src/bot/handlers.py +++ b/src/bot/handlers.py @@ -32,20 +32,38 @@ def get_accounts( ) -def delete_all( - bot: telebot.TeleBot, engine: Engine, mes: telebot.types.Message -) -> None: - database.delete.purge_accounts(engine, mes.from_user.id) - database.delete.delete_master_pass(engine, mes.from_user.id) - bot.send_message(mes.chat.id, "Все ваши данные удалены из базы данных") - - def _base(bot: telebot.TeleBot, mes: Message, prev_mes: Message | None = None) -> None: bot.delete_message(mes.chat.id, mes.id) if prev_mes is not None: bot.delete_message(prev_mes.chat.id, prev_mes.id) +def delete_all( + bot: telebot.TeleBot, engine: Engine, mes: telebot.types.Message +) -> None: + _base(bot, mes) + bot_mes = bot.send_message( + mes.chat.id, + "Вы действительно хотите удалить все ваши аккаунты? Это действие нельзя отменить. Отправьте YES для подтверждения", + ) + bot.register_next_step_handler( + mes, functools.partial(_delete_all, bot, engine, bot_mes) + ) + + +def _delete_all( + bot: telebot.TeleBot, engine: Engine, prev_mes: Message, mes: Message +) -> None: + _base(bot, mes, prev_mes) + text = mes.text.strip() + if text == "YES": + database.delete.purge_accounts(engine, mes.from_user.id) + database.delete.delete_master_pass(engine, mes.from_user.id) + _send_tmp_message(bot, mes.chat.id, "Всё успешно удалено", timeout=10) + else: + _send_tmp_message(bot, mes.chat.id, "Вы отправили не YES, ничего не удалено") + + def set_master_password(bot: telebot.TeleBot, engine: Engine, mes: Message) -> None: _base(bot, mes, None) if database.get.get_master_pass(engine, mes.from_user.id) is not None: @@ -298,3 +316,7 @@ def help(bot: telebot.TeleBot, mes: telebot.types.Message) -> None: /reset_master_pass - удалить все аккаунты и изменить мастер пароль /cancel - отмена текущего действия""" bot.send_message(mes.chat.id, message) + + +def cancel(bot: telebot.TeleBot, mes: Message) -> None: + _send_tmp_message(bot, mes.chat.id, "Нет активного действия")