def connected(bot, update, chat, user_id, need_admin=True): user = update.effective_user if chat.type == chat.PRIVATE and sql.get_connected_chat(user_id): conn_id = sql.get_connected_chat(user_id).chat_id getstatusadmin = bot.get_chat_member( conn_id, update.effective_message.from_user.id) isadmin = getstatusadmin.status in ("administrator", "creator") ismember = getstatusadmin.status in ("member") isallow = sql.allow_connect_to_chat(conn_id) if ((isadmin) or (isallow and ismember) or (user.id in SUDO_USERS) or (user.id in DEV_USERS)): if need_admin: if (getstatusadmin.status in ("administrator", "creator") or user_id in SUDO_USERS or user.id in DEV_USERS): return conn_id else: send_message( update.effective_message, "You must be an admin in the connected group!", ) else: return conn_id else: send_message( update.effective_message, "The group changed the connection rights or you are no longer an admin.\nI've disconnected you.", ) disconnect_chat(update, bot) else: return False
def help_connect_chat(update, context): if update.effective_message.chat.type != "private": send_message(update.effective_message, "PM me with that command to get help.") return else: send_message(update.effective_message, CONN_HELP, parse_mode="markdown")
def disconnect_chat(update, context): if update.effective_chat.type == "private": disconnection_status = sql.disconnect( update.effective_message.from_user.id) if disconnection_status: sql.disconnected_chat = send_message(update.effective_message, "Disconnected from chat!") else: send_message(update.effective_message, "You're not connected!") else: send_message(update.effective_message, "This command is only available in PM.")
def commands(update, context): chat = update.effective_chat user = update.effective_user conn = connected(context.bot, update, chat, user.id, need_admin=True) if conn: chat = dispatcher.bot.getChat(conn) else: if update.effective_message.chat.type == "private": send_message( update.effective_message, "This command is meant to use in group not in PM", ) return "" chat = update.effective_chat text = build_curr_disabled(chat.id) send_message(update.effective_message, text, parse_mode=ParseMode.MARKDOWN)
def check_and_ban(update, user_id, should_message=True): try: spmban = spamwtc.get_ban(int(user_id)) cas_banned = check_cas(user_id) if spmban or cas_banned: update.effective_chat.kick_member(user_id) if should_message: if spmban and cas_banned: banner = "@Spamwatch and Combot Anti Spam" reason = f"\n<code>{spmban.reason}</code>\n\nand <a href='{cas_banned}'>CAS Banned</a>" elif cas_banned: banner = "Combot Anti Spam" reason = f"<a href='{cas_banned}''>CAS Banned</a>" elif spmban: banner = "@Spamwatch" reason = f"<code>{spmban.reason}</code>" send_message( update.effective_message, "#SPAM_SHIELD\n\nThis person has been detected as spambot" f"by {banner} and has been removed!\nReason: {reason}", parse_mode=ParseMode.HTML, ) return except Exception: pass if gban_db.is_user_gbanned(user_id): update.effective_chat.kick_member(user_id) if should_message: usr = gban_db.get_gbanned_user(user_id) greason = usr["reason"] if not greason: greason = "No reason given" send_message( update.effective_message, f"*Alert! this user was GBanned and have been removed!*\n*Reason*: {greason}", parse_mode=ParseMode.MARKDOWN, ) return
def flood(update, context): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user # type: Optional[User] msg = update.effective_message conn = connected(context.bot, update, chat, user.id, need_admin=False) if conn: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title else: if update.effective_message.chat.type == "private": send_message( update.effective_message, "This command is meant to use in group not in PM", ) return chat_id = update.effective_chat.id chat_name = update.effective_message.chat.title limit = sql.get_flood_limit(chat_id) if limit == 0: if conn: text = ( "I'm not enforcing any flood control in {}!".format(chat_name)) else: text = ("I'm not enforcing any flood control here!") else: if conn: text = ( "I'm currently restricting members after {} consecutive messages in {}." .format(limit, chat_name)) else: text = ( "I'm currently restricting members after {} consecutive messages." .format(limit)) send_message(msg, text, parse_mode="markdown")
def disable(update, context): chat = update.effective_chat # type: Optional[Chat] user = update.effective_user args = context.args conn = connected(context.bot, update, chat, user.id, need_admin=True) if conn: chat = dispatcher.bot.getChat(conn) chat_name = dispatcher.bot.getChat(conn).title else: if update.effective_message.chat.type == "private": send_message( update.effective_message, "This command meant to be used in group not in PM", ) return "" chat = update.effective_chat chat_name = update.effective_message.chat.title if len(args) >= 1: disable_cmd = args[0] if disable_cmd.startswith(CMD_STARTERS): disable_cmd = disable_cmd[1:] if disable_cmd in set(DISABLE_CMDS + DISABLE_OTHER): disable_db.disable_command(chat.id, disable_cmd) if conn: text = "Disabled the use of `{}` command in *{}*!".format( disable_cmd, chat_name) else: text = "Disabled the use of `{}` command!".format( disable_cmd) send_message( update.effective_message, text, parse_mode=ParseMode.MARKDOWN, ) else: send_message(update.effective_message, "This command can't be disabled") else: send_message(update.effective_message, "What should I disable?")
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 == 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(update, context): chat = update.effective_chat user = update.effective_user conn = connected(context.bot, update, chat, user.id, need_admin=False) if not conn == False: chat_id = conn chat_name = dispatcher.bot.getChat(conn).title filter_list = "*Filter in {}:*\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" all_handlers = sql.get_chat_triggers(chat_id) if not all_handlers: send_message( update.effective_message, "No filters saved 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: send_message( update.effective_message, filter_list.format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN, ) filter_list = entry else: filter_list += entry send_message( update.effective_message, filter_list.format(chat_name), parse_mode=telegram.ParseMode.MARKDOWN, )