Как изменить выбор без перезапуска. дискорд.py ⇐ Python
-
Anonymous
Как изменить выбор без перезапуска. дискорд.py
Мой бот основан на базе данных, которая часто обновляется. Бот одной из команд предоставляет выбор тем уроков (взято из таблицы). Вроде работает, но если внести изменения в таблицу во время работы бота, то без его перезапуска новые варианты выбора не появятся
команда:
@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() ]
Мой бот основан на базе данных, которая часто обновляется. Бот одной из команд предоставляет выбор тем уроков (взято из таблицы). Вроде работает, но если внести изменения в таблицу во время работы бота, то без его перезапуска новые варианты выбора не появятся
команда:
@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() ]