def list_warn_filters(update, context): chat = update.effective_chat user = update.effective_user conn = connected(context.bot, update, chat, user.id, need_admin=True) if conn: chat_id = conn else: if chat.type == "private": return else: chat_id = update.effective_chat.id all_handlers = sql.get_chat_warn_triggers(chat_id) if not all_handlers: update.effective_message.reply_text( "Tidak ada filter peringatan yang aktif di sini!") return filter_list = CURRENT_WARNING_FILTER_STRING for keyword in all_handlers: entry = " - {}\n".format(html.escape(keyword)) if len(entry) + len(filter_list) > telegram.MAX_MESSAGE_LENGTH: update.effective_message.reply_text(filter_list, parse_mode=ParseMode.HTML) filter_list = entry else: filter_list += entry if not filter_list == CURRENT_WARNING_FILTER_STRING: update.effective_message.reply_text(filter_list, parse_mode=ParseMode.HTML)
def reply_filter(update, context) -> str: chat = update.effective_chat message = update.effective_message chat_warn_filters = sql.get_chat_warn_triggers(chat.id) to_match = extract_text(message) if not to_match: return "" for keyword in chat_warn_filters: pattern = r"( |^|[^\w])" + re.escape(keyword) + r"( |$|[^\w])" if re.search(pattern, to_match, flags=re.IGNORECASE): user = update.effective_user warn_filter = sql.get_warn_filter(chat.id, keyword) return warn(user, chat, warn_filter.reply, message) return ""
def remove_warn_filter(update, context): chat = update.effective_chat user = update.effective_user msg = update.effective_message conn = connected(context.bot, update, chat, user.id, need_admin=True) if conn: chat_id = conn else: if chat.type == "private": return else: chat_id = update.effective_chat.id args = msg.text.split( None, 1) # use python's maxsplit to separate Cmd, keyword, and reply_text if len(args) < 2: return extracted = split_quotes(args[1]) if len(extracted) < 1: return to_remove = extracted[0] chat_filters = sql.get_chat_warn_triggers(chat_id) if not chat_filters: msg.reply_text("Tidak ada filter peringatan yang aktif di sini!") return for filt in chat_filters: if filt == to_remove: sql.remove_warn_filter(chat_id, to_remove) msg.reply_text( "YYa, saya akan berhenti memperingatkan orang untuk ituep, I'll stop warning people for that." ) raise DispatcherHandlerStop msg.reply_text( "Itu bukan filter peringatan saat ini - klik: /warnlist untuk semua filter peringatan aktif." )
def remove_warn_filter(update, context): chat = update.effective_chat user = update.effective_user msg = update.effective_message conn = connected(context.bot, update, chat, user.id, need_admin=True) if conn: chat_id = conn else: if chat.type == "private": return else: chat_id = update.effective_chat.id args = msg.text.split( None, 1) # use python's maxsplit to separate Cmd, keyword, and reply_text if len(args) < 2: return extracted = split_quotes(args[1]) if len(extracted) < 1: return to_remove = extracted[0] chat_filters = sql.get_chat_warn_triggers(chat_id) if not chat_filters: msg.reply_text("No warning filters are active here!") return for filt in chat_filters: if filt == to_remove: sql.remove_warn_filter(chat_id, to_remove) msg.reply_text("Yep, I'll stop warning people for that.") raise DispatcherHandlerStop msg.reply_text( "That's not a current warning filter - click: /warnlist for all active warning filters." )