def help_button(update, context): query = update.callback_query user = update.effective_user mod_match = re.match(r"help_module\((.+?)\)", query.data) staff_match = re.match(r"help_staff", query.data) back_match = re.match(r"help_back", query.data) try: if mod_match: module = mod_match.group(1) text = ("Berikut adalah bantuan untuk modul *{}* :\n".format( HELPABLE[module].__mod_name__) + HELPABLE[module].__help__) query.message.edit_text( text=text, parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton(text="⟸ KEMBALI", callback_data="help_back") ]]), ) elif staff_match: query.message.edit_text( text=STAFF_HELP_STRINGS, parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton(text="⟸ KEMBALI", callback_data="help_back") ]]), ) elif back_match: keyb = paginate_modules(0, HELPABLE, "help") # Add aditional button if staff user detected if (user.id in DEV_USERS or user.id in SUDO_USERS or user.id in SUPPORT_USERS): keyb += [[ InlineKeyboardButton(text="Staff", callback_data="help_staff") ]] query.message.edit_text( text=HELP_STRINGS, parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup(keyb), ) # ensure no spinny white circle context.bot.answer_callback_query(query.id) except Exception as excp: if excp.message == "Message is not modified": pass elif excp.message == "Query_id_invalid": pass elif excp.message == "Message can't be deleted": pass else: query.message.edit_text(excp.message) LOGGER.exception("Pengecualian di tombol bantuan. %s", str(query.data))
def send_help(chat_id, text, keyboard=None): if not keyboard: keyboard = InlineKeyboardMarkup(paginate_modules(0, HELPABLE, "help")) dispatcher.bot.send_message( chat_id=chat_id, text=text, parse_mode=ParseMode.MARKDOWN, reply_markup=keyboard, )
def start(update, context): if update.effective_chat.type == "private": args = context.args if len(args) >= 1: if args[0].lower() == "help": user = update.effective_user keyb = paginate_modules(0, HELPABLE, "help") if ( user.id in DEV_USERS or user.id in SUDO_USERS or user.id in SUPPORT_USERS ): keyb += [ [ InlineKeyboardButton( text="Staff", callback_data="help_staff" ) ] ] send_help( update.effective_chat.id, HELP_STRINGS, InlineKeyboardMarkup(keyb), ) elif args[0].lower().startswith("stngs_"): match = re.match("stngs_(.*)", args[0].lower()) chat = dispatcher.bot.getChat(match.group(1)) if is_user_admin(chat, update.effective_user.id): send_settings( match.group(1), update.effective_user.id, False ) else: send_settings( match.group(1), update.effective_user.id, True ) elif args[0][1:].isdigit() and "rules" in IMPORTED: IMPORTED["rules"].send_rules(update, args[0], from_pm=True) else: update.effective_message.reply_photo( "https://i.ibb.co/nBwSNvN/Logo-header-ferboten.jpg", PM_START_TEXT, reply_markup=InlineKeyboardMarkup(buttons), parse_mode=ParseMode.MARKDOWN, timeout=60, ) else: update.effective_message.reply_text( "Hello everyone, I'm still alive here:)" )
def get_help(update, context): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user args = update.effective_message.text.split(None, 1) # ONLY send help in PM if chat.type != chat.PRIVATE: update.effective_message.reply_text( "Hubungi saya di PM untuk mendapatkan daftar perintah.", reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( text="🔎 Bantuan", url="t.me/{}?start=help".format(context.bot.username), ) ]]), ) return elif len(args) >= 2 and any(args[1].lower() == x for x in HELPABLE): module = args[1].lower() text = ( "Berikut adalah bantuan yang tersedia untuk modul *{}* :\n".format( HELPABLE[module].__mod_name__) + HELPABLE[module].__help__) send_help( chat.id, text, InlineKeyboardMarkup([[ InlineKeyboardButton(text="Kembali", callback_data="help_back") ]]), ) else: keyb = paginate_modules(0, HELPABLE, "help") # Add aditional button if staff user detected if (user.id in DEV_USERS or user.id in SUDO_USERS or user.id in SUPPORT_USERS): keyb += [[ InlineKeyboardButton(text="Staff", callback_data="help_staff") ]] send_help(chat.id, HELP_STRINGS, InlineKeyboardMarkup(keyb))
def send_settings(chat_id, user_id, user=False): if user: if USER_SETTINGS: settings = "\n\n".join( "*{}*:\n{}".format( mod.__mod_name__, mod.__user_settings__(user_id) ) for mod in USER_SETTINGS.values() ) dispatcher.bot.send_message( user_id, "These are your current settings:" + "\n\n" + settings, parse_mode=ParseMode.MARKDOWN, ) else: dispatcher.bot.send_message( user_id, "Seems like there aren't any user specific settings available :'(", parse_mode=ParseMode.MARKDOWN, ) else: if CHAT_SETTINGS: chat_name = dispatcher.bot.getChat(chat_id).title dispatcher.bot.send_message( user_id, text="Which module would you like to check {}'s settings for?".format( chat_name ), reply_markup=InlineKeyboardMarkup( paginate_modules(0, CHAT_SETTINGS, "stngs", chat=chat_id) ), ) else: dispatcher.bot.send_message( user_id, "Seems like there aren't any chat settings available :'(\nSend this " "in a group chat you're admin in to find its current settings!", parse_mode=ParseMode.MARKDOWN, )
def get_help(update, context): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user args = update.effective_message.text.split(None, 1) # ONLY send help in PM if chat.type != chat.PRIVATE: update.effective_message.reply_text( "Contact me in PM to get the list of possible commands.", reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( text="Help", url="t.me/{}?start=help".format(context.bot.username), ) ]]), ) return elif len(args) >= 2 and any(args[1].lower() == x for x in HELPABLE): module = args[1].lower() text = ("Here is the available help for the *{}* module:\n".format( HELPABLE[module].__mod_name__) + HELPABLE[module].__help__) send_help( chat.id, text, InlineKeyboardMarkup([[ InlineKeyboardButton(text="Back", callback_data="help_back") ]]), ) else: keyb = paginate_modules(0, HELPABLE, "help") # Add aditional button if staff user detected if (user.id in DEV_USERS or user.id in SUDO_USERS or user.id in SUPPORT_USERS): keyb += [[ InlineKeyboardButton(text="Staff", callback_data="help_staff") ]] send_help(chat.id, HELP_STRINGS, InlineKeyboardMarkup(keyb))
def send_settings(chat_id, user_id, user=False): if user: if USER_SETTINGS: settings = "\n\n".join("*{}*:\n{}".format( mod.__mod_name__, mod.__user_settings__(user_id)) for mod in USER_SETTINGS.values()) dispatcher.bot.send_message( user_id, "Ini adalah pengaturan Anda saat ini:" + "\n\n" + settings, parse_mode=ParseMode.MARKDOWN, ) else: dispatcher.bot.send_message( user_id, "Sepertinya tidak ada pengaturan khusus pengguna yang tersedia:'(", parse_mode=ParseMode.MARKDOWN, ) else: if CHAT_SETTINGS: chat_name = dispatcher.bot.getChat(chat_id).title dispatcher.bot.send_message( user_id, text="Modul mana yang ingin Anda periksa {} pengaturan untuk?". format(chat_name), reply_markup=InlineKeyboardMarkup( paginate_modules(0, CHAT_SETTINGS, "stngs", chat=chat_id)), ) else: dispatcher.bot.send_message( user_id, "Sepertinya tidak ada pengaturan obrolan yang tersedia :'(\nKirim ini " "ke dalam obrolan grup tempat Anda menjadi admin untuk menemukan pengaturan saat ini!", parse_mode=ParseMode.MARKDOWN, )
def settings_button(update, context): query = update.callback_query user = update.effective_user mod_match = re.match(r"stngs_module\((.+?),(.+?)\)", query.data) prev_match = re.match(r"stngs_prev\((.+?),(.+?)\)", query.data) next_match = re.match(r"stngs_next\((.+?),(.+?)\)", query.data) back_match = re.match(r"stngs_back\((.+?)\)", query.data) try: if mod_match: chat_id = mod_match.group(1) module = mod_match.group(2) chat = context.bot.get_chat(chat_id) text = "*{}* has the following settings for the *{}* module:\n\n".format( escape_markdown(chat.title), CHAT_SETTINGS[module].__mod_name__ ) + CHAT_SETTINGS[ module ].__chat_settings__( chat_id, user.id ) query.message.reply_text( text=text, parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( [ [ InlineKeyboardButton( text="Back", callback_data="stngs_back({})".format(chat_id), ) ] ] ), ) elif prev_match: chat_id = prev_match.group(1) curr_page = int(prev_match.group(2)) chat = context.bot.get_chat(chat_id) query.message.reply_text( "Hi there! There are quite a few settings for {} - go ahead and pick what " "you're interested in.".format(chat.title), reply_markup=InlineKeyboardMarkup( paginate_modules( curr_page - 1, CHAT_SETTINGS, "stngs", chat=chat_id ) ), ) elif next_match: chat_id = next_match.group(1) next_page = int(next_match.group(2)) chat = context.bot.get_chat(chat_id) query.message.reply_text( "Hi there! There are quite a few settings for {} - go ahead and pick what " "you're interested in.".format(chat.title), reply_markup=InlineKeyboardMarkup( paginate_modules( next_page + 1, CHAT_SETTINGS, "stngs", chat=chat_id ) ), ) elif back_match: chat_id = back_match.group(1) chat = context.bot.get_chat(chat_id) query.message.reply_text( text="Hi there! There are quite a few settings for {} - go ahead and pick what " "you're interested in.".format(escape_markdown(chat.title)), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( paginate_modules(0, CHAT_SETTINGS, "stngs", chat=chat_id) ), ) # ensure no spinny white circle query.message.delete() context.bot.answer_callback_query(query.id) except Exception as excp: if excp.message == "Message is not modified": pass elif excp.message == "Query_id_invalid": pass elif excp.message == "Message can't be deleted": pass else: query.message.edit_text(excp.message) LOGGER.exception( "Exception in settings buttons. %s", str(query.data) )
def settings_button(update, context): query = update.callback_query user = update.effective_user mod_match = re.match(r"stngs_module\((.+?),(.+?)\)", query.data) prev_match = re.match(r"stngs_prev\((.+?),(.+?)\)", query.data) next_match = re.match(r"stngs_next\((.+?),(.+?)\)", query.data) back_match = re.match(r"stngs_back\((.+?)\)", query.data) try: if mod_match: chat_id = mod_match.group(1) module = mod_match.group(2) chat = context.bot.get_chat(chat_id) text = "*{}* memiliki pengaturan berikut untuk *{}* modul:\n\n".format( escape_markdown(chat.title), CHAT_SETTINGS[module].__mod_name__ ) + CHAT_SETTINGS[module].__chat_settings__(chat_id, user.id) query.message.reply_text( text=text, parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup([[ InlineKeyboardButton( text="Kembali", callback_data="stngs_back({})".format(chat_id), ) ]]), ) elif prev_match: chat_id = prev_match.group(1) curr_page = int(prev_match.group(2)) chat = context.bot.get_chat(chat_id) query.message.reply_text( "Halo! kamu Ada beberapa setelan untuk {} - lanjutkan dan pilih apa " "yang Anda inginkan.".format(chat.title), reply_markup=InlineKeyboardMarkup( paginate_modules(curr_page - 1, CHAT_SETTINGS, "stngs", chat=chat_id)), ) elif next_match: chat_id = next_match.group(1) next_page = int(next_match.group(2)) chat = context.bot.get_chat(chat_id) query.message.reply_text( "Halo! kamu Ada beberapa setelan untuk {} - lanjutkan dan pilih apa " "yang Anda inginkan.".format(chat.title), reply_markup=InlineKeyboardMarkup( paginate_modules(next_page + 1, CHAT_SETTINGS, "stngs", chat=chat_id)), ) elif back_match: chat_id = back_match.group(1) chat = context.bot.get_chat(chat_id) query.message.reply_text( text= "Halo! kamu Ada beberapa setelan untuk {} - lanjutkan dan pilih apa " "yang Anda inginkan.".format(escape_markdown(chat.title)), parse_mode=ParseMode.MARKDOWN, reply_markup=InlineKeyboardMarkup( paginate_modules(0, CHAT_SETTINGS, "stngs", chat=chat_id)), ) # ensure no spinny white circle query.message.delete() context.bot.answer_callback_query(query.id) except Exception as excp: if excp.message == "Message is not modified": pass elif excp.message == "Query_id_invalid": pass elif excp.message == "Message can't be deleted": pass else: query.message.edit_text(excp.message) LOGGER.exception("Pengecualian di tombol pengaturan. %s", str(query.data))