Ajout d'une fonctionnalité de nettoyage des salons vocaux orphelins au démarrage du bot. Implémentation de la fonction cleanup_orphaned_auto_rooms pour supprimer les salons vides qui ne sont plus utilisés, améliorant ainsi la gestion des ressources dans les serveurs Discord. Mise à jour de la logique de création de salons pour éviter la suppression des salons actifs.
This commit is contained in:
@@ -27,7 +27,7 @@ from discordbot.moderation import (
|
|||||||
)
|
)
|
||||||
from discordbot.welcome import sendWelcomeMessage, sendLeaveMessage, updateInviteCache
|
from discordbot.welcome import sendWelcomeMessage, sendLeaveMessage, updateInviteCache
|
||||||
from discordbot.youtube import checkYouTubeVideos
|
from discordbot.youtube import checkYouTubeVideos
|
||||||
from discordbot.auto_rooms import on_voice_state_update_auto_rooms, on_raw_reaction_add_auto_rooms, on_message_auto_rooms
|
from discordbot.auto_rooms import on_voice_state_update_auto_rooms, on_raw_reaction_add_auto_rooms, on_message_auto_rooms, cleanup_orphaned_auto_rooms
|
||||||
from protondb import searhProtonDb
|
from protondb import searhProtonDb
|
||||||
|
|
||||||
class DiscordBot(discord.Client):
|
class DiscordBot(discord.Client):
|
||||||
@@ -70,6 +70,8 @@ class DiscordBot(discord.Client):
|
|||||||
for guild in self.guilds:
|
for guild in self.guilds:
|
||||||
await updateInviteCache(guild)
|
await updateInviteCache(guild)
|
||||||
|
|
||||||
|
await cleanup_orphaned_auto_rooms(self)
|
||||||
|
|
||||||
self.loop.create_task(self.updateStatus())
|
self.loop.create_task(self.updateStatus())
|
||||||
self.loop.create_task(self.updateHumbleBundle())
|
self.loop.create_task(self.updateHumbleBundle())
|
||||||
self.loop.create_task(self.updateYouTube())
|
self.loop.create_task(self.updateYouTube())
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# discordbot/auto_rooms.py — Auto rooms : message et réactions dans la partie texte du salon vocal (onglet Discussion)
|
# discordbot/auto_rooms.py — Auto rooms : message et réactions dans la partie texte du salon vocal (onglet Discussion)
|
||||||
import logging
|
import logging
|
||||||
|
import re
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import discord
|
import discord
|
||||||
@@ -355,6 +356,39 @@ async def send_control_panel(bot: discord.Client, guild_id: int, owner: Member,
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
_AUTO_ROOM_NAME_PATTERN = re.compile(r"^Salon de .+ [🔓🔒🔐]$")
|
||||||
|
|
||||||
|
|
||||||
|
async def cleanup_orphaned_auto_rooms(bot: discord.Client):
|
||||||
|
"""Supprime les auto rooms orphelines (vides) au démarrage du bot."""
|
||||||
|
config = ConfigurationHelper()
|
||||||
|
if not config.getValue("auto_rooms_enable"):
|
||||||
|
return
|
||||||
|
trigger_channel_id = config.getIntValue("auto_rooms_channel_id")
|
||||||
|
if not trigger_channel_id:
|
||||||
|
return
|
||||||
|
|
||||||
|
deleted = 0
|
||||||
|
for guild in bot.guilds:
|
||||||
|
trigger_channel = guild.get_channel(trigger_channel_id)
|
||||||
|
if not trigger_channel or not trigger_channel.category:
|
||||||
|
continue
|
||||||
|
category = trigger_channel.category
|
||||||
|
for channel in list(category.voice_channels):
|
||||||
|
if channel.id == trigger_channel_id:
|
||||||
|
continue
|
||||||
|
if not _AUTO_ROOM_NAME_PATTERN.match(channel.name):
|
||||||
|
continue
|
||||||
|
if len(channel.members) == 0:
|
||||||
|
try:
|
||||||
|
await channel.delete(reason="Nettoyage auto room orpheline au démarrage")
|
||||||
|
deleted += 1
|
||||||
|
except discord.HTTPException:
|
||||||
|
pass
|
||||||
|
if deleted > 0:
|
||||||
|
logging.info(f"Nettoyage auto rooms : {deleted} salon(s) orphelin(s) supprimé(s)")
|
||||||
|
|
||||||
|
|
||||||
async def on_voice_state_update_auto_rooms(bot: discord.Client, member: Member, before: VoiceState, after: VoiceState):
|
async def on_voice_state_update_auto_rooms(bot: discord.Client, member: Member, before: VoiceState, after: VoiceState):
|
||||||
config = ConfigurationHelper()
|
config = ConfigurationHelper()
|
||||||
if not config.getValue("auto_rooms_enable"):
|
if not config.getValue("auto_rooms_enable"):
|
||||||
@@ -366,8 +400,18 @@ async def on_voice_state_update_auto_rooms(bot: discord.Client, member: Member,
|
|||||||
guild = member.guild
|
guild = member.guild
|
||||||
|
|
||||||
if after.channel and after.channel.id == trigger_channel_id:
|
if after.channel and after.channel.id == trigger_channel_id:
|
||||||
|
existing_room = _get_room(guild.id, member.id)
|
||||||
|
if existing_room:
|
||||||
|
old_channel = bot.get_channel(existing_room["voice_channel_id"])
|
||||||
|
_del_room(guild.id, member.id)
|
||||||
|
if old_channel and isinstance(old_channel, discord.VoiceChannel):
|
||||||
|
if len(old_channel.members) == 0:
|
||||||
|
try:
|
||||||
|
await old_channel.delete(reason="Auto room remplacée")
|
||||||
|
except discord.HTTPException:
|
||||||
|
pass
|
||||||
|
|
||||||
category = after.channel.category
|
category = after.channel.category
|
||||||
# Nom du salon avec statut (cadenas) à la création
|
|
||||||
channel_name = f"Salon de {member.display_name} {_status_emoji('open')}"
|
channel_name = f"Salon de {member.display_name} {_status_emoji('open')}"
|
||||||
try:
|
try:
|
||||||
new_channel = await guild.create_voice_channel(
|
new_channel = await guild.create_voice_channel(
|
||||||
@@ -396,7 +440,7 @@ async def on_voice_state_update_auto_rooms(bot: discord.Client, member: Member,
|
|||||||
except discord.HTTPException as e:
|
except discord.HTTPException as e:
|
||||||
logging.error(f"Erreur création auto room : {e}")
|
logging.error(f"Erreur création auto room : {e}")
|
||||||
|
|
||||||
if before.channel and before.channel.id != trigger_channel_id:
|
if before.channel and before.channel != after.channel and before.channel.id != trigger_channel_id:
|
||||||
result = _find_room_by_channel(guild.id, before.channel.id)
|
result = _find_room_by_channel(guild.id, before.channel.id)
|
||||||
if result:
|
if result:
|
||||||
owner_id, room = result
|
owner_id, room = result
|
||||||
|
|||||||
Reference in New Issue
Block a user