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.