Skip to content

Commit c615d24

Browse files
committed
feature: more advanced error handling
1 parent 79aba9b commit c615d24

File tree

1 file changed

+110
-73
lines changed

1 file changed

+110
-73
lines changed

bot.py

Lines changed: 110 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,11 @@ async def update_presence():
102102
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f"les nombres rigolos sur {len(bot.guilds)} serveurs."))
103103
await asyncio.sleep(3600)
104104

105+
async def send_error_embed(ctx, message, error):
106+
embed = discord.Embed(title="Erreur", description=message, color=discord.Color.red())
107+
embed.add_field(name="Detail", value=str(error), inline=False)
108+
await ctx.send(embed=embed)
109+
105110
@bot.event
106111
async def on_ready():
107112
await bot.change_presence(activity=discord.Activity(type=discord.ActivityType.watching, name=f"les nombres rigolos sur {len(bot.guilds)} serveurs."))
@@ -166,114 +171,146 @@ async def on_message(message):
166171

167172
@bot.tree.command(name="ping", description="Renvoie la latence du bot.")
168173
async def ping(ctx):
169-
logger.info(f"Commande ping utilisée sur {ctx.guild.id}")
170-
await ctx.send(f"Pong ! Latence: {round(bot.latency * 1000)}ms")
174+
try:
175+
logger.info(f"Commande ping utilisée sur {ctx.guild.id}")
176+
await ctx.send(f"Pong ! Latence: {round(bot.latency * 1000)}ms")
177+
except Exception as e:
178+
logger.error(f"Erreur lors de l'envoi de la commande ping: {e}")
179+
await send_error_embed(ctx, "Erreur lors de l'envoi de la commande `ping`", e)
171180

172181
@bot.tree.command(name="info", description="Affiche le cluster, la shard et l'uptime du bot.")
173182
async def info(interaction: discord.Interaction):
174-
logger.info(f"Commande info utilisée par {interaction.user}")
175-
data = load_data()
176-
177-
region = data.get("info", {}).get("region", "N/A")
178-
cluster = data.get("info", {}).get("cluster", "N/A")
179-
shard = data.get("info", {}).get("shard", "N/A")
180-
uptime = get_uptime()
183+
try:
184+
logger.info(f"Commande info utilisée par {interaction.user}")
185+
data = load_data()
186+
187+
region = data.get("info", {}).get("region", "N/A")
188+
cluster = data.get("info", {}).get("cluster", "N/A")
189+
shard = data.get("info", {}).get("shard", "N/A")
190+
uptime = get_uptime()
181191

182-
embed = discord.Embed(title="Informations du Bot", color=discord.Color.green())
183-
embed.add_field(name="Region", value=region, inline=True)
184-
embed.add_field(name="Cluster", value=cluster, inline=True)
185-
embed.add_field(name="Shard", value=shard, inline=True)
186-
embed.add_field(name="Uptime", value=uptime, inline=True)
192+
embed = discord.Embed(title="Informations du Bot", color=discord.Color.green())
193+
embed.add_field(name="Region", value=region, inline=True)
194+
embed.add_field(name="Cluster", value=cluster, inline=True)
195+
embed.add_field(name="Shard", value=shard, inline=True)
196+
embed.add_field(name="Uptime", value=uptime, inline=True)
187197

188-
await interaction.response.send_message(embed=embed)
198+
await interaction.response.send_message(embed=embed)
199+
except Exception as e:
200+
logger.error(f"Erreur lors de l'envoi de la commande info: {e}")
201+
await send_error_embed(interaction, "Erreur lors de l'envoi de la commande `info`", e)
189202

190203
@bot.tree.command(name="leaderboard_server", description="Affiche le classement des utilisateurs avec le plus de 69 sur ce serveur.")
191204
async def leaderboard_server(interaction: discord.Interaction):
192-
logger.info(f"Commande leaderboard_server utilisée sur {interaction.guild.id}")
193-
data = load_data()
194-
guild_id = str(interaction.guild.id)
205+
try:
206+
logger.info(f"Commande leaderboard_server utilisée sur {interaction.guild.id}")
207+
data = load_data()
208+
guild_id = str(interaction.guild.id)
195209

196-
if guild_id not in data['stats']:
197-
logger.warning(f"Aucune donnée pour le serveur {guild_id}")
198-
await interaction.response.send_message("Aucune donnée disponible pour ce serveur.")
199-
return
210+
if guild_id not in data['stats']:
211+
logger.warning(f"Aucune donnée pour le serveur {guild_id}")
212+
await interaction.response.send_message("Aucune donnée disponible pour ce serveur.")
213+
return
200214

