# Moon-Userbot - telegram userbot # Copyright (C) 2020-present Moon Userbot Organization # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . import os from pyrogram import Client, filters from pyrogram.raw import functions from pyrogram.types import Message from utils.config import pm_limit from utils.db import db from utils.misc import modules_help, prefix anti_pm_enabled = filters.create(lambda _, __, ___: db.get('core.antipm', 'status', False)) in_contact_list = filters.create(lambda _, __, message: message.from_user.is_contact) is_support = filters.create(lambda _, __, message: message.chat.is_support) USER_WARNINGS = {} @Client.on_message(filters.private & ~filters.me & ~filters.bot & ~in_contact_list & ~is_support & anti_pm_enabled) async def anti_pm_handler(client: Client, message: Message): user_id = message.from_user.id ids = message.chat.id b_f = await client.get_me() u_n = b_f.first_name user = await client.get_users(ids) u_f = user.first_name default_text = db.get('core.antipm', 'antipm_msg', None) if default_text is None: default_text = f"""Hello, {u_f}! This is the Assistant Of {u_n}. My Boss is away or busy as of now, You can wait for him to respond. Do not spam further messages else I may have to block you! This is an automated message by the assistant. Currently You Have {USER_WARNINGS.get(user_id, 0)} Warnings. """ else: default_text = default_text.format(user=u_f, my_name=u_n, warns=USER_WARNINGS.get(user_id, 0)) if db.get('core.antipm', 'spamrep', False): user_info = await client.resolve_peer(ids) await client.invoke(functions.messages.ReportSpam(peer=user_info)) if db.get('core.antipm', 'block', False): await client.block_user(user_id) if db.get('core.antipm', f'disallowusers{ids}') == user_id != db.get('core.antipm', f'allowusers{ids}') or db.get( 'core.antipm', f'disallowusers{ids}' ) != user_id != db.get('core.antipm', f'allowusers{ids}'): default_pic = db.get('core.antipm', 'antipm_pic', None) if default_pic and os.path.exists(default_pic): await client.send_photo(message.chat.id, default_pic, caption=default_text) else: await client.send_message(message.chat.id, default_text) if user_id in USER_WARNINGS: USER_WARNINGS[user_id] += 1 else: USER_WARNINGS[user_id] = 1 if USER_WARNINGS[user_id] > pm_limit: await client.send_message( message.chat.id, 'Ehm...! That was your Last warn, Bye Bye see you L0L', ) await client.block_user(user_id) del USER_WARNINGS[user_id] @Client.on_message(filters.command(['antipm', 'anti_pm'], prefix) & filters.me) async def anti_pm(_, message: Message): if len(message.command) == 1: if db.get('core.antipm', 'status', False): await message.edit(f'Anti-PM status: enabled\nDisable with: {prefix}antipm disable') else: await message.edit(f'Anti-PM status: disabled\nEnable with: {prefix}antipm enable') elif message.command[1] in ['enable', 'on', '1', 'yes', 'true']: db.set('core.antipm', 'status', True) await message.edit('Anti-PM enabled!') elif message.command[1] in ['disable', 'off', '0', 'no', 'false']: db.set('core.antipm', 'status', False) await message.edit('Anti-PM disabled!') else: await message.edit(f'Usage: {prefix}antipm [enable|disable]') @Client.on_message(filters.command(['antipm_report'], prefix) & filters.me) async def antipm_report(_, message: Message): if len(message.command) == 1: if db.get('core.antipm', 'spamrep', False): await message.edit( f'Spam-reporting enabled.\nDisable with: {prefix}antipm_report disable' ) else: await message.edit( f'Spam-reporting disabled.\nEnable with: {prefix}antipm_report enable' ) elif message.command[1] in ['enable', 'on', '1', 'yes', 'true']: db.set('core.antipm', 'spamrep', True) await message.edit('Spam-reporting enabled!') elif message.command[1] in ['disable', 'off', '0', 'no', 'false']: db.set('core.antipm', 'spamrep', False) await message.edit('Spam-reporting disabled!') else: await message.edit(f'Usage: {prefix}antipm_report [enable|disable]') @Client.on_message(filters.command(['antipm_block'], prefix) & filters.me) async def antipm_block(_, message: Message): if len(message.command) == 1: if db.get('core.antipm', 'block', False): await message.edit( f'Blocking users enabled.\nDisable with: {prefix}antipm_block disable' ) else: await message.edit( f'Blocking users disabled.\nEnable with: {prefix}antipm_block enable' ) elif message.command[1] in ['enable', 'on', '1', 'yes', 'true']: db.set('core.antipm', 'block', True) await message.edit('Blocking users enabled!') elif message.command[1] in ['disable', 'off', '0', 'no', 'false']: db.set('core.antipm', 'block', False) await message.edit('Blocking users disabled!') else: await message.edit(f'Usage: {prefix}antipm_block [enable|disable]') @Client.on_message(filters.command(['a'], prefix) & filters.me) async def add_contact(_, message: Message): ids = message.chat.id db.set('core.antipm', f'allowusers{ids}', ids) if ids in USER_WARNINGS: del USER_WARNINGS[ids] await message.edit('User Approved!') @Client.on_message(filters.command(['d'], prefix) & filters.me) async def del_contact(_, message: Message): ids = message.chat.id db.set('core.antipm', f'disallowusers{ids}', ids) db.remove('core.antipm', f'allowusers{ids}') await message.edit('User DisApproved!') @Client.on_message(filters.command(['setantipmmsg', 'sam'], prefix) & filters.me) async def set_antipm_msg(_, message: Message): if not message.reply_to_message: db.set('core.antipm', 'antipm_msg', None) await message.edit('antipm message set to default.') return msg = message.reply_to_message afk_msg = msg.text or msg.caption if not afk_msg: return await message.edit('Reply to a text or caption message to set it as your antipm message.') if len(afk_msg) > 200: return await message.edit('antipm message is too long. It should be less than 200 characters.') if '{user}' not in afk_msg: return await message.edit('antipm message must contain {user} to mention the user.') if '{my_name}' not in afk_msg: return await message.edit('antipm message must contain {my_name} to mention your name.') if '{warns}' not in afk_msg: return await message.edit('antipm message must contain {warns} to mention the warns count.') old_afk_msg = db.get('core.antipm', 'antipm_msg', None) if old_afk_msg: db.remove('core.antipm', 'antipm_msg') db.set('core.antipm', 'antipm_msg', afk_msg) await message.edit(f'antipm message set to:\n\n{afk_msg}') @Client.on_message(filters.command(['setantipmpic', 'sap'], prefix) & filters.me) async def set_antipm_pic(_, message: Message): if not message.reply_to_message or not message.reply_to_message.photo: db.set('core.antipm', 'antipm_pic', None) await message.edit('antipm picture set to default.') return await message.edit('Setting antipm picture...') photo = await message.reply_to_message.download('antipm_pic.jpg') old_antipm_pic = db.get('core.antipm', 'antipm_pic', None) if old_antipm_pic: db.remove('core.antipm', 'antipm_pic') db.set('core.antipm', 'antipm_pic', photo) await message.edit('antipm picture set successfully.') modules_help['antipm'] = { 'antipm [enable|disable]*': 'Enable Pm permit', 'antipm_report [enable|disable]*': 'Enable spam reporting', 'antipm_block [enable|disable]*': 'Enable user blocking', 'setantipmmsg [reply to message]*': 'Set antipm message. Use {user} to mention the user and {my_name} to mention your name and {warns} to mention the warns count.', 'sam [reply to message]*': 'Set antipm message. Use {user} to mention the user and {my_name} to mention your name and {warns} to mention the warns count.', 'setantipmpic [reply to photo]*': 'Set antipm picture.', 'sap [reply to photo]*': 'Set antipm picture.', 'a': 'Approve User', 'd': 'DisApprove User', }