from typing import List import disnake from disnake import Option, OptionType, OptionChoice from disnake.ext import commands from lib import ListGenerator from lib import logger from lib import play_audio class Testing(commands.Cog, name='Testing'): def __init__(self, bot): self.bot = bot # defining bot as global var in class @commands.Cog.listener() # this is a decorator for events/listeners async def on_ready(self): logger.info(f'Cog {__name__.split(".")[1]} is ready!.') @commands.slash_command(name="play_audio", description="Make possible playing audio by command", options=[ Option(name="audio", type=OptionType.string, required=True ) ]) async def playaudio(self, inter: disnake.ApplicationCommandInteraction, audio: str ): if inter.author.voice is not None: await inter.response.send_message(f'Played {audio}', ephemeral=True) await play_audio(audio, self.bot, inter.author.voice.channel) else: await inter.response.send_message('You`re not in voice', ephemeral=True) @playaudio.autocomplete('audio') async def list_to_play(self, inter: disnake.ApplicationCommandInteraction, current: str) -> List[OptionChoice]: _def_iter = ListGenerator('audio') _def_dict: dict = {} for f in _def_iter: _def_dict[f.name] = f'{f.path}/{f.name}' _user_dict: dict = {} try: _user_iter = ListGenerator(f'audio/{inter.author.id}') for f in _user_iter: _user_dict[f.name] = f'{f.path}/{f.name}' # user_dict = [] # for _track in user_list: except IndexError: pass _dict = {} _dict.update(_def_dict) _dict.update(_user_dict) return [ OptionChoice(name=choice, value=f'{_dict[choice]}') for choice in _dict if current.lower() in choice.lower() ] def setup(bot): # an extension must have a setup function bot.add_cog(Testing(bot)) # adding a cog