Files
plain-ub-overfork/app/plugins/tg_tools/delete.py
overspend1 8fe355ed0c Update README and alive command for @overspend1 fork
- Updated README title to show OVERSPEND1 FORK
- Changed maintainer credit to @overspend1
- Updated alive command to show @overspend1 as creator instead of Meliodas
2025-07-25 20:27:05 +02:00

78 lines
2.4 KiB
Python

import asyncio
from pyrogram.enums import ChatType
from ub_core.utils.helpers import create_chunks
from app import BOT, Message
from app.plugins.tg_tools.get_message import parse_link
@BOT.add_cmd(cmd="del")
async def delete_message(bot: BOT, message: Message) -> None:
"""
CMD: DEL
INFO: Delete the replied message.
FLAGS: -r to remotely delete a text using its link.
USAGE:
.del | .del -r t.me/......
"""
if "-r" in message.flags:
chat_id, _, message_id = parse_link(message.filtered_input)
await bot.delete_messages(chat_id=chat_id, message_ids=message_id, revoke=True)
return
await message.delete(reply=True)
@BOT.add_cmd(cmd="purge")
async def purge_(bot: BOT, message: Message) -> None:
"""
CMD: PURGE
INFO: DELETE MULTIPLE MESSAGES
USAGE:
.purge [reply to message]
"""
chat_id = message.chat.id
start_message: int = message.reply_id
# Not replied to a message
if not start_message:
await message.reply("Reply to a message.")
return
# Replied was topic creation message
if message.thread_origin_message:
await message.reply("Reply to a message.")
return
# Get Topic messages till replied
if message.is_topic_message:
message_ids = []
async for _message in bot.get_discussion_replies(
chat_id=message.chat.id, message_id=message.message_thread_id, limit=100
):
message_ids.append(_message.id)
if _message.id == message.reply_id or len(message_ids) > 100:
break
else:
# Generate Message Ids
message_ids: list[int] = list(range(start_message, message.id))
# Get messages from server if chat is private or ids are too big.
if message.chat.type in {ChatType.PRIVATE, ChatType.BOT} or len(message_ids) > 100:
messages = await bot.get_messages(chat_id=chat_id, message_ids=message_ids, replies=0)
message_ids = [message.id for message in messages]
# Perform Quick purge of bigger chunks
if len(message_ids) < 100:
chunk_size = 50
sleep_interval = 2
else:
chunk_size = 25
sleep_interval = 5
for chunk in create_chunks(message_ids, chunk_size=chunk_size):
await bot.delete_messages(chat_id=chat_id, message_ids=chunk, revoke=True)
await asyncio.sleep(sleep_interval)