Skip to content

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Список значений
urlURL
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
}

Вызывается при старте и на каждое изменение. Возврат ошибки отклоняет изменение и показывает сообщение пользователю.

Released under the GNU AGPL v3 License.