def create_confirm_user_menu(user: User): return botutils.create_menu({ Locale.CONFIRM: f'{Messages.CONFIRM}:{user.telegram_id}', Locale.NOT_CONFIRM: f'{Messages.NOT_CONFIRM}:{user.telegram_id}', Locale.DELETE: f'{Messages.DELETE}:{user.telegram_id}' })
def ask_for_subscription_by_userid(user_id: str): keyboard = botutils.create_menu({ Locale.CHARACTER_SUBCRIPTION: Messages.SUBSCRIBE, Locale.CHARACTER_UNSUBCRIPTION: Messages.UNSUBSCRIBE }) question = Locale.CHARACTER_QUESTION_ABOUT_SUBCRIPTION bot.send_message(user_id, text=question, reply_markup=keyboard)
def send_check_menu(telegram_id: str): user = database.get_user(telegram_id) keyboard = {} for boss_mask in BossMasks.get_list(): btn_text = botutils.format_boss_check_button_text(boss_mask, user) keyboard[btn_text] = f'{Messages.CHECK}:{boss_mask}' keyboard[Locale.GO_BACK] = Messages.MENU bot.send_message(telegram_id, BossCheck.WILL_NOTIFY, reply_markup=botutils.create_menu(keyboard))
def send_menu_by_user_world_bosses(user): menu = { Bosses.AZUREGOS: Bosses.AZUREGOS, Bosses.KAZZAK: Bosses.KAZZAK, Bosses.FERALAS: Bosses.FERALAS, Bosses.DUSKWOOD: Bosses.DUSKWOOD, Bosses.HINTERLANDS: Bosses.HINTERLANDS, Bosses.ASHENVALE: Bosses.ASHENVALE, Locale.GO_BACK: Messages.MENU # BossCheck.BEGIN_CHECKING: BossCheck.BEGIN_CHECKING, # BossCheck.CHECK_LIST: BossCheck.CHECK_LIST } question = Locale.BOT_MENU_MESSAGE_BOSSES_DESCRIPTION bot.send_message(user.telegram_id, text=question, reply_markup=botutils.create_menu(menu))
def callback_worker(call): if call.data == Messages.MENU: send_menu(call) elif call.data == Messages.SUBSCRIBE: database.set_subscription(call.from_user.id, Database.USER_SUBSCRIBED) bot.send_message(call.from_user.id, Locale.CHARACTER_SUCCESSFUL_SUBCRIPTION) send_menu(call) elif call.data == Messages.UNSUBSCRIBE: database.set_subscription(call.from_user.id, Database.USER_UNSUBSCRIBED) bot.send_message(call.from_user.id, Locale.CHARACTER_SUCCESSFUL_UNSUBCRIPTION) send_menu(call) # elif call.data == Messages.WORLD_BOSSES: send_menu_bosses(call) # elif call.data in Bosses.getList(): notify_all(call.data, call.from_user.id) elif call.data == BossCheck.BEGIN_CHECKING: send_check_menu(call.from_user.id) elif call.data == BossCheck.CHECK_LIST: text = '' for boss_mask in BossMasks.boss_list(): text += f'{BossCheck.CHECK(boss_mask,database.get_users_by_mask(boss_mask))}\n\n' bot.send_message(call.from_user.id, text, parse_mode='markdown', reply_markup=botutils.create_menu( {Locale.GO_BACK: Messages.MENU})) elif call.data.startswith(Messages.CHECK): boss_mask = int(call.data.split(':')[1]) if (boss_mask in [BossMasks.ALL, BossMasks.NONE]): database.update_user(call.from_user.id, Database.FIELD_BOSS_MASK, boss_mask) else: database.toggle_user_mask(boss_mask, call.from_user.id) send_check_menu(call.from_user.id)
def send_menu_by_user(user): menu = { Locale.BOT_MENU_MESSAGE_BOSSES: Messages.WORLD_BOSSES, BossCheck.BEGIN_CHECKING: BossCheck.BEGIN_CHECKING, BossCheck.CHECK_LIST: BossCheck.CHECK_LIST } if user.subscribed == Database.USER_SUBSCRIBED: menu[Locale.CHARACTER_UNSUBCRIPTION] = Messages.UNSUBSCRIBE else: menu[Locale.CHARACTER_SUBCRIPTION] = Messages.SUBSCRIBE if user.status >= Statuses.ADMIN: menu[Locale.BOT_ADMIN_MENU] = Messages.ADMIN question = Locale.BOT_MENU_MESSAGE bot.send_message(user.telegram_id, text=question, reply_markup=botutils.create_menu(menu))
def handle_admin_click(call): if call.data == Messages.ADMIN: menu = { Admin.ALL_USERS: f'{Messages.ALL_USERS}:0', Admin.ALL_GUILDS: Messages.ALL_GUILDS, Admin.ALL_PENDING_USERS: Messages.ALL_PENDING_USERS, Admin.ALL_BANNED_USERS: Messages.ALL_BANNED_USERS, Admin.ALL_ADMINS: Messages.ALL_ADMINS, Admin.CHANGE_USER_STATUS: Messages.CHANGE_USER_STATUS, Admin.ADD_GUILD: Messages.ADD_GUILD, Admin.MESSAGE_TO_ALL_TITLE: Messages.MESSAGE_TO_ALL, Locale.GO_BACK: Messages.MENU } question = Locale.BOT_ADMIN_MENU bot.send_message(call.from_user.id, text=question, reply_markup=botutils.create_menu(menu)) elif call.data.startswith(Messages.ALL_USERS): page = int(call.data.split(':')[1]) page_count = ceil(database.get_users_count() / Database.PAGE_SIZE) users = database.get_users_page(page) keyboard = botutils.create_page_menu(page, page_count) bot.send_message(chat_id=call.from_user.id, text=botutils.format_users_as_table(users), parse_mode='Markdown', reply_markup=keyboard) elif call.data == Messages.ALL_GUILDS: guilds = database.get_all_guilds() bot.send_message(chat_id=call.from_user.id, text=botutils.format_guilds_as_table(guilds), parse_mode='Markdown') elif call.data == Messages.ALL_PENDING_USERS: pending_users = database.get_all_pending_users() if len(pending_users) == 0: bot.send_message(call.from_user.id, Admin.USERS_EMPTY) else: bot.send_message( chat_id=call.from_user.id, text=botutils.format_users_as_table(pending_users), parse_mode='Markdown') elif call.data == Messages.ALL_BANNED_USERS: banned_users = database.get_all_banned_users() if len(banned_users) == 0: bot.send_message(call.from_user.id, Admin.USERS_EMPTY) else: bot.send_message(chat_id=call.from_user.id, text=botutils.format_users_as_table(banned_users), parse_mode='Markdown') elif call.data == Messages.ALL_ADMINS: all_admins = database.get_all_admins() if len(all_admins) == 0: bot.send_message(call.from_user.id, Admin.USERS_EMPTY) else: bot.send_message(chat_id=call.from_user.id, text=botutils.format_users_as_table(all_admins), parse_mode='Markdown') elif call.data == Messages.ADD_GUILD: user = database.get_user(call.from_user.id) if user.status in [Statuses.SUPERVISOR]: bot.send_message(call.from_user.id, Locale.GUILD_NAME) bot.register_next_step_handler_by_chat_id(call.from_user.id, add_guild) else: bot.send_message(call.from_user.id, Admin.NO_PERMITTIONS) elif call.data == Messages.MESSAGE_TO_ALL: bot.send_message(call.from_user.id, Admin.MESSAGE_TEXT) bot.register_next_step_handler_by_chat_id(call.from_user.id, message_to_subscribed_users) elif call.data == Messages.CHANGE_USER_STATUS: bot.send_message(call.from_user.id, Admin.SELECT_USER_STATUS_BY_ID) bot.register_next_step_handler_by_chat_id(call.from_user.id, user_id_exists) elif call.data.startswith(Messages.ADD_ADMIN): user_id = call.data.split(':')[1] database.update_user(user_id, Database.FIELD_STATUS, Statuses.ADMIN) bot.send_message(user_id, Admin.CHANGE_USER_STATUS_BY_ID_ADD_ADMIN) bot.send_message(call.from_user.id, Admin.CHANGE_USER_STATUS_BY_ID_SUCCESSFUL) notify_all_admins(call.from_user.id, user_id) elif call.data.startswith(Messages.CONFIRM): user_id = call.data.split(':')[1] database.update_user(user_id, Database.FIELD_STATUS, Statuses.ACTIVE) bot.send_message(user_id, Locale.CHARACTER_REG_SUCCESSFUL) ask_for_subscription_by_userid(user_id) bot.send_message(call.from_user.id, Admin.CHANGE_USER_STATUS_BY_ID_SUCCESSFUL) notify_all_admins(call.from_user.id, user_id) elif call.data.startswith(Messages.NOT_CONFIRM): user_id = call.data.split(':')[1] database.update_user(user_id, Database.FIELD_STATUS, Statuses.BANNED) bot.send_message(user_id, Locale.CHARACTER_REG_BANNED) bot.send_message(call.from_user.id, Admin.CHANGE_USER_STATUS_BY_ID_SUCCESSFUL) notify_all_admins(call.from_user.id, user_id) elif call.data.startswith(Messages.DELETE): user_id = call.data.split(':')[1] notify_all_admins_about_delete(call.from_user.id, user_id) database.remove_user(user_id) bot.send_message(user_id, Locale.CHARACTER_REG_FAILED) elif call.data == Messages.ADMIN: database.set_subscription(call.from_user.id, Database.DB_USER_SUBSCRIBED) bot.send_message(call.from_user.id, Locale.CHARACTER_SUCCESSFUL_SUBCRIPTION) else: callback_worker(call)