Как изменить выбор без перезапуска. дискорд.pyPython

Программы на Python
Anonymous
Как изменить выбор без перезапуска. дискорд.py

Сообщение Anonymous »


Мой бот основан на базе данных, которая часто обновляется. Бот одной из команд предоставляет выбор тем уроков (взято из таблицы). Вроде работает, но если внести изменения в таблицу во время работы бота, то без его перезапуска новые варианты выбора не появятся

команда:

@app_commands.command() @app_commands.default_permissions(администратор=True) @app_commands.choices(lesson=lesson_choices()) async def create_or_update_mark(self, взаимодействие: Взаимодействие, студент: раздор.Член, урок: Выбор[str], логикс: app_commands.Range[int, 0, 8]): с MarkRepository(student_id=student.id, урок_титул=lesson.value) в качестве lr: lr.create_or_update(mark_dto=MarkCreateDTO(logiks=logiks)) await Interaction.response.send_message("логикс был изменен", ephemeral=True) Список выбора взят из функции lesson_choices

def урок_choices() -> list[Choice[str]]: возвращаться [ Выбор(имя=урок.название, значение=урок.название) для урока в LessonRepository.get_all_lessons() ] Вроде и понятно, что декоратор определяет варианты выбора при запуске кода, но меня такое не устраивает. Есть ли способы, которые помогут изменить выбор без перезапуска бота?

Я думал использовать первый вариант с типизацией Literal, но я так и не придумал, как это реализовать. Так же хотел использовать autocomplete, но у меня даже базовых вариантов выбора не было

Команда с автозаполнением

@app_commands.command() @app_commands.default_permissions(администратор=True) @app_commands.autocomplete(lesson=lesson_autocomplete) async def create_or_update_mark(self, взаимодействие: Взаимодействие, студент: раздор.Член, урок: ул., логикс: app_commands.Range[int, 0, 8]): с MarkRepository(student_id=student.id, Lesson_title=lesson) в качестве lr: lr.create_or_update(mark_dto=MarkCreateDTO(logiks=logiks)) await Interaction.response.send_message("логикс был изменен", ephemeral=True) lesson_autocomplete:
async def урок_autocomplete(interaction: Interaction, current: str) -> list[app_commands.Choice[str]]: уроки = [lesson_dto.title для урока_dto в LessonRepository.get_all_lessons()] распечатать(уроки) возвращаться [ app_commands.Choice(имя=урок, значение=урок) для урока в уроках, если current.lower() в уроке.lower() ]

Вернуться в «Python»