201-
leaderboard = sorted(data['stats'][guild_id].items(), key=lambda x: x[1]['count_69'], reverse=True)
202-
embed = discord.Embed(title="Classement des utilisateurs avec le plus de 69 sur ce serveur", color=discord.Color.blue())
215+
leaderboard = sorted(data['stats'][guild_id].items(), key=lambda x: x[1]['count_69'], reverse=True)
216+
embed = discord.Embed(title="Classement des utilisateurs avec le plus de 69 sur ce serveur", color=discord.Color.blue())
203217

204-
for user_id, stats in leaderboard[:10]:
205-
user = await bot.fetch_user(int(user_id))
206-
embed.add_field(name=user.display_name, value=f"{stats['count_69']} fois", inline=False)
218+
for user_id, stats in leaderboard[:10]:
219+
user = await bot.fetch_user(int(user_id))
220+
embed.add_field(name=user.display_name, value=f"{stats['count_69']} fois", inline=False)
207221

208-
await interaction.response.send_message(embed=embed)
222+
await interaction.response.send_message(embed=embed)
223+
except Exception as e:
224+
logger.error(f"Erreur lors de l'envoi de la commande leaderboard_server: {e}")
225+
await send_error_embed(interaction, "Erreur lors de l'envoi de la commande `leaderboard_server`", e)
209226

210227
@bot.tree.command(name="leaderboard_global", description="Affiche le classement global des utilisateurs avec le plus de 69.")
211228
async def leaderboard_global(interaction: discord.Interaction):
212-
logger.info(f"Commande leaderboard_global utilisée par {interaction.user}")
213-
data = load_data()
214-
global_stats = {}
229+
try:
230+
logger.info(f"Commande leaderboard_global utilisée par {interaction.user}")
231+
data = load_data()
232+
global_stats = {}
215233

216-
for guild_stats in data['stats'].values():
217-
for user_id, stats in guild_stats.items():
218-
if isinstance(stats, dict) and 'count_69' in stats:
219-
if user_id not in global_stats:
220-
global_stats[user_id] = 0
221-
global_stats[user_id] += stats['count_69']
234+
for guild_stats in data['stats'].values():
235+
for user_id, stats in guild_stats.items():
236+
if isinstance(stats, dict) and 'count_69' in stats:
237+
if user_id not in global_stats:
238+
global_stats[user_id] = 0
239+
global_stats[user_id] += stats['count_69']
222240

223-
leaderboard = sorted(global_stats.items(), key=lambda x: x[1], reverse=True)
224-
embed = discord.Embed(title="Classement global des utilisateurs avec le plus de 69", color=discord.Color.gold())
241+
leaderboard = sorted(global_stats.items(), key=lambda x: x[1], reverse=True)
242+
embed = discord.Embed(title="Classement global des utilisateurs avec le plus de 69", color=discord.Color.gold())
225243

226-
for user_id, count in leaderboard[:10]:
227-
user = await bot.fetch_user(int(user_id))
228-
embed.add_field(name=user.display_name, value=f"{count} fois", inline=False)
244+
for user_id, count in leaderboard[:10]:
245+
user = await bot.fetch_user(int(user_id))
246+
embed.add_field(name=user.display_name, value=f"{count} fois", inline=False)
229247

230-
await interaction.response.send_message(embed=embed)
248+
await interaction.response.send_message(embed=embed)
249+
except Exception as e:
250+
logger.error(f"Erreur lors de l'envoi de la commande leaderboard_global: {e}")
251+
await send_error_embed(interaction, "Erreur lors de l'envoi de la commande `leaderboard_global`", e)
231252

232253
@bot.tree.command(name="config", description="Affiche ou configure les paramètres du bot.")
233254
async def config(interaction: discord.Interaction):
234-
logger.info(f"Commande config utilisée sur {interaction.guild.id}")
235-
data = load_data()
236-
guild_id = str(interaction.guild.id)
237-
config = get_guild_config(guild_id, data)
255+
try:
256+
logger.info(f"Commande config utilisée sur {interaction.guild.id}")
257+
data = load_data()
258+
guild_id = str(interaction.guild.id)
259+
config = get_guild_config(guild_id, data)
238260

