selfbot-legacy/bot/cogs/tracking.py
2025-05-09 22:43:55 +03:00

98 lines
3.6 KiB
Python

from bot.cogs.cog_manager import BaseCog
import discord
import difflib
import io
class TrackingCog(BaseCog):
def __init__(self, bot):
super().__init__(bot)
self.whitelist = set()
async def on_message_delete(self, message):
"""Handle when messages are deleted"""
if await self.process_log_whitelist(message):
return
if message.channel.id in self.bot.tracked_channels:
member = message.author
if member != self.bot.user:
await message.channel.send(
f"<@{member.id}> deleted {message.content}",
silent=True
)
async def on_message_edit(self, before, after):
"""Handle when messages are edited"""
if await self.process_log_whitelist(before):
return
if before.channel.id in self.bot.tracked_channels:
member = after.author
if member == self.bot.user:
return
if before.content == after.content:
return
diff = difflib.unified_diff(before.content.splitlines(), after.content.splitlines())
diff_result = '\n'.join(diff)
with io.BytesIO(diff_result.encode('utf-8')) as diff_file:
diff_file.seek(0)
await after.channel.send(
f"<@{member.id}> edited a message",
file=discord.File(diff_file, "diff.txt"),
silent=True
)
async def process_log_whitelist(self, message):
"""Check if channel or author is in whitelist"""
return (message.channel.id in self.whitelist or
(hasattr(message, 'author') and message.author.id in self.whitelist))
async def cmd_addlogwhitelist(self, message):
"""
Add a channel or user to logging whitelist
Usage: .addlogwhitelist [user/channel mention]
"""
if not message.mentions and not message.channel_mentions:
# If no mentions, use current channel
self.whitelist.add(message.channel.id)
await message.edit(content=f"✅ Added <#{message.channel.id}> to log whitelist")
return
for user in message.mentions:
self.whitelist.add(user.id)
for channel in message.channel_mentions:
self.whitelist.add(channel.id)
await message.edit(content="✅ Added mentioned entities to log whitelist")
async def cmd_removelogwhitelist(self, message):
"""
Remove a channel or user from logging whitelist
Usage: .removelogwhitelist [user/channel mention]
"""
if not message.mentions and not message.channel_mentions:
# If no mentions, use current channel
self.whitelist.discard(message.channel.id)
await message.edit(content=f"✅ Removed <#{message.channel.id}> from log whitelist")
return
for user in message.mentions:
self.whitelist.discard(user.id)
for channel in message.channel_mentions:
self.whitelist.discard(channel.id)
await message.edit(content="✅ Removed mentioned entities from log whitelist")
async def cmd_clearlogwhitelist(self, message):
"""
Clear the logging whitelist
Usage: .clearlogwhitelist
"""
self.whitelist.clear()
await message.edit(content="✅ Cleared log whitelist")