The begining
This commit is contained in:
commit
dee311e709
71 changed files with 8349 additions and 0 deletions
60
commandes/modules_security/antiraid.py
Normal file
60
commandes/modules_security/antiraid.py
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
import discord
|
||||
from discord.ext import commands
|
||||
import json
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
SETTINGS_FILE = "data/security_settings.json"
|
||||
WHITELIST_FILE = "data/whitelist.json"
|
||||
|
||||
def is_whitelisted(guild_id, user_id):
|
||||
if not os.path.exists(WHITELIST_FILE): return False
|
||||
try:
|
||||
with open(WHITELIST_FILE, "r", encoding='utf-8') as f:
|
||||
data = json.load(f)
|
||||
return user_id in data.get(str(guild_id), [])
|
||||
except: return False
|
||||
|
||||
class AntiRaid(commands.Cog):
|
||||
def __init__(self, bot):
|
||||
self.bot = bot
|
||||
self.join_cache = {}
|
||||
|
||||
@commands.Cog.listener()
|
||||
async def on_member_join(self, member):
|
||||
if member.bot: return
|
||||
|
||||
# 1. WHITELIST
|
||||
if is_whitelisted(member.guild.id, member.id): return
|
||||
|
||||
# 2. LECTURE DYNAMIQUE
|
||||
if not os.path.exists(SETTINGS_FILE): return
|
||||
with open(SETTINGS_FILE, "r", encoding='utf-8') as f:
|
||||
settings = json.load(f).get(str(member.guild.id), {})
|
||||
|
||||
if not settings.get("anti_raid"): return
|
||||
|
||||
guild_id = member.guild.id
|
||||
now = datetime.now()
|
||||
|
||||
if guild_id not in self.join_cache: self.join_cache[guild_id] = []
|
||||
self.join_cache[guild_id].append(now)
|
||||
self.join_cache[guild_id] = [t for t in self.join_cache[guild_id] if (now - t).seconds < 10]
|
||||
|
||||
if len(self.join_cache[guild_id]) > settings.get("raid_threshold", 3):
|
||||
await self.handle_raid(member.guild, settings)
|
||||
|
||||
async def handle_raid(self, guild, settings):
|
||||
if settings.get("auto_ban"):
|
||||
# Logique d'auto-ban des derniers membres ici
|
||||
pass
|
||||
|
||||
log_channel_id = settings.get("log_channel_id")
|
||||
if log_channel_id:
|
||||
channel = guild.get_channel(int(log_channel_id))
|
||||
if channel:
|
||||
embed = discord.Embed(title="🚨 ALERTE RAID", description=f"Vague de {len(self.join_cache[guild.id])} membres !", color=0xFF0000)
|
||||
await channel.send(embed=embed)
|
||||
|
||||
async def setup(bot):
|
||||
await bot.add_cog(AntiRaid(bot))
|
||||
Loading…
Add table
Add a link
Reference in a new issue