Skip to content

Base

go
type Base struct {
	Client     *CustomTelegramClient
	DB         *Database
	Translator *Translator
}

Встройте его — и модулю понадобятся только Name и Commands.

go
type Weather struct{ goroku.Base }

Поля

ПолеДля чего
ClientAPI Telegram — отправка файлов, разрешение пиров, инлайн-менеджер
DBПостоянное хранилище, см. Хранилище
TranslatorОснова для T; напрямую нужен редко

Все три заполняются загрузчиком до вызова Init, поэтому доступны и в Init, и в ClientReady, и в командах, и в вотчерах.

Методы

T(key, def string) string

Перевод для key или def, если его нет. Заменяет хелпер getTrans, который раньше копировался в каждый модуль.

go
return msg.Answer(m.T("no_city", "❌ <b>Какой город?</b>"))

Поиск идёт по goroku.modules.<имя>.<key> с именем модуля как написано, в нижнем регистре и в snake_case, затем по TranslationAliases.

Безопасен на nil-Base и на незарегистрированном модуле — вернёт def.

Init(client, db) error

Заполняет поля и возвращает nil. Переопределяйте свободно:

go
func (m *Weather) Init(client *goroku.CustomTelegramClient, db *goroku.Database) error {
	if err := m.Base.Init(client, db); err != nil {
		return err
	}
	m.cache = make(map[string]string)
	return nil
}

Загрузчик заполняет поля до вызова Init, так что вызов m.Base.Init в обычной работе избыточен. Оставьте его: так модуль работает и когда его создают напрямую в тесте.

ClientReady() / OnUnload() / OnDlmod() error

Возвращают nil. Переопределяйте нужные.

Strings() map[string]string

Возвращает nil. Переопределите, чтобы объявить текст.

Watchers() []WatcherHandler

Возвращает nil. Переопределите, чтобы смотреть все сообщения.

NewBase

go
func NewBase(client *CustomTelegramClient, db *Database) Base

Для модуля, созданного вручную, а не зарегистрированного через загрузчик, — внутренние хелперы и тесты:

go
mod := &Weather{Base: goroku.NewBase(client, db)}

Встраивающий модуль здесь неизвестен, поэтому T возвращает значение по умолчанию, пока модуль не зарегистрирован.

Конфликты имён

Если в вашей структуре уже есть поле Client, DB или Translator, встраивание Base сделает имя неоднозначным. Переименуйте своё поле или обращайтесь через встроенную структуру явно: m.Base.Client.

Released under the GNU AGPL v3 License.