1
+ import discord
2
+ from discord import app_commands
3
+ from discord .ext import commands
4
+ from loguru import logger
5
+ import json
6
+ import pathlib as path
7
+ from tux .utils .constants import Constants as CONST
8
+ Path = path .Path
9
+ storage_file = Path ("config/settings.json" )
10
+ storage = json .loads (storage_file .read_text ())
11
+
12
+
13
+ class Note (commands .Cog ):
14
+ def __init__ (self , bot : commands .Bot ) -> None :
15
+ self .bot = bot
16
+ group = app_commands .Group (name = "note" , description = "Note Commands" )
17
+ @staticmethod
18
+ def create_embed (
19
+ title : str = "" , description : str = "" , color : int = CONST .COLORS ["SUCCESS" ]
20
+ ) -> discord .Embed :
21
+ """Utility method for creating a basic embed structure."""
22
+ embed = discord .Embed (title = title , description = description , color = color )
23
+ embed .set_author (name = "Info" , icon_url = "https://cdn3.emoji.gg/emojis/3228-info.png" )
24
+ return embed
25
+
26
+ @group .command (name = "write" , description = "" )
27
+
28
+ async def write (self , interaction : discord .Interaction , user : discord .Member , note : str ):
29
+ user_id = user .id
30
+ data = {
31
+ "user" : user_id ,
32
+ "note" : note
33
+
34
+
35
+ }
36
+
37
+ embed = self .create_embed ("Note Added" , f"Note added for { user .display_name } " )
38
+
39
+
40
+ with Path .open (storage_file , "w" ) as file :
41
+ json .dump (data ,file , indent = 4 )
42
+ logger .info ("Note added" )
43
+ await interaction .response .send_message (embed = embed )
44
+
45
+ @group .command (name = "read" , description = "" )
46
+ async def read (self , interaction : discord .Interaction , user : discord .Member ):
47
+ user_id = user .id
48
+ with Path .open (storage_file , "r" ) as file :
49
+ data = json .load (file )
50
+ user_note = next ((entry ["note" ] for entry in data if entry ["user" ] == user_id ), None )
51
+
52
+ if user_note :
53
+ embed = self .create_embed (
54
+ title = "Note Found" ,
55
+ description = f"Note for { user .display_name } : { user_note } " ,
56
+ color = CONST .COLORS ["INFO" ]
57
+ )
58
+ await interaction .response .send_message (embed = embed )
59
+ else :
60
+ embed = self .create_embed (
61
+ title = "Note Not Found" ,
62
+ description = f"No note found for { user .display_name } " ,
63
+ color = CONST .COLORS ["ERROR" ],
64
+
65
+ )
66
+ await interaction .response .send_message (embed = embed )
67
+ @group .command (name = "delete" , description = "Delete a note." )
68
+ async def delete (self , interaction : discord .Interaction , user : discord .Member ):
69
+ user_id = user .id
70
+ with Path .open (storage_file , "r" ) as file :
71
+ data = json .load (file )
72
+ updated_data = [entry for entry in data if entry ["user" ] != user_id ]
73
+ if len (data ) == len (updated_data ):
74
+ embed = self .create_embed (
75
+ title = "Note Delete Error" ,
76
+ description = f"No note found for { user .display_name } !" ,
77
+ color = CONST .COLORS ["ERROR" ]
78
+ )
79
+ logger .error ("Note delete error - Note not found" )
80
+ await interaction .response .send_message (embed = embed )
81
+ else :
82
+ with Path .open (storage_file , "w" ) as file :
83
+ json .dump (updated_data , file , indent = 4 )
84
+
85
+ embed = self .create_embed (
86
+ title = "Note Deleted" ,
87
+ description = f"Note deleted for { user .display_name } ." ,
88
+ color = CONST .COLORS ["SUCCESS" ]
89
+ )
90
+ logger .info ("Note deleted" )
91
+ await interaction .response .send_message (embed = embed )
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+ async def setup (bot : commands .Bot ) -> None :
101
+ await bot .add_cog (Note (bot ))
0 commit comments