Files
Mace-AIO-Discord-Bot---With…/bot/cogs/moderation/snipe.py

73 lines
3.4 KiB
Python

# ╔══════════════════════════════════════════════════════════════════╗
# ║ ║
# ║ +-+-+-+-+-+-+-+-+ ║
# ║ |H|e|x|a|H|o|s|t| ║
# ║ +-+-+-+-+-+-+-+-+ ║
# ║ ║
# ║ © 2026 HexaHost — All Rights Reserved ║
# ║ ║
# ║ discord ── https://discord.gg/hexahost ║
# ║ github ── https://github.com/theoneandonlymace ║
# ║ ║
# ╚══════════════════════════════════════════════════════════════════╝
import discord
from utils.emoji import ERROR
from discord.ext import commands
from datetime import datetime
class Snipe(commands.Cog):
def __init__(self, bot):
self.bot = bot
# This dictionary will store the last deleted message for each channel.
# Format: {channel_id: {'content': '...', 'author': '...', 'deleted_at': ...}}
self.sniped_messages = {}
@commands.Cog.listener()
async def on_message_delete(self, message):
# Ignore messages from bots or from DMs
if message.author.bot or not message.guild:
return
# Store the message details
self.sniped_messages[message.channel.id] = {
'content': message.content,
'author': message.author,
'deleted_at': datetime.utcnow()
}
@commands.hybrid_command(name='snipe', help="Shows the most recently deleted message in the channel.")
@commands.has_permissions(manage_messages=True)
async def snipe(self, ctx):
# Check if there is a sniped message for the current channel
if ctx.channel.id in self.sniped_messages:
sniped_data = self.sniped_messages[ctx.channel.id]
author = sniped_data['author']
content = sniped_data['content']
deleted_at = sniped_data['deleted_at']
# If the deleted message had no text content (e.g., only an image)
if not content:
content = "No text content was found in the deleted message."
# Create the simple embed
embed = discord.Embed(
description=content,
color=0xFF0000,
timestamp=deleted_at
)
embed.set_author(name=f"Sniped message from {author.name}", icon_url=author.display_avatar.url)
embed.set_footer(text="Deleted at") # The timestamp is automatically formatted in the footer
await ctx.send(embed=embed)
else:
# Send an error message if no message is stored for this channel
embed = discord.Embed(
description=f"{ERROR} | There are no deleted messages to snipe in this channel.",
color=0xFF0000
)
await ctx.send(embed=embed)
async def setup(bot):
await bot.add_cog(Snipe(bot))