Как изменить параметры выбора choices без перезапуска
Мой бот завязан на базе данных которая часто обновляется. Бот одной из команд предоставляет выбор из тем уроков (взятых из таблицы). Вроде бы работает, но если в таблицу внесены изменения во время работы бота, то без его перезапуска новые варианты выбора не появятся
сама команда:
@app_commands.command()
@app_commands.default_permissions(administrator=True)
@app_commands.choices(lesson=lesson_choices())
async def create_or_update_mark(self, interaction: Interaction,
student: discord.Member,
lesson: Choice[str],
logiks: app_commands.Range[int, 0, 8]):
with MarkRepository(student_id=student.id, lesson_title=lesson.value) as lr:
lr.create_or_update(mark_dto=MarkCreateDTO(logiks=logiks))
await interaction.response.send_message("logiks has been changed", ephemeral=True)
Список выбора берётся из функции lesson_choices
def lesson_choices() -> list[Choice[str]]:
return [
Choice(name=lesson.title, value=lesson.title)
for lesson in LessonRepository.get_all_lessons()
]
Вроде и понятно что декоратор определяет варианты выбора при запуска кода, но меня такое не устраивает. Есть ли способы которые помогут менять варианты выбора без перезапуска бота?
Хотел использовать autocomplete но там у меня даже базовых вариантов выбора не было. Возможно я не правильно реализовал автозаполнение
Команда с автозаполнением
@app_commands.command()
@app_commands.default_permissions(administrator=True)
@app_commands.autocomplete(lesson=lesson_autocomplete)
async def create_or_update_mark(self, interaction: Interaction,
student: discord.Member,
lesson: str,
logiks: app_commands.Range[int, 0, 8]):
with MarkRepository(student_id=student.id, lesson_title=lesson) as lr:
lr.create_or_update(mark_dto=MarkCreateDTO(logiks=logiks))
await interaction.response.send_message("logiks has been changed", ephemeral=True)
lesson_autocomplete:
async def lesson_autocomplete(interaction: Interaction, current: str) -> list[app_commands.Choice[str]]:
lessons = [lesson_dto.title for lesson_dto in LessonRepository.get_all_lessons()]
print(lessons)
return [
app_commands.Choice(name=lesson, value=lesson)
for lesson in lessons if current.lower() in lesson.lower()
]