Spaces:
Runtime error
Runtime error
| import random | |
| from pyrogram import Client, filters | |
| from pyrogram.enums import ChatType | |
| from pyrogram.types import Message | |
| from Hellbot.core import ENV | |
| from . import Config, HelpMenu, Symbols, custom_handler, db, hellbot, on_message | |
| blocked_messages = [ | |
| "๐ค User has entered the silent zone.", | |
| "๐ป Message blocked. Ghost mode activated.", | |
| "๐๏ธ Sorry, the user is on vacation in Blockland.", | |
| "๐ซ Message blocked. Time for a digital forcefield.", | |
| "๐ท User temporarily ejected from my DM.", | |
| "๐ Blocking vibes only. Silence in progress.", | |
| "๐ Shhh... message blocked for tranquility.", | |
| "๐ท Access denied. User in the digital timeout corner.", | |
| "โ User temporarily MIA from the conversation.", | |
| "๐ Message blocked. Secret mission engaged.", | |
| ] | |
| unblocked_messages = [ | |
| "๐ Welcome back! Digital barrier lifted.", | |
| "๐ Unblocked! Get ready for a flood of messages.", | |
| "๐๏ธ User released from message jail. Freedom at last!", | |
| "๐ Breaking the silence!.", | |
| "๐ฌ User back on the radar. Messages unlocked!", | |
| "๐ Soaring back into the conversation!", | |
| "๐ Reconnecting user to the chat matrix.", | |
| "๐ Unblocking for an influx of communication!", | |
| "๐ Launching user back into the message cosmos!", | |
| "๐๏ธ Unblocked and ready for the conversation spotlight!", | |
| ] | |
| WARNS = {} | |
| PREV_MESSAGE = {} | |
| async def block_user(client: Client, message: Message): | |
| if len(message.command) > 1: | |
| try: | |
| user = await client.get_users(message.command[1]) | |
| except Exception as e: | |
| return await hellbot.error(message, f"`{e}`") | |
| elif message.chat.type == ChatType.PRIVATE: | |
| user = message.chat | |
| elif message.reply_to_message: | |
| user = message.reply_to_message.from_user | |
| else: | |
| return await hellbot.delete( | |
| message, "`Reply to a user or give their id/username`" | |
| ) | |
| if user.id == client.me.id: | |
| return await hellbot.delete(message, "`I can't block myself`") | |
| if user.id in Config.DEVS: | |
| return await hellbot.delete(message, "`I can't block my devs`") | |
| success = await client.block_user(user.id) | |
| if success: | |
| await hellbot.delete( | |
| message, | |
| f"**{random.choice(blocked_messages)}\n\n{Symbols.cross_mark} Blocked:** {user.mention}", | |
| ) | |
| else: | |
| await hellbot.error(message, f"`Couldn't block {user.mention}`") | |
| async def unblock_user(client: Client, message: Message): | |
| if len(message.command) > 1: | |
| try: | |
| user = await client.get_users(message.command[1]) | |
| except Exception as e: | |
| return await hellbot.error(message, f"`{e}`") | |
| elif message.reply_to_message: | |
| user = message.reply_to_message.from_user | |
| else: | |
| return await hellbot.delete( | |
| message, "`Reply to a user or give their id/username`" | |
| ) | |
| if user.id == client.me.id: | |
| return await hellbot.delete(message, "`I can't unblock myself`") | |
| success = await client.unblock_user(user.id) | |
| if success: | |
| await hellbot.delete( | |
| message, | |
| f"**{random.choice(unblocked_messages)}\n\n{Symbols.check_mark} Unblocked:** {user.mention}", | |
| ) | |
| else: | |
| await hellbot.error(message, f"`Couldn't unblock {user.mention}`") | |
| async def allow_pm(client: Client, message: Message): | |
| if len(message.command) > 1: | |
| try: | |
| user = await client.get_users(message.command[1]) | |
| user_id = user.id | |
| user_mention = user.mention | |
| except Exception as e: | |
| return await hellbot.error(message, f"`{e}`") | |
| elif message.chat.type == ChatType.PRIVATE: | |
| user_id = message.chat.id | |
| user_mention = message.chat.first_name or message.chat.title | |
| elif message.reply_to_message: | |
| user_id = message.reply_to_message.from_user.id | |
| user_mention = message.reply_to_message.from_user.mention | |
| else: | |
| return await hellbot.delete( | |
| message, "`Reply to a user or give their id/username`" | |
| ) | |
| if user_id == client.me.id: | |
| return await hellbot.delete(message, "`I can't allow myself`") | |
| if await db.is_pmpermit(client.me.id, user_id): | |
| return await hellbot.delete(message, "`User is already allowed to pm!`") | |
| await db.add_pmpermit(client.me.id, user_id) | |
| await hellbot.delete(message, f"**{Symbols.check_mark} Allowed:** {user_mention}") | |
| async def disallow_pm(client: Client, message: Message): | |
| if len(message.command) > 1: | |
| try: | |
| user = await client.get_users(message.command[1]) | |
| user_id = user.id | |
| user_mention = user.mention | |
| except Exception as e: | |
| return await hellbot.error(message, f"`{e}`") | |
| elif message.chat.type == ChatType.PRIVATE: | |
| user_id = message.chat.id | |
| user_mention = message.chat.first_name or message.chat.title | |
| elif message.reply_to_message: | |
| user_id = message.reply_to_message.from_user.id | |
| user_mention = message.reply_to_message.from_user.mention | |
| else: | |
| return await hellbot.delete( | |
| message, "`Reply to a user or give their id/username`" | |
| ) | |
| if user_id == client.me.id: | |
| return await hellbot.delete(message, "`I can't disallow myself`") | |
| if not await db.is_pmpermit(client.me.id, user_id): | |
| return await hellbot.delete(message, "`User is not allowed to pm!`") | |
| await db.rm_pmpermit(client.me.id, user_id) | |
| await hellbot.delete( | |
| message, f"**{Symbols.cross_mark} Disallowed:** {user_mention}" | |
| ) | |
| async def allowlist(client: Client, message: Message): | |
| hell = await hellbot.edit(message, "`Fetching allowlist...`") | |
| users = await db.get_all_pmpermits(client.me.id) | |
| if not users: | |
| return await hellbot.delete(hell, "`No users allowed to pm!`") | |
| text = "**๐ ๐ ๐๐๐๐๐๐พ๐ฝ ๐ด๐๐พ๐'๐ ๐ซ๐๐๐:**\n\n" | |
| for user in users: | |
| try: | |
| name = (await client.get_users(user["user"])).first_name | |
| text += f" {Symbols.anchor} {name} (`{user['user']}`) | {user['date']}\n" | |
| except: | |
| text += f" {Symbols.anchor} Unkown Peer (`{user['user']}`) | {user['date']}\n" | |
| await hell.edit(text) | |
| async def set_pmpermit(_, message: Message): | |
| if len(message.command) < 2: | |
| status = await db.get_env(ENV.pmpermit) | |
| text = "Enabled" if status else "Disabled" | |
| return await hellbot.delete( | |
| message, | |
| f"**Current PM Permit Setting:** `{text}`\n\nTo change the setting give either `on` or `off` as argument.", | |
| ) | |
| cmd = message.command[1].lower().strip() | |
| if cmd == "on": | |
| await db.set_env(ENV.pmpermit, True) | |
| await hellbot.delete(message, "**PM Permit Enabled!**") | |
| elif cmd == "off": | |
| await db.set_env(ENV.pmpermit, False) | |
| await hellbot.delete(message, "**PM Permit Disabled!**") | |
| else: | |
| await hellbot.delete(message, "**Invalid Argument!**") | |
| async def handler_outgoing_pm(client: Client, message: Message): | |
| if message.chat.id == 777000: | |
| return | |
| if not await db.get_env(ENV.pmpermit): | |
| return | |
| if not await db.is_pmpermit(client.me.id, message.chat.id): | |
| await db.add_pmpermit(client.me.id, message.chat.id) | |
| hell = await client.send_message(message.chat.id, "Approving ...") | |
| await hellbot.delete( | |
| hell, | |
| f"**{Symbols.check_mark} Auto-Approved Outgoing PM:** {message.chat.first_name}", | |
| ) | |
| async def handle_incoming_pm(client: Client, message: Message): | |
| if message.from_user.id in Config.DEVS: | |
| return | |
| if message.from_user.id == 777000: | |
| return | |
| if not await db.get_env(ENV.pmpermit): | |
| return | |
| if await db.is_pmpermit(client.me.id, message.from_user.id): | |
| return | |
| if message.from_user.id in Config.AUTH_USERS: | |
| return | |
| max_spam = await db.get_env(ENV.pm_max_spam) | |
| max_spam = int(max_spam) if max_spam else 3 | |
| warns = WARNS.get(client.me.id, {}).get(message.from_user.id, max_spam) | |
| if warns <= 0: | |
| await client.block_user(message.from_user.id) | |
| WARNS[client.me.id] = {message.from_user.id: max_spam} | |
| return await client.send_message( | |
| message.from_user.id, | |
| f"**{Symbols.cross_mark} ๐ค๐๐๐๐๐ ๐๐ฟ ๐๐๐๐ ๐๐๐บ๐๐๐๐๐ ๐๐พ๐๐พ! ๐ก๐ ๐๐ผ๐๐๐๐ ๐๐๐ ๐ฟ๐๐๐ ๐ฏ๐ฌ ๐๐๐๐๐ ๐ฟ๐๐๐๐๐พ๐ ๐๐๐๐๐ผ๐พ.**", | |
| ) | |
| pm_msg = f"๐ ๐๐๐ฅ๐ฅ๐๐จ๐ญ ๐๐ ๐๐๐๐ฎ๐ซ๐ข๐ญ๐ฒ!\n\n" | |
| custom_pmmsg = await db.get_env(ENV.custom_pmpermit) | |
| if custom_pmmsg: | |
| pm_msg += f"{custom_pmmsg}\n**๐ธ๐๐ ๐๐บ๐๐พ {warns} ๐๐บ๐๐๐๐๐๐ ๐ ๐พ๐ฟ๐!**" | |
| else: | |
| pm_msg += f"**๐ ๐ง๐พ๐ ๐ ๐ {message.from_user.mention}!**\n๐ณ๐๐๐ ๐๐ ๐บ๐ ๐บ๐๐๐๐๐บ๐๐พ๐ฝ ๐๐พ๐๐๐บ๐๐พ ๐บ๐๐ฝ ๐๐๐ ๐บ๐๐พ ๐๐พ๐๐๐พ๐๐๐พ๐ฝ ๐๐๐ ๐๐ ๐๐๐บ๐ ๐๐พ๐๐๐บ๐๐พ๐ ๐๐พ๐๐พ! \n**๐ธ๐๐ ๐๐บ๐๐พ {warns} ๐๐บ๐๐๐๐๐๐ ๐ ๐พ๐ฟ๐!**" | |
| try: | |
| pm_pic = await db.get_env(ENV.pmpermit_pic) | |
| if pm_pic and pm_pic.endswith(".mp4"): | |
| msg = await client.send_video( | |
| message.from_user.id, | |
| pm_pic, | |
| pm_msg, | |
| ) | |
| elif pm_pic: | |
| msg = await client.send_photo( | |
| message.from_user.id, | |
| pm_pic, | |
| pm_msg, | |
| ) | |
| else: | |
| msg = await client.send_message( | |
| message.from_user.id, | |
| pm_msg, | |
| disable_web_page_preview=True, | |
| ) | |
| except: | |
| msg = await client.send_message( | |
| message.from_user.id, | |
| pm_msg, | |
| disable_web_page_preview=True, | |
| ) | |
| prev_msg = PREV_MESSAGE.get(client.me.id, {}).get(message.from_user.id, None) | |
| if prev_msg: | |
| await prev_msg.delete() | |
| PREV_MESSAGE[client.me.id] = {message.from_user.id: msg} | |
| WARNS[client.me.id] = {message.from_user.id: warns - 1} | |
| HelpMenu("pmpermit").add( | |
| "block", | |
| "<reply to user>/<userid/username>", | |
| "Block a user from pm-ing you.", | |
| "block @ForGo10God", | |
| ).add( | |
| "unblock", | |
| "<reply to user>/<userid/username>", | |
| "Unblock a user from pm-ing you.", | |
| "unblock @ForGo10God", | |
| ).add( | |
| "allow", | |
| "<reply to user>/<userid/username>", | |
| "Allow a user to pm you.", | |
| "allow @ForGo10God", | |
| "An alias of 'approve' is also available.", | |
| ).add( | |
| "disallow", | |
| "<reply to user>/<userid/username>", | |
| "Disallow a user to pm you.", | |
| "disallow @ForGo10God", | |
| "An alias of 'disapprove' is also available.", | |
| ).add( | |
| "allowlist", | |
| None, | |
| "List all users allowed to pm you.", | |
| "allowlist", | |
| "An alias of 'approvelist' is also available.", | |
| ).info( | |
| "Manage who can pm you." | |
| ).done() | |