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.