@@ -170,48 +170,71 @@ async def reject(self, user, name, summary):
170170
171171 @discord .slash_command (name = 'list' , description = "Provides a list of all pending drafts" )
172172 async def list (self , ctx : discord .ApplicationContext ):
173- await ctx .defer ()
174- master_list = []
175- pages = []
176- master_list .append (pages )
177- counter = 0
178-
179- drafts = self .db .get_all_drafts ()
180- for page , draft in drafts .items ():
181- name = page [page .find ('/' , page .find ('/' ) + 1 ) + 1 :]
182- user = page [page .find (':' ) + 1 :page .find ('/' )]
183-
173+ await ctx .defer () # Remove ephemeral flag
174+
175+ try :
176+ master_list = []
177+ pages = []
178+ master_list .append (pages )
179+ counter = 0
180+
181+ drafts = self .db .get_all_drafts ()
182+ if not drafts :
183+ await ctx .respond ("No drafts found." )
184+ return
185+
186+ # Pre-fetch all user data to avoid multiple API calls
187+ users = set (page [page .find (':' ) + 1 :page .find ('/' )] for page in drafts .keys ())
188+ user_data = {}
184189 user_params = {
185190 "action" : "query" ,
186191 "list" : "users" ,
187- "ususers" : user ,
192+ "ususers" : "|" . join ( users ) ,
188193 "format" : "json"
189194 }
190195 user_request = requests .get ("https://2b2t.miraheze.org/w/api.php" , params = user_params )
191196 user_json = user_request .json ()
192- user_id = str (user_json ['query' ]['users' ][0 ]['userid' ])
193-
194- embed = discord .Embed (
195- title = 'Draft: ' + name ,
196- url = draft .url ,
197- color = discord .Color .from_rgb (36 , 255 , 0 )
198- )
199- embed .set_author (
200- name = user ,
201- url = f"https://2b2t.miraheze.org/wiki/User:{ user .replace (' ' , '_' )} " ,
202- icon_url = f"https://static.miraheze.org/2b2twiki/avatars/2b2twiki_{ user_id } _l.png"
203- )
204-
205- if len (master_list [counter ]) < 10 :
206- master_list [counter ].append (embed )
207- else :
208- counter += 1
209- new_list = []
210- master_list .append (new_list )
211- master_list [counter ].append (embed )
212-
213- for page_list in master_list :
214- await ctx .respond (embeds = page_list )
197+ for user_info in user_json ['query' ]['users' ]:
198+ user_data [user_info ['name' ]] = str (user_info ['userid' ])
199+
200+ # Create embeds
201+ for page , draft in drafts .items ():
202+ name = page [page .find ('/' , page .find ('/' ) + 1 ) + 1 :]
203+ user = page [page .find (':' ) + 1 :page .find ('/' )]
204+
205+ user_id = user_data .get (user , "0" ) # Use cached user data
206+
207+ embed = discord .Embed (
208+ title = 'Draft: ' + name ,
209+ url = draft .url ,
210+ color = discord .Color .from_rgb (36 , 255 , 0 )
211+ )
212+ embed .set_author (
213+ name = user ,
214+ url = f"https://2b2t.miraheze.org/wiki/User:{ user .replace (' ' , '_' )} " ,
215+ icon_url = f"https://static.miraheze.org/2b2twiki/avatars/2b2twiki_{ user_id } _l.png"
216+ )
217+
218+ if len (master_list [counter ]) < 10 :
219+ master_list [counter ].append (embed )
220+ else :
221+ counter += 1
222+ new_list = []
223+ master_list .append (new_list )
224+ master_list [counter ].append (embed )
225+
226+ # Send responses
227+ first = True
228+ for page_list in master_list :
229+ if page_list : # Only send if there are embeds
230+ if first :
231+ await ctx .respond (embeds = page_list )
232+ first = False
233+ else :
234+ await ctx .followup .send (embeds = page_list )
235+
236+ except Exception as e :
237+ await ctx .respond (f"Error listing drafts: { str (e )} " )
215238
216239 @discord .slash_command (name = 'debug' , description = 'Intended for bot developers only' )
217240 @commands .has_role (1159901879417974795 )
0 commit comments