async def gmute_at_entry(msg: Message): """ handle gmute """ chat_id = msg.chat.id for user in msg.new_chat_members: user_id = user.id first_name = user.first_name gmuted = await GMUTE_USER_BASE.find_one({'user_id': user_id}) if gmuted: await asyncio.gather( msg.client.restrict_chat_member(chat_id, user_id, ChatPermissions()), msg.reply( r"\\**#cpbot_Antispam**//" "\n\nGlobally Muted User Detected in this Chat.\n\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{gmuted['reason']}`\n\n" "**Quick Action:** Muted", del_in=10), CHANNEL.log( r"\\**#Antispam_Log**//" "\n\n**GMuted User $SPOTTED**\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** {gmuted['reason']}\n**Quick Action:** " f"Muted in {msg.chat.title}")) msg.continue_propagation()
async def rmwhitelist(message: Message): """ remove a user from whitelist """ user_id, _ = message.extract_user_and_text if not user_id: await message.err("user-id not found") return get_mem = await message.client.get_user_dict(user_id) firstname = get_mem['fname'] user_id = get_mem['id'] found = await WHITELIST.find_one({'user_id': user_id}) if not found: await message.err("User Not Found in My WhiteList") return await asyncio.gather( WHITELIST.delete_one({ 'firstname': firstname, 'user_id': user_id }), message.edit( r"\\**#Removed_Whitelisted_User**//" f"\n\n**First Name:** [{firstname}](tg://user?id={user_id})\n" f"**User ID:** `{user_id}`"), CHANNEL.log( r"\\**#Antispam_Log**//" f"\n**User:** [{firstname}](tg://user?id={user_id})\n" f"**User ID:** `{user_id}`\n" f"**Chat:** {message.chat.title}\n" f"**Chat ID:** `{message.chat.id}`\n\n$RMWHITELISTED #id{user_id}") ) LOG.info("WhiteListed %s", str(user_id))
async def quotecmd(message: Message): """quotecmd""" asyncio.get_event_loop().create_task(message.delete()) args = message.input_str replied = message.reply_to_message async with cpbot.conversation('QuotLyBot') as conv: try: if replied and not args: await conv.forward_message(replied) else: if not args: await message.err('input not found!') return await conv.send_message(args) except YouBlockedUser: await message.edit('first **unblock** @QuotLyBot') return quote = await conv.get_response(mark_read=True) if not quote.sticker: await message.err('something went wrong!') else: message_id = replied.message_id if replied else None await cpbot.send_sticker(chat_id=message.chat.id, sticker=quote.sticker.file_id, reply_to_message_id=message_id)
async def ungmute_user(msg: Message): """ unmute a user globally """ await msg.edit("`UnGMuting this User...`") user_id, _ = msg.extract_user_and_text if not user_id: await msg.err("user-id not found") return get_mem = await msg.client.get_user_dict(user_id) firstname = get_mem['fname'] user_id = get_mem['id'] found = await GMUTE_USER_BASE.find_one({'user_id': user_id}) if not found: await msg.err("User Not Found in My GMute List") return await asyncio.gather( GMUTE_USER_BASE.delete_one({ 'firstname': firstname, 'user_id': user_id }), msg.edit(r"\\**#UnGMuted_User**//" f"\n\n**First Name:** [{firstname}](tg://user?id={user_id})\n" f"**User ID:** `{user_id}`")) chats = [ msg.chat ] if msg.client.is_bot else await msg.client.get_common_chats(user_id) for chat in chats: try: await chat.unban_member(user_id) await CHANNEL.log( r"\\**#Antispam_Log**//" f"\n**User:** [{firstname}](tg://user?id={user_id})\n" f"**User ID:** `{user_id}`\n" f"**Chat:** {chat.title}\n" f"**Chat ID:** `{chat.id}`\n\n$UNGMUTED #id{user_id}") except (ChatAdminRequired, UserAdminInvalid): pass LOG.info("UnGMuted %s", str(user_id))
async def gban_at_entry(message: Message): """ handle gbans """ chat_id = message.chat.id for user in message.new_chat_members: user_id = user.id first_name = user.first_name if await WHITELIST.find_one({'user_id': user_id}): continue gbanned = await GBAN_USER_BASE.find_one({'user_id': user_id}) if gbanned: if 'chat_ids' in gbanned: chat_ids = gbanned['chat_ids'] chat_ids.append(chat_id) else: chat_ids = [chat_id] await asyncio.gather( message.client.kick_chat_member(chat_id, user_id), message.reply( r"\\**#cpbot_Antispam**//" "\n\nGlobally Banned User Detected in this Chat.\n\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{gbanned['reason']}`\n\n" "**Quick Action:** Banned", del_in=10), CHANNEL.log( r"\\**#Antispam_Log**//" "\n\n**GBanned User $SPOTTED**\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** {gbanned['reason']}\n**Quick Action:** " f"Banned in {message.chat.title}"), GBAN_USER_BASE.update_one( { 'user_id': user_id, 'firstname': first_name }, {"$set": { 'chat_ids': chat_ids }}, upsert=True)) elif Config.ANTISPAM_SENTRY: res = await getData(f'https://api.cas.chat/check?user_id={user_id}' ) if res['ok']: reason = ' | '.join( res['result']['messages']) if 'result' in res else None await asyncio.gather( message.client.kick_chat_member(chat_id, user_id), message.reply( r"\\**#cpbot_Antispam**//" "\n\nGlobally Banned User Detected in this Chat.\n\n" "**$SENTRY CAS Federation Ban**\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{reason}`\n\n" "**Quick Action:** Banned", del_in=10), CHANNEL.log( r"\\**#Antispam_Log**//" "\n\n**GBanned User $SPOTTED**\n" "**$SENRTY #CAS BAN**" f"\n**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{reason}`\n**Quick Action:**" f" Banned in {message.chat.title}\n\n$AUTOBAN #id{user_id}" )) continue iv = await getData( "https://api.intellivoid.net/spamprotection/v1/lookup?query=" + str(user_id)) if iv['success'] and iv['results']['attributes'][ 'is_blacklisted'] is True: reason = iv['results']['attributes']['blacklist_reason'] await asyncio.gather( message.client.kick_chat_member(chat_id, user_id), message.reply( r"\\**#cpbot_Antispam**//" "\n\nGlobally Banned User Detected in this Chat.\n\n" "**$Intellivoid SpamProtection**\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{reason}`\n\n" "**Quick Action:** Banned", del_in=10), CHANNEL.log( r"\\**#Antispam_Log**//" "\n\n**GBanned User $SPOTTED**\n" "**$Intellivoid SpamProtection**" f"\n**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{reason}`\n**Quick Action:**" f" Banned in {message.chat.title}\n\n$AUTOBAN #id{user_id}" )) elif Config.SPAM_WATCH_API: intruder = await _get_spamwatch_data(user_id) if intruder: await asyncio.gather( message.client.kick_chat_member(chat_id, user_id), message.reply( r"\\**#cpbot_Antispam**//" "\n\nGlobally Banned User Detected in this Chat.\n\n" "**$SENTRY SpamWatch Federation Ban**\n" f"**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{intruder.reason}`\n\n" "**Quick Action:** Banned", del_in=10), CHANNEL.log( r"\\**#Antispam_Log**//" "\n\n**GBanned User $SPOTTED**\n" "**$SENRTY #SPAMWATCH_API BAN**" f"\n**User:** [{first_name}](tg://user?id={user_id})\n" f"**ID:** `{user_id}`\n**Reason:** `{intruder.reason}`\n" f"**Quick Action:** Banned in {message.chat.title}\n\n" f"$AUTOBAN #id{user_id}")) message.continue_propagation()
async def gmute_user(msg: Message): """ Mute a user globally """ await msg.edit("`Globally Muting this User...`") user_id, reason = msg.extract_user_and_text if not user_id: await msg.edit("`no valid user_id or message specified,`" "`don't do .help gmute for more info. " "Coz no one's gonna help ya`(。ŏ_ŏ) ⚠") return get_mem = await msg.client.get_user_dict(user_id) firstname = get_mem['fname'] if not reason: await msg.edit( f"**#Aborted**\n\n**GMuting** of [{firstname}](tg://user?id={user_id}) " "`Aborted coz No reason of GMute provided by User`", del_in=5) return user_id = get_mem['id'] if user_id == msg.from_user.id: await msg.err(r"LoL. Why would I GMuting myself ¯\(°_o)/¯") return if user_id in Config.SUDO_USERS: await msg.edit( "`That user is in my Sudo List, Hence I can't GMute him.`\n\n" "**Tip:** `Remove them from Sudo List and try again. (¬_¬)`", del_in=5) return found = await GMUTE_USER_BASE.find_one({'user_id': user_id}) if found: await msg.edit( "**#Already_GMuted**\n\n`This User Already Exists in My GMute List.`\n" f"**Reason For GMute:** `{found['reason']}`") return await asyncio.gather( GMUTE_USER_BASE.insert_one({ 'firstname': firstname, 'user_id': user_id, 'reason': reason }), msg.edit(r"\\**#GMuted_User**//" f"\n\n**First Name:** [{firstname}](tg://user?id={user_id})\n" f"**User ID:** `{user_id}`\n**Reason:** `{reason}`")) chats = [ msg.chat ] if msg.client.is_bot else await msg.client.get_common_chats(user_id) for chat in chats: try: await chat.restrict_member(user_id, ChatPermissions()) await CHANNEL.log( r"\\**#Antispam_Log**//" f"\n**User:** [{firstname}](tg://user?id={user_id})\n" f"**User ID:** `{user_id}`\n" f"**Chat:** {chat.title}\n" f"**Chat ID:** `{chat.id}`\n" f"**Reason:** `{reason}`\n\n$GMUTE #id{user_id}") except (ChatAdminRequired, UserAdminInvalid, ChannelInvalid): pass if msg.reply_to_message: await CHANNEL.fwd_msg(msg.reply_to_message) await CHANNEL.log(f'$GMUTE #prid{user_id} ⬆️') LOG.info("G-Muted %s", str(user_id))