mirror of
https://github.com/TeamPGM/PagerMaid_Plugins_Pyro.git
synced 2024-11-29 02:57:30 +00:00
54 lines
2.0 KiB
Python
54 lines
2.0 KiB
Python
import contextlib
|
|
|
|
from asyncio import sleep
|
|
|
|
from pyrogram.errors import FloodWait
|
|
from pyrogram.raw.functions.contacts import GetBlocked
|
|
from pyrogram.raw.types.contacts import BlockedSlice
|
|
|
|
from pagermaid.listener import listener
|
|
from pagermaid.enums import Client, Message
|
|
|
|
|
|
async def clear_blocked_func(client: Client, message: Message):
|
|
offset = 0
|
|
success, failed, skipped = 0, 0, 0
|
|
while True:
|
|
blocked = await client.invoke(GetBlocked(offset=offset, limit=100))
|
|
if not blocked.users:
|
|
break
|
|
for user in blocked.users:
|
|
if (user.bot or user.scam or user.fake) and not user.deleted:
|
|
skipped += 1
|
|
continue
|
|
try:
|
|
await client.unblock_user(user.id)
|
|
success += 1
|
|
except FloodWait as e:
|
|
with contextlib.suppress(Exception):
|
|
await message.edit(f"🧹 Clearing blocked users...\n\nWill run after {e.value} seconds.")
|
|
await sleep(e.value + 1)
|
|
with contextlib.suppress(Exception):
|
|
await message.edit("🧹 Clearing blocked users...")
|
|
await client.unblock_user(user.id)
|
|
success += 1
|
|
except Exception:
|
|
failed += 1
|
|
offset += 100
|
|
if (isinstance(blocked, BlockedSlice) and offset > blocked.count) or not isinstance(blocked, BlockedSlice):
|
|
break
|
|
return success, failed, skipped
|
|
|
|
|
|
@listener(command="clear_blocked", description="Clear blocked users.", need_admin=True)
|
|
async def clear_blocked(client: Client, message: Message):
|
|
""" Clear blocked users. """
|
|
message: Message = await message.edit("🧹 Clearing blocked users...")
|
|
try:
|
|
success, failed, skipped = await clear_blocked_func(client, message)
|
|
except Exception as e:
|
|
await message.edit(f"❌ Failed to clear blocked users: {e}")
|
|
return
|
|
await message.edit(f"🧹 Clear blocked users complete. \n"
|
|
f"Success: {success}, Failed: {failed}, Skipped: {skipped}")
|