116 lines
4.8 KiB
Python
116 lines
4.8 KiB
Python
""" 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",
|
|
description="以此命令回复某条消息,将删除最新一条消息至该条消息之间的所有消息。限制:基于消息 ID 的 1000 条消息,大于 1000 条可能会触发删除消息过快限制。(非群组管理员只删除自己的消息)")
|
|
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, count)
|
|
await sleep(.5)
|
|
await notification.delete()
|
|
|
|
|
|
@listener(outgoing=True, command="selfprune",
|
|
description="删除当前对话您发送的特定数量的消息。限制:基于消息 ID 的 1000 条消息,大于 1000 条可能会触发删除消息过快限制。入群消息非管理员无法删除。(倒序)当数字足够大时即可实现删除所有消息。",
|
|
parameters="<数量>")
|
|
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])
|
|
await context.delete()
|
|
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_buffer)} / {str(count)} 条消息。")
|
|
notification = await send_prune_notify(context, count_buffer, count)
|
|
await sleep(.5)
|
|
await notification.delete()
|
|
|
|
|
|
@listener(outgoing=True, command="yourprune",
|
|
description="删除当前对话您回复用户所发送的特定数量的消息。限制:基于消息 ID 的 1000 条消息,大于 1000 条可能会触发删除消息过快限制。(倒序、需要删除消息权限)当数字足够大时即可实现删除所有消息。",
|
|
parameters="<数量>")
|
|
async def yourprune(context):
|
|
""" Deletes specific amount of messages someone sent. """
|
|
if not context.reply_to_msg_id:
|
|
await context.edit("出错了呜呜呜 ~ 没有回复的消息。")
|
|
return
|
|
target = await context.get_reply_message()
|
|
if not len(context.parameter) == 1:
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
return
|
|
try:
|
|
count = int(context.parameter[0])
|
|
await context.delete()
|
|
except ValueError:
|
|
await context.edit("出错了呜呜呜 ~ 无效的参数。")
|
|
return
|
|
except:
|
|
pass
|
|
count_buffer = 0
|
|
async for message in context.client.iter_messages(context.chat_id, from_user=target.from_id):
|
|
if count_buffer == count:
|
|
break
|
|
await message.delete()
|
|
count_buffer += 1
|
|
await log(f"批量删除了回复用户所发送的 {str(count_buffer)} / {str(count)} 条消息。")
|
|
notification = await send_prune_notify(context, count_buffer, count)
|
|
await sleep(.5)
|
|
await notification.delete()
|
|
|
|
|
|
@listener(outgoing=True, command="del",
|
|
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_buffer, count):
|
|
return await context.client.send_message(
|
|
context.chat_id,
|
|
"删除了 "
|
|
+ str(count_buffer) + " / " + str(count)
|
|
+ " 条消息。"
|
|
)
|