feat(subscription): add check on unsubscribe to notify user if no active subscriptions Signed-off-by: UdoChudo <stream@udochudo.ru>
64 lines
3.4 KiB
Python
64 lines
3.4 KiB
Python
from telebot import logger, TeleBot
|
||
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton, CallbackQuery
|
||
|
||
from app.bot.constants import UserStates
|
||
from app.bot.keyboards.settings_menu import get_settings_menu
|
||
from app.bot.processors.unsubscribe_processor import process_unsubscribe_button, process_unsubscribe_all_regions
|
||
from app.bot.utils.auth import auth
|
||
from app.bot.utils.helpers import get_user_subscribed_regions
|
||
from app.bot.utils.regions import format_regions_list
|
||
|
||
|
||
def register_handlers(bot, app, state_manager):
|
||
@bot.message_handler(commands=['unsubscribe'])
|
||
@bot.message_handler(func=lambda message: message.text == 'Отписаться')
|
||
def handle_unsubscribe(message):
|
||
with app.app_context():
|
||
chat_id = message.chat.id
|
||
username = f"{message.from_user.username}" if message.from_user.username else "N/A"
|
||
|
||
if not auth(chat_id, app):
|
||
bot.send_message(chat_id, "Вы не авторизованы для использования этого бота.")
|
||
logger.warning(f"Неавторизованный пользователь {chat_id} @{username}")
|
||
state_manager.set_state(chat_id, UserStates.REGISTRATION)
|
||
return
|
||
|
||
user_subscriptions = get_user_subscribed_regions(chat_id)
|
||
|
||
# ✅ Предварительная проверка: есть ли подписки
|
||
if not user_subscriptions:
|
||
bot.send_message(chat_id, "ℹ️ У вас нет активных подписок для отписки.",reply_markup=get_settings_menu())
|
||
state_manager.set_state(chat_id, UserStates.SETTINGS_MENU)
|
||
return
|
||
|
||
# Есть подписки — предлагаем меню отписки
|
||
state_manager.set_state(chat_id, UserStates.WAITING_INPUT)
|
||
formated_user_subscriptions = format_regions_list(user_subscriptions)
|
||
|
||
markup = InlineKeyboardMarkup()
|
||
markup.add(InlineKeyboardButton("Отписаться от всех регионов", callback_data="unsubscribe_all"))
|
||
markup.add(InlineKeyboardButton("Отмена", callback_data="cancel_input"))
|
||
|
||
bot.send_message(chat_id,
|
||
f"Введите номер(а) региона(ов) через запятую, от которых вы хотите отписаться:\n\n{formated_user_subscriptions}",
|
||
reply_markup=markup)
|
||
|
||
bot.register_next_step_handler(message, process_unsubscribe_button, app, bot, chat_id, state_manager)
|
||
|
||
|
||
|
||
def register_callback_unsubscribe(bot: TeleBot, app, state_manager):
|
||
@bot.callback_query_handler(func=lambda call: call.data == "unsubscribe_all")
|
||
def handle_subscribe_all_button(call: CallbackQuery):
|
||
chat_id = call.message.chat.id
|
||
username = f"{call.from_user.username}" if call.from_user.username else "N/A"
|
||
|
||
with app.app_context():
|
||
if not auth(chat_id, app):
|
||
bot.send_message(chat_id, "Вы не авторизованы для использования этого бота.")
|
||
logger.warning(f"Неавторизованный пользователь {chat_id} @{username}")
|
||
state_manager.set_state(chat_id, UserStates.REGISTRATION)
|
||
return
|
||
|
||
process_unsubscribe_all_regions(call, app, bot, state_manager)
|