99]
1010
1111
12+ def project_description (res : requests .Response ):
13+ projects = [f" * ({ r ['id' ]} ) : { r ['title' ]} - (Created: { r ['created_at' ]} )\n " +
14+ " * Description: " + str (r ["description" ]) +
15+ f"\n * Owners: { ', ' .join ('<@' + str (a ) + '>' for a in r ['project_owners' ])if r ['project_owners' ] else '**Warning No Project Owners**' } "
16+ f"\n * Members: { ', ' .join ('<@' + str (a ) + '>' for a in r ['project_members' ]) if r ['project_members' ] else 'No Other Members' } "
17+ f"\n * Tags: { ', ' .join (str (a ) for a in r ['tags' ]) if r ['tags' ] else 'No Tags' } "
18+ for r in res .json ()]
19+ projects_description = "\n \n " .join (projects )
20+ return projects_description
21+
22+
1223class ProjectAdminDashboard (discord .ui .View ):
1324 def __init__ (
1425 self ,
@@ -20,24 +31,66 @@ async def list_projects_(self, interaction: discord.Interaction, button):
2031 res = requests .get (SERVER_IP + "/project/all" , params = {"count" : 10 })
2132 if res .status_code == 200 :
2233 logging .debug ("List project" )
23- projects = [f" * ({ r ['id' ]} ) : { r ['title' ]} - (Created: { r ['created_at' ]} )\n " +
24- " * Description: " + str (r ["description" ]) +
25- f"\n * Owners: { ', ' .join ('<@' + str (a ) + '>' for a in r ['project_owners' ])if r ['project_owners' ] else '**Warning No Project Owners**' } "
26- f"\n * Members: { ', ' .join ('<@' + str (a ) + '>' for a in r ['project_members' ]) if r ['project_members' ] else 'No Other Members' } "
27- f"\n * Tags: { ', ' .join (str (a ) for a in r ['tags' ]) if r ['tags' ] else 'No Tags' } "
28- for r in res .json ()]
34+ projects_description = project_description (res )
35+ await interaction .response .edit_message (
36+ embed = discord .Embed (
37+ title = "Projects Summary:" ,
38+ description = projects_description
39+ ),
40+ view = None ,
41+ )
42+ else :
43+ await interaction .response .edit_message (
44+ embed = error_msg (
45+ title = "List Project Error" ,
46+ msg = f"Could not get projects { res .reason } "
47+ ),
48+ view = None ,
49+ )
50+
51+ @discord .ui .button (style = discord .ButtonStyle .green , label = 'List Project: Filter Owner' ,)
52+ async def list_projects_owner_ (self , interaction : discord .Interaction , button ):
53+ await interaction .response .edit_message (
54+ embed = discord .Embed (
55+ title = "Select User:" ,
56+ description = "Select User - get which projects they own."
57+ ),
58+ view = ProjectFilterOwner (),
59+ )
60+
61+
62+ class ProjectFilterOwner (discord .ui .View ):
63+ def __init__ (self , * , timeout = 180 ):
64+ super ().__init__ (timeout = timeout )
65+
66+ @discord .ui .select (
67+ cls = discord .ui .UserSelect ,
68+ min_values = 1 ,
69+ max_values = 1 ,
70+ )
71+ async def select_ (
72+ self ,
73+ interaction : discord .Interaction ,
74+ select : discord .ui .UserSelect ):
75+ id = select .values [0 ].id
76+ logging .debug (f"Project filter owner user { id } " )
77+ res = requests .get (
78+ SERVER_IP + "/project/owned/discord/full/filtered" , params = {"discord_id" : id , "count" : 10 , })
79+ if res .status_code == 200 :
80+ logging .debug ("List project" )
81+ projects_description = project_description (res )
2982 await interaction .response .edit_message (
3083 embed = discord .Embed (
3184 title = "Projects Summary:" ,
32- description = " \n \n " . join ( projects )
85+ description = projects_description ,
3386 ),
3487 view = None ,
3588 )
3689 else :
3790 await interaction .response .edit_message (
3891 embed = error_msg (
3992 title = "List Project Error" ,
40- description = f"Could not get projects { res .reason } "
93+ msg = f"Could not get projects { res .reason } " ,
4194 ),
4295 view = None ,
4396 )
0 commit comments