Skip to content
Merged

Dev #11

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/endpoints/image_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ async def generate_image(
logger.info(f"Prompt amélioré: {final_prompt[:100]}{'...' if len(final_prompt) > 100 else ''}")

from utils.image_gen import generate_image
size = "1024x1024"

logger.debug(f"Démarrage de la génération avec timeout de {REQUEST_TIMEOUT * 2}s")
response = await asyncio.wait_for(
Expand Down
63 changes: 29 additions & 34 deletions bots/admin_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,45 +12,42 @@
load_dotenv()

TOKEN = get_admin_bot_token()

intents = discord.Intents.default()

bot = commands.Bot(command_prefix="!", owner_ids=DEV_IDS, intents=intents)

supabase = get_supabase_client()
logger = logging.getLogger(LOGGER_NAME)

purge_task = None

@bot.event
async def on_ready():
global purge_task
activity = discord.CustomActivity(name="⚙️ Administrate AlphaLLM")
await bot.change_presence(activity=activity, status=discord.Status.online)
await bot.tree.sync()
while True:
await auto_purge()
await asyncio.sleep(60)
if purge_task is None or purge_task.done():
purge_task = asyncio.create_task(purge_loop())

async def purge_loop():
try:
while True:
await auto_purge()
await asyncio.sleep(60)
except asyncio.CancelledError:
pass

async def auto_purge():
try:
# Utilise le premier développeur de la liste pour les DMs
dev_user = await bot.fetch_user(DEV_IDS[0]) if DEV_IDS else None
if not dev_user:
return
dm_channel = await dev_user.create_dm()

cutoff_time = discord.utils.utcnow() - datetime.timedelta(days=2.0)
deleted_count = 0

async for message in dm_channel.history(limit=None, before=cutoff_time):
try:
await message.delete()
deleted_count += 1
except discord.NotFound:
continue
except discord.HTTPException:
except (discord.NotFound, discord.HTTPException):
continue

except discord.HTTPException as e:
logger.error(f"Erreur lors de la purge : {e}")
except Exception as e:
logger.error(f"Erreur inattendue lors de l'auto-purge : {e}")

Expand All @@ -60,35 +57,34 @@ async def clear_command(interaction: discord.Interaction):
if not is_dev_id(interaction.user.id):
await interaction.response.send_message("❌ Vous n'avez pas la permission d'utiliser cette commande.", ephemeral=True)
return

await interaction.response.defer(ephemeral=True)

# Utilise le premier développeur de la liste pour les DMs
dev_user = await bot.fetch_user(DEV_IDS[0]) if DEV_IDS else None
if not dev_user:
await interaction.followup.send("❌ Aucun développeur configuré.", ephemeral=True)
return
dm_channel = await dev_user.create_dm()

deleted_count = 0
async for message in dm_channel.history(limit=None):
try:
await message.delete()
deleted_count += 1
except discord.NotFound:
except (discord.NotFound, discord.HTTPException):
continue
except discord.HTTPException:
continue

await interaction.followup.send(f"✅ {deleted_count} messages supprimés avec succès.", ephemeral=True)
await interaction.followup.send(f"{deleted_count} messages supprimés avec succès.", ephemeral=True)
logger.info(f"Commande /clear exécutée : {deleted_count} messages supprimés")

except discord.HTTPException as e:
logger.error(f"Erreur lors de la purge manuelle : {e}")
await interaction.followup.send(f"❌ Erreur lors de la purge : {e}", ephemeral=True)
except Exception as e:
logger.error(f"Erreur inattendue lors de la commande /clear : {e}")
await interaction.followup.send(f"❌ Erreur inattendue : {e}", ephemeral=True)
await interaction.followup.send(f"Erreur inattendue : {e}", ephemeral=True)

async def close_bot():
global purge_task
if purge_task and not purge_task.done():
purge_task.cancel()
try:
await purge_task
except asyncio.CancelledError:
pass
await bot.close()

async def run_admin_bot():
await setup_commands(bot, is_admin_bot=True)
Expand All @@ -98,7 +94,6 @@ async def run_admin_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot.")
raise SystemExit(0)
await close_bot()
logger.info("Arrêt du bot.")
6 changes: 3 additions & 3 deletions bots/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ async def run_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot.")
6 changes: 3 additions & 3 deletions bots/chatgpt_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_chatgpt_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot ChatGPT.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot ChatGPT.")
6 changes: 3 additions & 3 deletions bots/claude_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ async def run_claude_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot Claude.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Claude.")
4 changes: 2 additions & 2 deletions bots/command_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_command_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Command.")
raise SystemExit(0)
6 changes: 3 additions & 3 deletions bots/deepseek_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_deepseek_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot DeepSeek.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot DeepSeek.")
6 changes: 3 additions & 3 deletions bots/evilgpt_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_evilgpt_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot EvilGPT.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot EvilGPT.")
6 changes: 3 additions & 3 deletions bots/gemini_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_gemini_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot Gemini.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Gemini.")
6 changes: 3 additions & 3 deletions bots/glm_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_glm_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot GLM.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot GLM.")
6 changes: 3 additions & 3 deletions bots/grok_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_grok_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot Grok.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Grok.")
6 changes: 3 additions & 3 deletions bots/kimi_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_kimi_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot Kimi.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Kimi.")
6 changes: 3 additions & 3 deletions bots/llama_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_llama_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot Llama.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Llama.")
32 changes: 27 additions & 5 deletions bots/logger_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,37 @@
logger_bot = commands.Bot(command_prefix=LOGGER_PREFIX, intents=intents)
logger = setup_logging(logger_bot)

# Variable globale pour la tâche de purge
purge_task = None

@logger_bot.event
async def on_ready():
global purge_task
activity = discord.CustomActivity(name="🎛️ Monitoring AlphaLLM")
await logger_bot.change_presence(activity=activity)
await logger_bot.tree.sync()
while True:
await auto_purge()
await asyncio.sleep(60)

# Lance la tâche de purge automatique
if purge_task is None or purge_task.done():
purge_task = asyncio.create_task(purge_loop())

async def purge_loop():
try:
while True:
await auto_purge()
await asyncio.sleep(60)
except asyncio.CancelledError:
pass

async def close_bot():
global purge_task
if purge_task and not purge_task.done():
purge_task.cancel()
try:
await purge_task
except asyncio.CancelledError:
pass
await logger_bot.close()

async def auto_purge():
try:
Expand Down Expand Up @@ -161,7 +184,6 @@ async def run_logger_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await logger_bot.close()
finally:
await close_bot()
logger.info("Arrêt du bot Logger.")
raise SystemExit(0)
4 changes: 2 additions & 2 deletions bots/mistral_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_mistral_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Mistral.")
raise SystemExit(0)
4 changes: 2 additions & 2 deletions bots/perplexity_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_perplexity_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Perplexity.")
raise SystemExit(0)
6 changes: 3 additions & 3 deletions bots/phi_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_phi_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
logger.info("Arrêt du bot Phi.")
raise SystemExit(0)
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Phi.")
4 changes: 2 additions & 2 deletions bots/qwen_bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ async def run_qwen_bot():
logger.error(f"Erreur de connexion : {e}")
except Exception as e:
logger.error(f"Erreur inattendue : {e}")
await bot.close()
finally:
if not bot.is_closed():
await bot.close()
logger.info("Arrêt du bot Qwen.")
raise SystemExit(0)
9 changes: 4 additions & 5 deletions commands/admin_commands/restart.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ async def restart(interaction: discord.Interaction):
await interaction.followup.send("🛑 Redémarrage complet du bot...", ephemeral=True)
logger.info("Demande de redémarrage reçue")

if bot.is_closed():
return

await bot.close()
sys.exit(0)
with open("stop.json", "w") as f:
json.dump({"COMMAND": "RESTART", "timestamp": datetime.datetime.now().isoformat()}, f)

logger.info("Fichier stop.json créé, le processus principal va redémarrer le bot.")
8 changes: 2 additions & 6 deletions commands/admin_commands/stop.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,5 @@ async def stop(interaction: discord.Interaction):

with open("stop.json", "w") as f:
json.dump({"COMMAND": "STOP", "timestamp": datetime.datetime.now().isoformat()}, f)

if bot.is_closed():
return

await bot.close()
sys.exit(0)

logger.info("Fichier stop.json créé, le processus principal va arrêter le bot.")
Loading
Loading