239-
embed = discord.Embed(title="Configuration du Bot", color=discord.Color.blue())
240-
embed.add_field(name="Envoi des messages", value="Public" if config['send_public'] else "Privé", inline=True)
241-
embed.add_field(name="Envoi des messages activé", value="Oui" if config['send_message'] else "Non", inline=True)
242-
embed.add_field(name="Réactions activées", value="Oui" if config['enable_reactions'] else "Non", inline=True)
243-
await interaction.response.send_message(embed=embed)
261+
embed = discord.Embed(title="Configuration du Bot", color=discord.Color.blue())
262+
embed.add_field(name="Envoi des messages", value="Public" if config['send_public'] else "Privé", inline=True)
263+
embed.add_field(name="Envoi des messages activé", value="Oui" if config['send_message'] else "Non", inline=True)
264+
embed.add_field(name="Réactions activées", value="Oui" if config['enable_reactions'] else "Non", inline=True)
265+
await interaction.response.send_message(embed=embed)
266+
except Exception as e:
267+
logger.error(f"Erreur lors de l'envoi de la commande config: {e}")
268+
await send_error_embed(interaction, "Erreur lors de l'envoi de la commande `config`", e)
244269

245270
@bot.tree.command(name="set_send_public", description="Configure si les messages doivent être envoyés en public ou en privé.")
246271
@app_commands.describe(send_public="Définir si les messages sont envoyés en public (True) ou en privé (False).")
247272
async def set_send_public(interaction: discord.Interaction, send_public: bool):
248-
logger.info(f"Modification de send_public à {send_public} sur {interaction.guild.id}")
249-
data = load_data()
250-
guild_id = str(interaction.guild.id)
251-
config = get_guild_config(guild_id, data)
252-
config['send_public'] = send_public
253-
save_data(data)
254-
await interaction.response.send_message(f"Envoi des messages {'public' if send_public else 'privé'} configuré.")
273+
try:
274+
logger.info(f"Modification de send_public à {send_public} sur {interaction.guild.id}")
275+
data = load_data()
276+
guild_id = str(interaction.guild.id)
277+
config = get_guild_config(guild_id, data)
278+
config['send_public'] = send_public
279+
save_data(data)
280+
await interaction.response.send_message(f"Envoi des messages {'public' if send_public else 'privé'} configuré.")
281+
except Exception as e:
282+
logger.error(f"Erreur lors de la modification de send_public: {e}")
283+
await send_error_embed(interaction, "Erreur lors de la modification de `send_public`", e)
255284

256285
@bot.tree.command(name="set_send_message", description="Active ou désactive l'envoi des messages.")
257286
@app_commands.describe(send_message="Définir si l'envoi des messages est activé (True) ou désactivé (False).")
258287
async def set_send_message(interaction: discord.Interaction, send_message: bool):
259-
logger.info(f"Modification de send_message à {send_message} sur {interaction.guild.id}")
260-
data = load_data()
261-
guild_id = str(interaction.guild.id)
262-
config = get_guild_config(guild_id, data)
263-
config['send_message'] = send_message
264-
save_data(data)
265-
await interaction.response.send_message(f"Envoi des messages {'activé' if send_message else 'désactivé'}.")
288+
try:
289+
logger.info(f"Modification de send_message à {send_message} sur {interaction.guild.id}")
290+
data = load_data()
291+
guild_id = str(interaction.guild.id)
292+
config = get_guild_config(guild_id, data)
293+
config['send_message'] = send_message
294+
save_data(data)
295+
await interaction.response.send_message(f"Envoi des messages {'activé' if send_message else 'désactivé'}.")
296+
except Exception as e:
297+
logger.error(f"Erreur lors de la modification de send_message: {e}")
298+
await send_error_embed(interaction, "Erreur lors de la modification de `send_message`", e)
266299

267300
@bot.tree.command(name="set_enable_reactions", description="Active ou désactive les réactions.")
268301
@app_commands.describe(enable_reactions="Activer ou désactiver les réactions (True ou False).")
269302
async def set_enable_reactions(interaction: discord.Interaction, enable_reactions: bool):
270-
logger.info(f"Modification de enable_reactions à {enable_reactions} sur {interaction.guild.id}")
271-
data = load_data()
272-
guild_id = str(interaction.guild.id)
273-
config = get_guild_config(guild_id, data)
274-
config['enable_reactions'] = enable_reactions
275-
save_data(data)
276-
await interaction.response.send_message(f"Réactions {'activées' if enable_reactions else 'désactivées'}.")
303+
try:
304+
logger.info(f"Modification de enable_reactions à {enable_reactions} sur {interaction.guild.id}")
305+
data = load_data()
306+
guild_id = str(interaction.guild.id)
307+
config = get_guild_config(guild_id, data)
308+
config['enable_reactions'] = enable_reactions
309+
save_data(data)
310+
await interaction.response.send_message(f"Réactions {'activées' if enable_reactions else 'désactivées'}.")
311+
except Exception as e:
312+
logger.error(f"Erreur lors de la modification de enable_reactions: {e}")
313+
await send_error_embed(interaction, "Erreur lors de la modification de `enable_reactions`", e)
277314

278315
@bot.event
279316
async def on_command_error(ctx, error):

0 commit comments

Comments
 (0)