5
5
from . import http
6
6
from . import model
7
7
from .utils import manage_commands
8
+ from inspect import iscoroutinefunction
8
9
9
10
10
11
class SlashCommand :
@@ -231,7 +232,7 @@ def wrapper(cmd):
231
232
return cmd
232
233
return wrapper
233
234
234
- def process_options (self , guild : discord .Guild , options : list , auto_convert : dict ) -> list :
235
+ async def process_options (self , guild : discord .Guild , options : list , auto_convert : dict ) -> list :
235
236
"""
236
237
Processes Role, User, and Channel option types to discord.py's models.
237
238
@@ -248,7 +249,7 @@ def process_options(self, guild: discord.Guild, options: list, auto_convert: dic
248
249
return [x ["value" ] for x in options ]
249
250
if not auto_convert :
250
251
return [x ["value" ] for x in options ]
251
- converters = [guild .get_member , guild .get_channel , guild .get_role ]
252
+ converters = [guild .fetch_member , guild .get_channel , guild .get_role ]
252
253
types = {
253
254
"user" : 0 ,
254
255
"USER" : 0 ,
@@ -273,7 +274,9 @@ def process_options(self, guild: discord.Guild, options: list, auto_convert: dic
273
274
to_return .append (selected ["value" ])
274
275
continue
275
276
loaded_converter = converters [types [auto_convert [selected ["name" ]]]]
276
- to_return .append (loaded_converter (int (selected ["value" ])))
277
+ to_return .append (await loaded_converter (int (selected ["value" ]))) \
278
+ if iscoroutinefunction (loaded_converter ) else \
279
+ to_return .append (loaded_converter (int (selected ["value" ])))
277
280
return to_return
278
281
279
282
async def on_socket_response (self , msg ):
@@ -296,7 +299,7 @@ async def on_socket_response(self, msg):
296
299
return
297
300
if selected_cmd ["has_subcommands" ]:
298
301
return await self .handle_subcommand (ctx , to_use )
299
- args = self .process_options (ctx .guild , to_use ["data" ]["options" ], selected_cmd ["auto_convert" ]) \
302
+ args = await self .process_options (ctx .guild , to_use ["data" ]["options" ], selected_cmd ["auto_convert" ]) \
300
303
if "options" in to_use ["data" ] else []
301
304
self .logger .debug (f"Command { to_use ['data' ]['name' ]} invoked." )
302
305
await selected_cmd ["func" ](ctx , * args )
0 commit comments