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
}Викликається під час старту й на кожну зміну. Повернення помилки відхиляє зміну й показує повідомлення користувачу.