File size: 4,354 Bytes
c7dfe8b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# <============================================== IMPORTS =========================================================>
from asyncio import sleep
from pyrogram import filters
from pyrogram.enums import ChatType
from pyrogram.errors import MessageDeleteForbidden, RPCError
from pyrogram.types import Message
from Mikobot import SUPPORT_CHAT, app
from Mikobot.utils.can_restrict import can_restrict
# <=======================================================================================================>
# <================================================ FUNCTION =======================================================>
@app.on_message(filters.command("purge"))
@can_restrict
async def purge(c: app, m: Message):
if m.chat.type != ChatType.SUPERGROUP:
await m.reply_text(text="Cannot purge messages in a basic group")
return
if m.reply_to_message:
message_ids = list(range(m.reply_to_message.id, m.id))
def divide_chunks(l: list, n: int = 100):
for i in range(0, len(l), n):
yield l[i : i + n]
# Dielete messages in chunks of 100 messages
m_list = list(divide_chunks(message_ids))
try:
for plist in m_list:
await c.delete_messages(
chat_id=m.chat.id,
message_ids=plist,
revoke=True,
)
await m.delete()
except MessageDeleteForbidden:
await m.reply_text(
text="Cannot delete all messages. The messages may be too old, I might not have delete rights, or this might not be a supergroup."
)
return
except RPCError as ef:
await m.reply_text(
text=f"""Some error occured, report to @{SUPPORT_CHAT}
<b>Error:</b> <code>{ef}</code>"""
)
count_del_msg = len(message_ids)
z = await m.reply_text(text=f"Deleted <i>{count_del_msg}</i> messages")
await sleep(3)
await z.delete()
return
await m.reply_text("Reply to a message to start purge !")
return
@app.on_message(filters.command("spurge"))
@can_restrict
async def spurge(c: app, m: Message):
if m.chat.type != ChatType.SUPERGROUP:
await m.reply_text(text="Cannot purge messages in a basic group")
return
if m.reply_to_message:
message_ids = list(range(m.reply_to_message.id, m.id))
def divide_chunks(l: list, n: int = 100):
for i in range(0, len(l), n):
yield l[i : i + n]
# Dielete messages in chunks of 100 messages
m_list = list(divide_chunks(message_ids))
try:
for plist in m_list:
await c.delete_messages(
chat_id=m.chat.id,
message_ids=plist,
revoke=True,
)
await m.delete()
except MessageDeleteForbidden:
await m.reply_text(
text="Cannot delete all messages. The messages may be too old, I might not have delete rights, or this might not be a supergroup."
)
return
except RPCError as ef:
await m.reply_text(
text=f"""Some error occured, report to @{SUPPORT_CHAT}
<b>Error:</b> <code>{ef}</code>"""
)
return
await m.reply_text("Reply to a message to start spurge !")
return
@app.on_message(
filters.command("del"),
group=9,
)
@can_restrict
async def del_msg(c: app, m: Message):
if m.chat.type != ChatType.SUPERGROUP:
return
if m.reply_to_message:
await m.delete()
await c.delete_messages(
chat_id=m.chat.id,
message_ids=m.reply_to_message.id,
)
else:
await m.reply_text(text="What do you wanna delete?")
return
# <=================================================== HELP ====================================================>
__help__ = """
❗️*Purge*
» /purge: Deletes messages upto replied message.
» /spurge: Deletes messages upto replied message without a success message.
» /del: Deletes a single message, used as a reply to message."""
__mod_name__ = "PURGE"
# <================================================ END =======================================================>
|