Настройки
Во время разработки более-менее больших плагинов, у вас может появиться желание отрегулировать его функционал без изменения исходного кода. Для решения подобной задачи и существуют настройки.
настройки - небольшое хранилище данных, подгружаемое во время запуска бота.
Для валидации настроек используется pydantic, а файлы настроек представлены в toml файлах. Рекомендуем ознакомиться с материалов.
Определение
Заголовок раздела «Определение»Итак, создание настроек начинается с их прототипа. Создать прототип настроек достаточно просто:
from chioricord.api import PluginConfig
class HelloConfig(PluginConfig, config="hello"): """Наш первый прототип настроек."""Прототип настроек, это класс, которой определяет какие данные будут хранится в настройках.
Несколько интересных моментов:
- Название такого класса принята писать в формате
NameConfig, гдеName- имя плагина. config="hello"также соответствует название плагина без пробелов. Этот параметр отвечает за название файла в директории настроек. В нашем настройки будут читать из файлаhello.toml.
Давайте теперь создадим первые параметры:
class HelloConfig(PluginConfig, config="hello"): """Настройки для расширения приветствий."""
message: str mention_message: str = "{mention}, приветик!"Если вы уже работали с дата классами или подобными модулями. такой синтаксис будет для вас знакомым.
Давайте теперь взглянем на файл настроек:
message = "приветик"mention_message = "Привет, {mention}!"Всё это время мы создавали простые настройки, но также мы можем использовать более сложные структуры данных в настройках.
class GuildHello(BaseModel): """Настройки для сервера."""
message: str mention_message: str = "{mention}, приветик!"
class HelloConfig(PluginConfig, config="hello"): """Настройки для расширения приветствий."""
guilds: dict[int, GuildHello]А в файле это будет выглядеть подобным образом:
[guilds.1234]message = "приветик"mention_message = "Привет, {mention}!"
[guilds.2683]message = "Мяу-мяу."mention_message = "{mention}, привет няшка!"Использование
Заголовок раздела «Использование»Ранее мы создали прототип настроек, но ещё никак его не использовали. Первые делом надо подключить настройки к плагину. Делается это следующим образом:
plugin.set_config(HelloConfig)Да. обратите внимание на следующие моменты:
- Подключение настроек обычно происходит в загрузчике.
- У одного плагина могут быть только один настройки.
- Сначала происходит загрузка плагина, а потом загрузка настроек.
Теперь, когда мы загрузили настройки, мы можем их использовать.
В командах:
@plugin.include@arc.slash_command("hello")async def hello_handler( ctx: ChioContext hello: HelloConfig = arc.inject()) -> None: ...Или через клиент:
# Внедрение зависимостей как в обработчикахhello = client.get_type_dependency(HelloCOnfig)
# Напрямую из менеджера настроек плагиновhello = client.config.get(HelloCOnfig)Следующие шаги
Заголовок раздела «Следующие шаги»Теперь, когда вы знаете как использовать настройки, время двигаться дальше: