К содержимому

Настройки

Во время разработки более-менее больших плагинов, у вас может появиться желание отрегулировать его функционал без изменения исходного кода. Для решения подобной задачи и существуют настройки.

настройки - небольшое хранилище данных, подгружаемое во время запуска бота.

Для валидации настроек используется 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)

Теперь, когда вы знаете как использовать настройки, время двигаться дальше:

  • db: Как использовать базу данных в плагинах.
  • libs: Пишем свою библиотеку.