1- # GPL-v3
1+ """GPL-3.0 License"""
2+
3+ import uuid
4+ import traceback
5+ import datetime
6+ import os
27
38import disnake
4- import uuid , traceback , datetime , os
59
610from disnake .ext import commands
711
812
913class NotOwner (commands .CheckFailure ):
10- pass
14+ """Exception raised when a user is not the bot owner."""
15+ def __init__ (self , message : str = "You are not the bot owner." ):
16+ super ().__init__ (message )
1117
1218
1319class ErrorsModule (commands .Cog ):
20+ """Cog for handling errors in commands and interactions."""
1421 def __init__ (self , bot ):
1522 self .bot = bot
1623
1724 ### Triggers when an error occurs in a command ###
1825
1926 @commands .Cog .listener ()
20- async def on_command_error (self , ctx : commands . Context , error : Exception ):
21- errEmbed = disnake . Embed ( title = "Ошибка" , color = disnake . Color . red ())
22- user_avatar = (
23- ctx . author . display_avatar . url
24- if ctx . author . display_avatar
25- else self . bot . user . display_avatar . url
26- )
27- errEmbed . set_footer ( text = f" { ctx . author . name } " , icon_url = user_avatar )
27+ async def on_command_error (
28+ self ,
29+ ctx : commands . Context ,
30+ error : Exception
31+ ) -> None :
32+ """Handles errors in commands."""
33+
34+ err_embed = self . bot . bot_embed ( ctx )
2835 if isinstance (error , NotOwner ):
29- errEmbed .description = "Вы не разработчик бота."
30- return await ctx .reply (embed = errEmbed , delete_after = 40 )
36+
37+ err_embed .description = "Вы не разработчик бота."
38+ return await ctx .reply (embed = err_embed , delete_after = 40 )
3139
3240 ### Triggers when an error occurs in a slash command ###
3341
3442 @commands .Cog .listener ()
3543 async def on_slash_command_error (
36- self , inter : disnake .ApplicationCommandInteraction , error : Exception
37- ):
38-
39- errEmbed = disnake .Embed (title = "Ошибка" , color = disnake .Color .red ())
40- user_avatar = (
41- inter .author .display_avatar .url
42- if inter .author .display_avatar
43- else self .bot .user .display_avatar .url
44- )
45- errEmbed .set_footer (text = f"{ inter .author .name } " , icon_url = user_avatar )
44+ self : any , inter : disnake .ApplicationCommandInteraction , error : Exception
45+ ) -> None :
46+ """Handles errors in slash commands."""
47+
48+ err_embed = self .bot .bot_embed (inter )
4649
4750 if isinstance (error , commands .NoPrivateMessage ):
48- errEmbed .description = "Эта команда недоступна в личных сообщениях."
49- return await inter .response .send_message (embed = errEmbed , ephemeral = True )
51+ err_embed .description = "Эта команда недоступна в личных сообщениях."
52+ return await inter .response .send_message (embed = err_embed , ephemeral = True )
5053
5154 if isinstance (error , disnake .Forbidden ):
52- errEmbed .description = "У меня нет прав для выполнения этого действия."
53- return await inter .response .send_message (embed = errEmbed , ephemeral = True )
55+ err_embed .description = "У меня нет прав для выполнения этого действия."
56+ return await inter .response .send_message (embed = err_embed , ephemeral = True )
5457
5558 if isinstance (error , commands .MissingPermissions ):
56- errEmbed .description = "У вас нет прав для использования этой команды."
57- return await inter .response .send_message (embed = errEmbed , ephemeral = True )
59+ err_embed .description = "У вас нет прав для использования этой команды."
60+ return await inter .response .send_message (embed = err_embed , ephemeral = True )
5861
5962 if isinstance (error , commands .CheckFailure ):
60- errEmbed .description = "Вы не можете использовать эту команду здесь."
61- return await inter .response .send_message (embed = errEmbed , ephemeral = True )
63+ err_embed .description = "Вы не можете использовать эту команду здесь."
64+ return await inter .response .send_message (embed = err_embed , ephemeral = True )
6265
6366 error_id = str (uuid .uuid4 ())[:8 ]
6467 date_str = datetime .datetime .now ().strftime ("%Y-%m-%d_%H-%M-%S" )
@@ -67,11 +70,14 @@ async def on_slash_command_error(
6770 os .makedirs ("logs" , exist_ok = True )
6871 full_path = os .path .join ("logs" , filename )
6972
73+ def ifdm (inter ):
74+ return inter .guild .name if inter .guild else 'DM'
75+
7076 with open (full_path , "w" , encoding = "utf-8" ) as f :
7177 f .write (f"=== Ошибка { error_id } ({ date_str } ) ===\n " )
7278 f .write (f"Пользователь: { inter .author } (ID: { inter .author .id } )\n " )
7379 f .write (
74- f"Гильдия: { inter . guild . name if inter . guild else 'DM' } (ID: { inter . guild . id if inter . guild else 'DM' } )\n "
80+ f"Гильдия: { ifdm ( inter ) } (ID: { ifdm ( inter ) } )\n "
7581 )
7682 f .write (f"Команда: { inter .application_command .name } \n \n " )
7783 traceback .print_exception (type (error ), error , error .__traceback__ , file = f )
@@ -80,12 +86,17 @@ async def on_slash_command_error(
8086 f"[ERROR] ID={ error_id } | { type (error ).__name__ } : { error } (сохранено в { full_path } )"
8187 )
8288
83- errEmbed .description = f"Произошла неизвестная ошибка.\n Сообщите UUID разработчику.\n \n UUID: `{ error_id } "
89+ err_embed .description = (
90+ f"Произошла неизвестная ошибка.\n "
91+ f"Сообщите UUID разработчику.\n \n "
92+ f"UUID: `{ error_id } "
93+ )
8494 try :
85- await inter .response .send_message (embed = errEmbed , ephemeral = True )
95+ await inter .response .send_message (embed = err_embed , ephemeral = True )
8696 except disnake .InteractionResponded :
87- await inter .followup .send (embed = errEmbed , ephemeral = True )
97+ await inter .followup .send (embed = err_embed , ephemeral = True )
8898
8999
90100def setup (bot ):
101+ """Setup function to connect ErrorsModule"""
91102 bot .add_cog (ErrorsModule (bot ))
0 commit comments