|
|
@@ -1,7 +1,7 @@
|
|
|
"""
|
|
|
MIT License
|
|
|
|
|
|
-Copyright (c) present TheHamkerCat
|
|
|
+Copyright (c) 2021 TheHamkerCat
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
|
@@ -26,13 +26,12 @@ import re
|
|
|
|
|
|
from time import time
|
|
|
from pyrogram.errors import FloodWait
|
|
|
-from pyrogram import filters, enums
|
|
|
+from pyrogram import filters
|
|
|
from pyrogram.types import (
|
|
|
CallbackQuery,
|
|
|
ChatMemberUpdated,
|
|
|
ChatPermissions,
|
|
|
Message,
|
|
|
- ChatPrivileges,
|
|
|
)
|
|
|
|
|
|
from wbb import BOT_ID, SUDOERS, app, log
|
|
|
@@ -82,7 +81,7 @@ __HELP__ = """/ban - Ban A User
|
|
|
async def member_permissions(chat_id: int, user_id: int):
|
|
|
perms = []
|
|
|
try:
|
|
|
- member = (await app.get_chat_member(chat_id, user_id)).privileges
|
|
|
+ member = await app.get_chat_member(chat_id, user_id)
|
|
|
except Exception:
|
|
|
return []
|
|
|
if member.can_post_messages:
|
|
|
@@ -101,8 +100,8 @@ async def member_permissions(chat_id: int, user_id: int):
|
|
|
perms.append("can_invite_users")
|
|
|
if member.can_pin_messages:
|
|
|
perms.append("can_pin_messages")
|
|
|
- if member.can_manage_video_chats:
|
|
|
- perms.append("can_manage_video_chats")
|
|
|
+ if member.can_manage_voice_chats:
|
|
|
+ perms.append("can_manage_voice_chats")
|
|
|
return perms
|
|
|
|
|
|
|
|
|
@@ -122,8 +121,8 @@ async def list_admins(chat_id: int):
|
|
|
"last_updated_at": time(),
|
|
|
"data": [
|
|
|
member.user.id
|
|
|
- async for member in app.get_chat_members(
|
|
|
- chat_id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
|
|
+ async for member in app.iter_chat_members(
|
|
|
+ chat_id, filter="administrators"
|
|
|
)
|
|
|
],
|
|
|
}
|
|
|
@@ -140,8 +139,8 @@ async def admin_cache_func(_, cmu: ChatMemberUpdated):
|
|
|
"last_updated_at": time(),
|
|
|
"data": [
|
|
|
member.user.id
|
|
|
- async for member in app.get_chat_members(
|
|
|
- cmu.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
|
|
+ async for member in app.iter_chat_members(
|
|
|
+ cmu.chat.id, filter="administrators"
|
|
|
)
|
|
|
],
|
|
|
}
|
|
|
@@ -151,10 +150,7 @@ async def admin_cache_func(_, cmu: ChatMemberUpdated):
|
|
|
# Purge Messages
|
|
|
|
|
|
|
|
|
-@app.on_message(
|
|
|
- filters.command("purge")
|
|
|
- & ~filters.private
|
|
|
-)
|
|
|
+@app.on_message(filters.command("purge") & ~filters.edited & ~filters.private)
|
|
|
@adminsOnly("can_delete_messages")
|
|
|
async def purgeFunc(_, message: Message):
|
|
|
repliedmsg = message.reply_to_message
|
|
|
@@ -204,8 +200,7 @@ async def purgeFunc(_, message: Message):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- filters.command(["kick", "dkick"])
|
|
|
- & ~filters.private
|
|
|
+ filters.command(["kick", "dkick"]) & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def kickFunc(_, message: Message):
|
|
|
@@ -240,6 +235,7 @@ async def kickFunc(_, message: Message):
|
|
|
|
|
|
@app.on_message(
|
|
|
filters.command(["ban", "dban", "tban"])
|
|
|
+ & ~filters.edited
|
|
|
& ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
@@ -302,10 +298,7 @@ async def banFunc(_, message: Message):
|
|
|
# Unban members
|
|
|
|
|
|
|
|
|
-@app.on_message(
|
|
|
- filters.command("unban")
|
|
|
- & ~filters.private
|
|
|
-)
|
|
|
+@app.on_message(filters.command("unban") & ~filters.edited & ~filters.private)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def unban_func(_, message: Message):
|
|
|
# we don't need reasons for unban, also, we
|
|
|
@@ -334,9 +327,7 @@ async def unban_func(_, message: Message):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- SUDOERS
|
|
|
- & filters.command("listban")
|
|
|
- & ~filters.private
|
|
|
+ SUDOERS & filters.command("listban") & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
async def list_ban_(c, message: Message):
|
|
|
userid, msglink_reason = await extract_user_and_reason(message)
|
|
|
@@ -382,7 +373,7 @@ async def list_ban_(c, message: Message):
|
|
|
await app.ban_chat_member(username.strip("@"), userid)
|
|
|
await asyncio.sleep(1)
|
|
|
except FloodWait as e:
|
|
|
- await asyncio.sleep(e.value)
|
|
|
+ await asyncio.sleep(e.x)
|
|
|
except:
|
|
|
continue
|
|
|
count += 1
|
|
|
@@ -402,9 +393,7 @@ async def list_ban_(c, message: Message):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- SUDOERS
|
|
|
- & filters.command("listunban")
|
|
|
- & ~filters.private
|
|
|
+ SUDOERS & filters.command("listunban") & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
async def list_unban_(c, message: Message):
|
|
|
userid, msglink = await extract_user_and_reason(message)
|
|
|
@@ -435,7 +424,7 @@ async def list_unban_(c, message: Message):
|
|
|
await app.unban_chat_member(username.strip("@"), userid)
|
|
|
await asyncio.sleep(1)
|
|
|
except FloodWait as e:
|
|
|
- await asyncio.sleep(e.value)
|
|
|
+ await asyncio.sleep(e.x)
|
|
|
except:
|
|
|
continue
|
|
|
count += 1
|
|
|
@@ -452,10 +441,7 @@ async def list_unban_(c, message: Message):
|
|
|
# Delete messages
|
|
|
|
|
|
|
|
|
-@app.on_message(
|
|
|
- filters.command("del")
|
|
|
- & ~filters.private
|
|
|
-)
|
|
|
+@app.on_message(filters.command("del") & ~filters.edited & ~filters.private)
|
|
|
@adminsOnly("can_delete_messages")
|
|
|
async def deleteFunc(_, message: Message):
|
|
|
if not message.reply_to_message:
|
|
|
@@ -469,6 +455,7 @@ async def deleteFunc(_, message: Message):
|
|
|
|
|
|
@app.on_message(
|
|
|
filters.command(["promote", "fullpromote"])
|
|
|
+ & ~filters.edited
|
|
|
& ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_promote_members")
|
|
|
@@ -477,7 +464,7 @@ async def promoteFunc(_, message: Message):
|
|
|
umention = (await app.get_users(user_id)).mention
|
|
|
if not user_id:
|
|
|
return await message.reply_text("I can't find that user.")
|
|
|
- bot = (await app.get_chat_member(message.chat.id, BOT_ID)).privileges
|
|
|
+ bot = await app.get_chat_member(message.chat.id, BOT_ID)
|
|
|
if user_id == BOT_ID:
|
|
|
return await message.reply_text("I can't promote myself.")
|
|
|
if not bot.can_promote_members:
|
|
|
@@ -492,22 +479,20 @@ async def promoteFunc(_, message: Message):
|
|
|
can_pin_messages=bot.can_pin_messages,
|
|
|
can_promote_members=bot.can_promote_members,
|
|
|
can_manage_chat=bot.can_manage_chat,
|
|
|
- can_manage_video_chats=bot.can_manage_video_chats,
|
|
|
+ can_manage_voice_chats=bot.can_manage_voice_chats,
|
|
|
)
|
|
|
return await message.reply_text(f"Fully Promoted! {umention}")
|
|
|
|
|
|
await message.chat.promote_member(
|
|
|
- user_id,
|
|
|
- ChatPrivileges(
|
|
|
- can_change_info=False,
|
|
|
- can_restrict_members=False,
|
|
|
- can_pin_messages=False,
|
|
|
- can_promote_members=False,
|
|
|
- can_invite_users=True,
|
|
|
- can_delete_messages=True,
|
|
|
- can_manage_chat=True,
|
|
|
- can_manage_video_chats=True,
|
|
|
- ),
|
|
|
+ user_id=user_id,
|
|
|
+ can_change_info=False,
|
|
|
+ can_invite_users=bot.can_invite_users,
|
|
|
+ can_delete_messages=bot.can_delete_messages,
|
|
|
+ can_restrict_members=False,
|
|
|
+ can_pin_messages=False,
|
|
|
+ can_promote_members=False,
|
|
|
+ can_manage_chat=bot.can_manage_chat,
|
|
|
+ can_manage_voice_chats=bot.can_manage_voice_chats,
|
|
|
)
|
|
|
await message.reply_text(f"Promoted! {umention}")
|
|
|
|
|
|
@@ -515,10 +500,7 @@ async def promoteFunc(_, message: Message):
|
|
|
# Demote Member
|
|
|
|
|
|
|
|
|
-@app.on_message(
|
|
|
- filters.command("demote")
|
|
|
- & ~filters.private
|
|
|
-)
|
|
|
+@app.on_message(filters.command("demote") & ~filters.edited & ~filters.private)
|
|
|
@adminsOnly("can_promote_members")
|
|
|
async def demote(_, message: Message):
|
|
|
user_id = await extract_user(message)
|
|
|
@@ -532,16 +514,14 @@ async def demote(_, message: Message):
|
|
|
)
|
|
|
await message.chat.promote_member(
|
|
|
user_id=user_id,
|
|
|
- privileges=ChatPrivileges(
|
|
|
- can_change_info=False,
|
|
|
- can_invite_users=False,
|
|
|
- can_delete_messages=False,
|
|
|
- can_restrict_members=False,
|
|
|
- can_pin_messages=False,
|
|
|
- can_promote_members=False,
|
|
|
- can_manage_chat=False,
|
|
|
- can_manage_video_chats=False,
|
|
|
- ),
|
|
|
+ can_change_info=False,
|
|
|
+ can_invite_users=False,
|
|
|
+ can_delete_messages=False,
|
|
|
+ can_restrict_members=False,
|
|
|
+ can_pin_messages=False,
|
|
|
+ can_promote_members=False,
|
|
|
+ can_manage_chat=False,
|
|
|
+ can_manage_voice_chats=False,
|
|
|
)
|
|
|
umention = (await app.get_users(user_id)).mention
|
|
|
await message.reply_text(f"Demoted! {umention}")
|
|
|
@@ -551,8 +531,7 @@ async def demote(_, message: Message):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- filters.command(["pin", "unpin"])
|
|
|
- & ~filters.private
|
|
|
+ filters.command(["pin", "unpin"]) & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_pin_messages")
|
|
|
async def pin(_, message: Message):
|
|
|
@@ -579,8 +558,7 @@ async def pin(_, message: Message):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- filters.command(["mute", "tmute"])
|
|
|
- & ~filters.private
|
|
|
+ filters.command(["mute", "tmute"]) & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def mute(_, message: Message):
|
|
|
@@ -633,10 +611,7 @@ async def mute(_, message: Message):
|
|
|
# Unmute members
|
|
|
|
|
|
|
|
|
-@app.on_message(
|
|
|
- filters.command("unmute")
|
|
|
- & ~filters.private
|
|
|
-)
|
|
|
+@app.on_message(filters.command("unmute") & ~filters.edited & ~filters.private)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def unmute(_, message: Message):
|
|
|
user_id = await extract_user(message)
|
|
|
@@ -653,6 +628,7 @@ async def unmute(_, message: Message):
|
|
|
@app.on_message(
|
|
|
filters.command("ban_ghosts")
|
|
|
& ~filters.private
|
|
|
+ & ~filters.edited
|
|
|
)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def ban_deleted_accounts(_, message: Message):
|
|
|
@@ -661,7 +637,7 @@ async def ban_deleted_accounts(_, message: Message):
|
|
|
banned_users = 0
|
|
|
m = await message.reply("Finding ghosts...")
|
|
|
|
|
|
- async for i in app.get_chat_members(chat_id):
|
|
|
+ async for i in app.iter_chat_members(chat_id):
|
|
|
if i.user.is_deleted:
|
|
|
deleted_users.append(i.user.id)
|
|
|
if len(deleted_users) > 0:
|
|
|
@@ -677,8 +653,7 @@ async def ban_deleted_accounts(_, message: Message):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- filters.command(["warn", "dwarn"])
|
|
|
- & ~filters.private
|
|
|
+ filters.command(["warn", "dwarn"]) & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def warn_user(_, message: Message):
|
|
|
@@ -757,8 +732,7 @@ async def remove_warning(_, cq: CallbackQuery):
|
|
|
|
|
|
|
|
|
@app.on_message(
|
|
|
- filters.command("rmwarns")
|
|
|
- & ~filters.private
|
|
|
+ filters.command("rmwarns") & ~filters.edited & ~filters.private
|
|
|
)
|
|
|
@adminsOnly("can_restrict_members")
|
|
|
async def remove_warnings(_, message: Message):
|
|
|
@@ -782,10 +756,7 @@ async def remove_warnings(_, message: Message):
|
|
|
# Warns
|
|
|
|
|
|
|
|
|
-@app.on_message(
|
|
|
- filters.command("warns")
|
|
|
- & ~filters.private
|
|
|
-)
|
|
|
+@app.on_message(filters.command("warns") & ~filters.edited & ~filters.private)
|
|
|
@capture_err
|
|
|
async def check_warns(_, message: Message):
|
|
|
user_id = await extract_user(message)
|
|
|
@@ -808,6 +779,7 @@ async def check_warns(_, message: Message):
|
|
|
filters.command("report")
|
|
|
| filters.command(["admins", "admin"], prefixes="@")
|
|
|
)
|
|
|
+ & ~filters.edited
|
|
|
& ~filters.private
|
|
|
)
|
|
|
@capture_err
|
|
|
@@ -839,7 +811,7 @@ async def report_user(_, message):
|
|
|
user_mention = reply.from_user.mention if reply.from_user else reply.sender_chat.title
|
|
|
text = f"Reported {user_mention} to admins!"
|
|
|
admin_data = await app.get_chat_members(
|
|
|
- chat_id=message.chat.id, filter=enums.ChatMembersFilter.ADMINISTRATORS
|
|
|
+ chat_id=message.chat.id, filter="administrators"
|
|
|
) # will it giv floods ?
|
|
|
for admin in admin_data:
|
|
|
if admin.user.is_bot or admin.user.is_deleted:
|