ConfigField
go
type ConfigField struct {
Key string
Type string
Default any
Validator Validator
Secret bool
}Объявляется через ModuleWithConfigSchema:
go
var _ goroku.ModuleWithConfigSchema = (*Weather)(nil)
func (m *Weather) ConfigSchema() []goroku.ConfigField {
return []goroku.ConfigField{
{Key: "units", Type: "choice", Default: "metric",
Validator: &goroku.ChoiceValidator{PossibleValues: []string{"metric", "imperial"}}},
}
}Поля
Key
Ключ хранения под именем вашего модуля. Он же идентификатор в интерфейсе настроек и то, что описывает строка _cfg_<key> в Strings.
Type
| Значение | Смысл |
|---|---|
bool | Переключатель |
int | Целое число |
float | Дробное число |
string | Произвольный текст |
choice | Одно из фиксированного набора |
series | Список значений |
url | URL |
link | Ссылка Telegram |
hidden | Хранится, но не показывается |
Default
Возвращается, пока пользователь ничего не задал. Должно соответствовать Type.
Validator
Отсекает некорректный ввод до сохранения. Пользователь видит отказ.
Secret
true скрывает значение в логах и заменяет плейсхолдером в бэкапах. При восстановлении бэкапа живое значение сохраняется, а не затирается маркером.
Используйте для API-ключей, токенов и паролей.
Валидаторы
| Валидатор | Параметры |
|---|---|
&BooleanValidator{} | |
&IntegerValidator{} | Minimum/HasMin, Maximum/HasMax |
&FloatValidator{} | Minimum/HasMin, Maximum/HasMax |
&StringValidator{} | MinLen, MaxLen |
&ChoiceValidator{} | PossibleValues []string |
&SeriesValidator{} | Item Validator, MinLen/HasMin |
&URLValidator{} | |
&LinkValidator{} | |
&RegExpValidator{} | Pattern *regexp.Regexp |
&HiddenValidator{} | Inner Validator |
&TelegramIDValidator{} | |
&EmojiValidator{} | |
&EntityLikeValidator{} | |
&UnionValidator{} | Validators []Validator |
&NoneTypeValidator{} | Не принимает ничего |
Чтение значений
go
units := m.DB.GetString(m.Name(), "units", "metric")Реакция на изменения
go
func (m *Weather) ConfigReady(config map[string]any) error {
units, ok := config["units"].(string)
if !ok {
return fmt.Errorf("units должен быть строкой, получено %T", config["units"])
}
m.mu.Lock()
m.units = units
m.mu.Unlock()
return nil
}Вызывается при старте и на каждое изменение. Возврат ошибки отклоняет изменение и показывает сообщение пользователю.