PagerMaid-Modify/pagermaid/modules/prune.py

83 lines
2.9 KiB
Python
Raw Normal View History

""" Module to automate message deletion. """
from asyncio import sleep
from telethon.errors.rpcbaseerrors import BadRequestError
from pagermaid import log
from pagermaid.listener import listener
@listener(outgoing=True, command="prune",
2020-04-03 13:58:27 +00:00
description="从您回复的消息开始删除当前对话的所有消息。(非群组管理员只删除自己的消息)")
async def prune(context):
""" Purge every single message after the message you replied to. """
if not context.reply_to_msg_id:
await context.edit("出错了呜呜呜 ~ 没有回复的消息。")
return
input_chat = await context.get_input_chat()
messages = []
count = 0
async for message in context.client.iter_messages(input_chat, min_id=context.reply_to_msg_id):
messages.append(message)
count += 1
messages.append(context.reply_to_msg_id)
if len(messages) == 100:
await context.client.delete_messages(input_chat, messages)
messages = []
if messages:
await context.client.delete_messages(input_chat, messages)
await log(f"批量删除了 {str(count)} 条消息。")
notification = await send_prune_notify(context, count)
await sleep(.5)
await notification.delete()
@listener(outgoing=True, command="selfprune",
2020-04-03 13:58:27 +00:00
description="删除当前对话您发送的特定数量的消息。(倒序)",
parameters="<integer>")
async def selfprune(context):
""" Deletes specific amount of messages you sent. """
if not len(context.parameter) == 1:
await context.edit("出错了呜呜呜 ~ 无效的参数。")
return
try:
count = int(context.parameter[0])
except ValueError:
await context.edit("出错了呜呜呜 ~ 无效的参数。")
return
count_buffer = 0
async for message in context.client.iter_messages(context.chat_id, from_user="me"):
if count_buffer == count:
break
await message.delete()
count_buffer += 1
await log(f"批量删除了自行发送的 {str(count)} 条消息。")
notification = await send_prune_notify(context, count)
await sleep(.5)
await notification.delete()
@listener(outgoing=True, command="delete",
2020-04-03 13:58:27 +00:00
description="删除当前对话您回复的那条消息。(需要回复一条消息)")
async def delete(context):
""" Deletes the message you replied to. """
target = await context.get_reply_message()
if context.reply_to_msg_id:
try:
await target.delete()
await context.delete()
await log("删除了一条消息。")
except BadRequestError:
await context.edit("出错了呜呜呜 ~ 缺少删除此消息的权限。")
else:
await context.delete()
async def send_prune_notify(context, count):
return await context.client.send_message(
context.chat_id,
"删除了 "
+ str(count)
+ " 条消息。"
)