mirror of
https://github.com/neoarz/Syntrel.git
synced 2025-12-25 03:40:11 +01:00
Converted individual moderation command cogs (ban, kick, purge, warnings, archive, hackban, nick) into command factory functions and registered them under a new Moderation GroupCog in cogs/moderation/__init__.py. Updated bot.py and help.py to support the new moderation group and category. This improves organization and enables grouped moderation commands.
55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
import os
|
|
from datetime import datetime
|
|
import discord
|
|
from discord import app_commands
|
|
from discord.ext import commands
|
|
from discord.ext.commands import Context
|
|
|
|
|
|
def archive_command():
|
|
@commands.hybrid_command(
|
|
name="archive",
|
|
description="Archives in a text file the last messages with a chosen limit of messages.",
|
|
)
|
|
@commands.has_permissions(manage_messages=True)
|
|
@app_commands.describe(
|
|
limit="The limit of messages that should be archived.",
|
|
)
|
|
async def archive(self, context, limit: int = 10):
|
|
"""
|
|
Archives in a text file the last messages with a chosen limit of messages. This command requires the MESSAGE_CONTENT intent to work properly.
|
|
|
|
:param context: The hybrid command context.
|
|
:param limit: The limit of messages that should be archived. Default is 10.
|
|
"""
|
|
log_file = f"{context.channel.id}.log"
|
|
|
|
messages = []
|
|
async for message in context.channel.history(
|
|
limit=limit, before=context.message
|
|
):
|
|
attachments = []
|
|
for attachment in message.attachments:
|
|
attachments.append(attachment.url)
|
|
attachments_text = (
|
|
f"[Attached File{'s' if len(attachments) >= 2 else ''}: {', '.join(attachments)}]"
|
|
if len(attachments) >= 1
|
|
else ""
|
|
)
|
|
|
|
message_line = f"{message.created_at.strftime('%m/%d/%Y %H:%M:%S')} {message.author} {message.id}: {message.clean_content} {attachments_text}\n"
|
|
messages.append(message_line)
|
|
|
|
with open(log_file, "w", encoding="UTF-8") as f:
|
|
f.write(
|
|
f'Archived messages from: #{context.channel} ({context.channel.id}) in the guild "{context.guild}" ({context.guild.id}) at {datetime.now().strftime("%m/%d/%Y %H:%M:%S")}\n'
|
|
)
|
|
|
|
for message_line in reversed(messages):
|
|
f.write(message_line)
|
|
|
|
f = discord.File(log_file)
|
|
await context.send(file=f)
|
|
os.remove(log_file)
|
|
|
|
return archive |