def stop_filter(update, context): chat = update.effective_chat user = update.effective_user args = update.effective_message.text.split(None, 1) conn = connected(context.bot, update, chat, user.id) if not conn is False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = update.effective_chat.id if chat.type == "private": chat_name = "Local filters" else: chat_name = chat.title if len(args) < 2: send_message(update.effective_message, "What should i stop?") return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: send_message(update.effective_message, "No filters active here!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) send_message( update.effective_message, "Okay, I'll stop replying to that filter in *{}*.".format( chat_name), parse_mode=telegram.ParseMode.MARKDOWN, ) raise DispatcherHandlerStop send_message( update.effective_message, "That's not a filter - Click: /filters to get currently active filters.", )
def list_handlers(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] all_handlers = sql.get_chat_triggers(chat.id) if not all_handlers: update.effective_message.reply_text("No filters are active here!") return filter_list = BASIC_FILTER_STRING for keyword in all_handlers: entry = " - {}\n".format(escape_markdown(keyword)) if len(entry) + len(filter_list) > telegram.MAX_MESSAGE_LENGTH: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN) filter_list = entry else: filter_list += entry if not filter_list == BASIC_FILTER_STRING: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN)
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat msg = update.effective_message args = msg.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: msg.reply_text("Tidak ada filter yang aktif di sini!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) msg.reply_text("Ya, saya akan berhenti menjawab itu.") raise DispatcherHandlerStop msg.reply_text("Itu bukan filter saat ini - jalankan /filters untuk semua filter aktif.")
def stop_filter(update: Update, context): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text("필터가 활성화되어 있지 않아요!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text("네, 이 필터를 삭제할게요!") raise DispatcherHandlerStop update.effective_message.reply_text( "필터를 찾을 수 없어요 - 활성화되어 있는 모든 필터를 보려면 /filters 를 입력해주세요.")
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat msg = update.effective_message args = msg.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: msg.reply_text("No filters are active here!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) msg.reply_text("Yep, I'll stop replying to that.") raise DispatcherHandlerStop msg.reply_text("That's not a current filter - run /filters for all active filters.")
def list_handlers(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] conn = connected(bot, update, chat, user.id, need_admin=False) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title filter_list = f"*Filters in {chat_name}:*\n" else: chat_id = update.effective_chat.id if chat.type == "private": chat_name = "local filters" filter_list = "*local filters:*\n" else: chat_name = chat.title filter_list = "*Filters in {}*:\n".format(chat_name) total_count_f_fliters = sql.num_filters_per_chat(chat_id) filter_list += f"**Filter Count**: {total_count_f_fliters}\n" all_handlers = sql.get_chat_triggers(chat_id) if not all_handlers: update.effective_message.reply_text( "No filters in {}!".format(chat_name)) return for keyword in all_handlers: entry = " - {}\n".format(escape_markdown(keyword)) if len(entry) + len(filter_list) > telegram.MAX_MESSAGE_LENGTH: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN) filter_list = entry else: filter_list += entry if not filter_list == BASIC_FILTER_STRING: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN)
def rmall_callback(bot: Bot, update: Update): query = update.callback_query chat = update.effective_chat msg = update.effective_message member = chat.get_member(query.from_user.id) if query.data == 'filters_rmall': if member.status == "creator" or query.from_user.id in SUDO_USERS: allfilters = sql.get_chat_triggers(chat.id) if not allfilters: msg.edit_text("No filters in this chat, nothing to stop!") return count = 0 filterlist = [] for x in allfilters: count += 1 filterlist.append(x) for i in filterlist: sql.remove_filter(chat.id, i) msg.edit_text(f"Cleaned {count} filters in {chat.title}") if member.status == "administrator": query.answer( "Only owner of the chat can do this.") if member.status == "member": query.answer( "You need to be admin to do this.") elif query.data == 'filters_cancel': if member.status == "creator" or query.from_user.id in SUDO_USERS: msg.edit_text("Clearing of all filters has been cancelled.") return if member.status == "administrator": query.answer( "Only owner of the chat can do this.") if member.status == "member": query.answer( "You need to be admin to do this.")
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text("Aktif filtre yok!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text( "Evet, buna yanıt vermeyi bırakacağım.") raise DispatcherHandlerStop update.effective_message.reply_text( "Bu güncel bir filtre değil - Tüm aktif filtreler için /filters ")
def stop_filter(update, context): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text("No filters are active here!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text( "Yep, I'll stop replying to that.") raise DispatcherHandlerStop update.effective_message.reply_text( "That's not a current filter - run /filters for all active filters.")
def export_data(chat: Chat, bot: Bot) -> str: export = { "bot": { "id": bot.id, "name": bot.first_name, "username": bot.username }, "chat": { "id": chat.id, "title": chat.title, "members": chat.get_members_count() }, "welcomes": { "welcome": welcome_sql.get_custom_welcome(chat.id), "goodbye": welcome_sql.get_custom_gdbye(chat.id) }, "antiflood": { "limit": antiflood_sql.get_flood_limit(chat.id) }, "gbans": { "enabled": global_bans_sql.does_chat_gban(chat.id) }, "languages": { "lang": lang_sql.get_lang(chat.id) }, "rules": { "text": rules_sql.get_rules(chat.id) }, "filters": { "null": "null" } } for i in filters.get_chat_triggers(chat.id): export["filters"][i] = filters.get_filter(chat.id, i).reply del export["filters"]["null"] return toml.dumps(export)
def list_handlers(bot: Bot, update: Update): chat = update.effective_chat all_handlers = sql.get_chat_triggers(chat.id) update_chat_title = chat.title message_chat_title = update.effective_message.chat.title if update_chat_title == message_chat_title: BASIC_FILTER_STRING = "<b>Filters in this chat:</b>\n" else: BASIC_FILTER_STRING = f"<b>Filters in {update_chat_title}</b>:\n" if not all_handlers: if update_chat_title == message_chat_title: update.effective_message.reply_text("No filters are active here!") else: update.effective_message.reply_text( f"No filters are active in <b>{update_chat_title}</b>!", parse_mode=telegram.ParseMode.HTML, ) return filter_list = "" for keyword in all_handlers: entry = f" - {escape_markdown(keyword)}\n" if (len(entry) + len(filter_list) + len(BASIC_FILTER_STRING) > telegram.MAX_MESSAGE_LENGTH): filter_list = BASIC_FILTER_STRING + html.escape(filter_list) update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.HTML) filter_list = entry else: filter_list += entry if not filter_list == BASIC_FILTER_STRING: filter_list = BASIC_FILTER_STRING + html.escape(filter_list) update.effective_message.reply_text(filter_list, parse_mode=telegram.ParseMode.HTML)
def list_handlers(update: Update, context: CallbackContext): bot = context.bot chat = update.effective_chat # type: Optional[Chat] all_handlers = sql.get_chat_triggers(chat.id) chat_name = chat.title or chat.first or chat.username if not all_handlers: update.effective_message.reply_text("No filters are active here!") return filter_list = BASIC_FILTER_STRING for keyword in all_handlers: entry = " • `{}`\n".format((keyword)) if len(entry) + len(filter_list) > telegram.MAX_MESSAGE_LENGTH: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN) filter_list = entry else: filter_list += entry if not filter_list == BASIC_FILTER_STRING: update.effective_message.reply_text( filter_list.format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN)
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text( "هیچ وەڵامدانەوەیەکی چالاک لێرە نییە!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text( "باشە، لە وەڵامدانەوەی ئەوە دەوەستم.") raise DispatcherHandlerStop update.effective_message.reply_text( "That's not a current filter - run /filters for all active filters.")
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text("Nessun filtro attivo!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text( "Sì, smetterò di rispondere a questo.") raise DispatcherHandlerStop update.effective_message.reply_text( "Questo attualmente non è un filtro - esegui /filters per tutti i filtri attivi." )
def list_handlers(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] conn = connected(bot, update, chat, user.id, need_admin=False) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title filter_list = "*{} qrupundakı Filtrlər:*\n" else: chat_id = update.effective_chat.id if chat.type == "private": chat_name = "yerli filtrlər" filter_list = "*yerli filrlər:*\n" else: chat_name = chat.title filter_list = "*{} qrupundakı Filtrlər*:\n" all_handlers = sql.get_chat_triggers(chat_id) if not all_handlers: update.effective_message.reply_text( "{} qrupundan Filtr yoxdur!".format(chat_name)) return for keyword in all_handlers: entry = " - {}\n".format(escape_markdown(keyword)) if len(entry) + len(filter_list) > telegram.MAX_MESSAGE_LENGTH: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN) filter_list = entry else: filter_list += entry if not filter_list == BASIC_FILTER_STRING: update.effective_message.reply_text( filter_list, parse_mode=telegram.ParseMode.MARKDOWN)
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text( "No filters are active in *{}*!".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "Yep, I'll stop replying to that in *{}*.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "That's not a current filter - run /filters for all active filters.")
def list_handlers(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] conn = connected(bot, update, chat, user.id, need_admin=False) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title filter_list = tld(chat.id, "*List of filters in {}:*\n") else: chat_id = update.effective_chat.id if chat.type == "private": chat_name = tld(chat.id, "local filters") filter_list = tld(chat.id, "*local filters:*\n") else: chat_name = chat.title filter_list = tld(chat.id, "*Filters in {}*:\n") all_handlers = sql.get_chat_triggers(chat_id) if not all_handlers: update.effective_message.reply_text( tld(chat.id, "No filters in {}!").format(chat_name)) return for keyword in all_handlers: entry = " • `{}`\n".format(escape_markdown(keyword)) if len(entry) + len(filter_list) > telegram.MAX_MESSAGE_LENGTH: update.effective_message.reply_text( filter_list.format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) filter_list = entry else: filter_list += entry update.effective_message.reply_text(filter_list.format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN)
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text( "මෙහි පෙරහන් කිසිවක් සක්රීය නොවේ!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "ඔව්, මම එයට පිළිතුරු දීම නවත්වමි *{}*.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "එය වත්මන් පෙරණයක් නොවේ - run /filters සියලුම ක්රියාකාරී පෙරහන් සඳහා." )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "yerli qeydlər" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text("Burada aktiv filtrlər yoxdur!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "Yep, *{}* qrupunda bu mesaja cavab vermiyəcəm .".format( chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "Bu hazırki filtr deyil - /filters yazaraq bütün filtrlərə baxa bilərsiniz." )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text( "ഇവിടെ ഒരു ഫിൽറ്ററും ആക്റ്റീവ് അല്ല!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "ആഹ്.. ഞാൻ ഇനി ആ വാക്കു ആരു പറഞ്ഞാലും മിണ്ടാതിരുന്നോളാം😌 *{}*." .format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "അത് ഇപ്പോൾ ഒരു filter അല്ല - run /filters for all active filters.")
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text( "कोई भी फ़िल्टर यहां एक्टिव नहीं है!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "हां, मैं *{}* में जवाब देना बंद कर दूंगा.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "यह वर्तमान फिल्टर नहीं है - सभी सक्रिय फिल्टर के लिए /filter पर क्लिक करें " )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text( "Burada heç bir filtr aktiv deyil!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( " *{}* filtr silindi.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "Bu cari bir filtr deyil - bütün aktiv filtrləri görmək üçün /filters yazın." )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text( "tidak ada filter yang aktif disini") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "Yep, I'll stop replying to that in *{}*.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "tidak ada filter saat ini - ketik /filters untuk melihat semua daftar filter." )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text("No filters are active here!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text( "Removed '`{}`', I will no longer reply to that!".format( keyword), parse_mode=ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "That's not a current filter - run /filters for all active filters.")
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text("Nie ma tutaj aktywnych filtrów!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "Yup, Przestanę odpowiadać na to w *{}*.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "To nie jest aktualnie filter - wpisz /filters żeby zobaczyć wszystkie filtry." )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] args = update.effective_message.text.split(None, 1) if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat.id) if not chat_filters: update.effective_message.reply_text( "اومم فیلتر خواصی برام فعال نیس اینجا!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat.id, args[1]) update.effective_message.reply_text( "باوش! من دیگه جوابی به این پیام نمیدم") raise DispatcherHandlerStop update.effective_message.reply_text( "اومم این فیلتری نیست که برام توضیحش داده باشن از دستور /filters ببین چیا دارم😶" )
def stop_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] args = update.effective_message.text.split(None, 1) conn = connected(bot, update, chat, user.id) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: chat_id = chat.id if chat.type == "private": chat_name = "local notes" else: chat_name = chat.title if len(args) < 2: return chat_filters = sql.get_chat_triggers(chat_id) if not chat_filters: update.effective_message.reply_text("aktif filtre yok!") return for keyword in chat_filters: if keyword == args[1]: sql.remove_filter(chat_id, args[1]) update.effective_message.reply_text( "Evet, buna cevap vermeyi bırakacağım *{}*.".format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN) raise DispatcherHandlerStop update.effective_message.reply_text( "Bu geçerli bir filtre değil - tüm etkin filtreler için çalıştırma / filtreler." )
def reply_filter(update, context): chat = update.effective_chat # type: Optional[Chat] message = update.effective_message # type: Optional[Message] if not update.effective_user or update.effective_user.id == 777000: return to_match = extract_text(message) if not to_match: return chat_filters = sql.get_chat_triggers(chat.id) for keyword in chat_filters: pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): filt = sql.get_filter(chat.id, keyword) if filt.reply == "there is should be a new reply": buttons = sql.get_buttons(chat.id, filt.keyword) keyb = build_keyboard_parser(context.bot, chat.id, buttons) keyboard = InlineKeyboardMarkup(keyb) VALID_WELCOME_FORMATTERS = [ "first", "last", "fullname", "username", "id", "chatname", "mention", ] if filt.reply_text: valid_format = escape_invalid_curly_brackets( filt.reply_text, VALID_WELCOME_FORMATTERS) if valid_format: filtext = valid_format.format( first=escape(message.from_user.first_name), last=escape(message.from_user.last_name or message.from_user.first_name), fullname=" ".join( [ escape(message.from_user.first_name), escape(message.from_user.last_name), ] if message.from_user.last_name else [escape(message.from_user.first_name)]), username="******" + escape(message.from_user.username) if message.from_user.username else mention_html( message.from_user.id, message.from_user.first_name), mention=mention_html(message.from_user.id, message.from_user.first_name), chatname=escape(message.chat.title) if message.chat.type != "private" else escape( message.from_user.first_name), id=message.from_user.id, ) else: filtext = "" else: filtext = "" if filt.file_type in (sql.Types.BUTTON_TEXT, sql.Types.TEXT): try: context.bot.send_message( chat.id, markdown_to_html(filtext), reply_to_message_id=message.message_id, parse_mode=ParseMode.HTML, disable_web_page_preview=True, reply_markup=keyboard, ) except BadRequest as excp: error_catch = get_exception(excp, filt, chat) if error_catch == "noreply": try: context.bot.send_message( chat.id, markdown_to_html(filtext), parse_mode=ParseMode.HTML, disable_web_page_preview=True, reply_markup=keyboard, ) except BadRequest as excp: log.exception("Error in filters: " + excp.message) send_message( update.effective_message, get_exception(excp, filt, chat), ) else: try: send_message( update.effective_message, get_exception(excp, filt, chat), ) except BadRequest as excp: log.exception("Failed to send message: " + excp.message) pass else: if ENUM_FUNC_MAP[ filt.file_type] == dispatcher.bot.send_sticker: ENUM_FUNC_MAP[filt.file_type]( chat.id, filt.file_id, reply_to_message_id=message.message_id, reply_markup=keyboard, ) else: ENUM_FUNC_MAP[filt.file_type]( chat.id, filt.file_id, caption=markdown_to_html(filtext), reply_to_message_id=message.message_id, parse_mode=ParseMode.HTML, reply_markup=keyboard, ) break else: if filt.is_sticker: message.reply_sticker(filt.reply) elif filt.is_document: message.reply_document(filt.reply) elif filt.is_image: message.reply_photo(filt.reply) elif filt.is_audio: message.reply_audio(filt.reply) elif filt.is_voice: message.reply_voice(filt.reply) elif filt.is_video: message.reply_video(filt.reply) elif filt.has_markdown: buttons = sql.get_buttons(chat.id, filt.keyword) keyb = build_keyboard_parser(context.bot, chat.id, buttons) keyboard = InlineKeyboardMarkup(keyb) try: send_message( update.effective_message, filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=keyboard, ) except BadRequest as excp: if excp.message == "Unsupported url protocol": try: send_message( update.effective_message, "You seem to be trying to use an unsupported url protocol. " "Telegram doesn't support buttons for some protocols, such as tg://. Please try " "again...", ) except BadRequest as excp: log.exception("Error in filters: " + excp.message) pass elif excp.message == "Reply message not found": try: context.bot.send_message( chat.id, filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=keyboard, ) except BadRequest as excp: log.exception("Error in filters: " + excp.message) pass else: try: send_message( update.effective_message, "This message couldn't be sent as it's incorrectly formatted.", ) except BadRequest as excp: log.exception("Error in filters: " + excp.message) pass log.warning("Message %s could not be parsed", str(filt.reply)) log.exception( "Could not parse filter %s in chat %s", str(filt.keyword), str(chat.id), ) else: # LEGACY - all new filters will have has_markdown set to True. try: send_message(update.effective_message, filt.reply) except BadRequest as excp: log.exception("Error in filters: " + excp.message) pass break
def __chat_settings__(chat_id, user_id): cust_filters = sql.get_chat_triggers(chat_id) return "There are `{}` custom filters here.".format(len(cust_filters))
def reply_filter(bot: Bot, update: Update): chat = update.effective_chat # type: Optional[Chat] message = update.effective_message # type: Optional[Message] to_match = extract_text(message) if not to_match: return # my custom thing if message.reply_to_message: message = message.reply_to_message # my custom thing chat_filters = sql.get_chat_triggers(chat.id) for keyword in chat_filters: pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): filt = sql.get_filter(chat.id, keyword) if filt.is_sticker: message.reply_sticker(filt.reply) elif filt.is_document: message.reply_document(filt.reply) elif filt.is_image: message.reply_photo(filt.reply) elif filt.is_audio: message.reply_audio(filt.reply) elif filt.is_voice: message.reply_voice(filt.reply) elif filt.is_video: message.reply_video(filt.reply) elif filt.has_markdown: buttons = sql.get_buttons(chat.id, filt.keyword) keyb = build_keyboard(buttons) keyboard = InlineKeyboardMarkup(keyb) should_preview_disabled = True if "telegra.ph" in filt.reply: should_preview_disabled = False try: message.reply_text( filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=should_preview_disabled, reply_markup=keyboard) except BadRequest as excp: if excp.message == "Unsupported url protocol": message.reply_text( "You seem to be trying to use an unsupported url protocol. Telegram " "doesn't support buttons for some protocols, such as tg://. Please try " "again, or ask in @MarieSupport for help.") elif excp.message == "Reply message not found": bot.send_message(chat.id, filt.reply, parse_mode=ParseMode.MARKDOWN, disable_web_page_preview=True, reply_markup=keyboard) else: message.reply_text( "This note could not be sent, as it is incorrectly formatted. Ask in " "@MarieSupport if you can't figure out why!") LOGGER.warning("Message %s could not be parsed", str(filt.reply)) LOGGER.exception( "Could not parse filter %s in chat %s", str(filt.keyword), str(chat.id)) else: # LEGACY - all new filters will have has_markdown set to True. message.reply_text(filt.reply) break