Сделал choice, который будет данные с базы данных для использование в выборах
conn = sqlite3.connect('music.db')
cursor = conn.cursor()
cursor.execute("SELECT name FROM music")
result = cursor.fetchall()
audio_names = [row[0] for row in result]
Так же сделал команду для добавление и удаление списка
При добавлении или удаление названия из списка, choice не обновляется, то есть если в базе данных были " soaked" и "яблоко" то после удаления или добавление в список какое то новое название, то при choice все еще были " soaked" и "яблоко". При проверке узнал что при запуске бота, он получается данные и все, больше он не изменяет. Приходится перезапускать бота, пробывал так же while True. Выводила ошибка
async def update_audio_names():
global audio_names
while True:
await asyncio.sleep(1) # Пауза в 1 секунду
conn = sqlite3.connect('music.db')
cursor = conn.cursor()
cursor.execute("SELECT name FROM music")
result = cursor.fetchall()
audio_names = [row[0] for row in result]
conn.close()
Ошибка
NameError: name 'audio_names' is not defined
Мне нужно сделать, чтобы при удаление или добавление в список название, то при вводе команды где есть choice то он был актулальным, а не те данные которые сохранились при запуске бота
Один из кодов в choice
@commands.slash_command(name="a", description="Запустить звук")
async def a(self, ctx, название = discord.Option(str, description="Выбор трека", choices = audio_names)):
await ctx.defer()
conn = sqlite3.connect('music.db')
cursor = conn.cursor()
cursor.execute("SELECT path FROM music WHERE name = ?", (название,))
result = cursor.fetchone()
if result:
path = result[0]
if ctx.author.voice:
channel = ctx.author.voice.channel
voice_client = await channel.connect()
voice_client.play(discord.FFmpegPCMAudio(path), after=lambda e: print(f'Звук воспроизведен {название}'))
emb = discord.Embed(title = 'Звук', colour = discord.Color.green() )
emb.set_footer(text = f'Вы запустили звук')
await ctx.respond(embed=emb)
await ctx.delete(delay=10)
while voice_client.is_playing():
await asyncio.sleep(1)
await voice_client.disconnect()
else:
emb = discord.Embed(title = 'Звук', colour = discord.Color.red() )
emb.set_footer(text = f'Вы не подключены к голосовому каналу. ')
await ctx.respond(embed=emb)
await ctx.delete(delay=10)
else:
emb = discord.Embed(title = 'Звук', colour = discord.Color.red() )
emb.set_footer(text = f'Аудиофайл с таким названием не найден.')
await ctx.respond(embed=emb)
await ctx.delete(delay=10)
conn.close()