Base
type Base struct {
Client *CustomTelegramClient
DB *Database
Translator *Translator
}Вбудуйте його — і модулю знадобляться лише Name і Commands.
type Weather struct{ goroku.Base }Поля
| Поле | Для чого |
|---|---|
Client | API Telegram — надсилання файлів, розв'язання пірів, інлайн-менеджер |
DB | Постійне сховище, див. Сховище |
Translator | Основа для T; напряму потрібен рідко |
Усі три заповнюються завантажувачем до виклику Init, тому доступні і в Init, і в ClientReady, і в командах, і у вотчерах.
Методи
T(key, def string) string
Переклад для key або def, якщо його немає. Замінює хелпер getTrans, який раніше копіювався в кожен модуль.
return msg.Answer(m.T("no_city", "❌ <b>Яке місто?</b>"))Пошук іде за goroku.modules.<ім'я>.<key> з іменем модуля як написано, у нижньому регістрі та у snake_case, потім за TranslationAliases.
Безпечний на nil-Base і на незареєстрованому модулі — поверне def.
Init(client, db) error
Заповнює поля й повертає nil. Перевизначайте вільно:
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
func NewBase(client *CustomTelegramClient, db *Database) BaseДля модуля, створеного вручну, а не зареєстрованого через завантажувач, — внутрішні хелпери й тести:
mod := &Weather{Base: goroku.NewBase(client, db)}Вбудовуючий модуль тут невідомий, тому T повертає значення за замовчуванням, доки модуль не зареєстровано.
Конфлікти імен
Якщо у вашій структурі вже є поле Client, DB або Translator, вбудовування Base зробить ім'я неоднозначним. Перейменуйте своє поле або звертайтеся через вбудовану структуру явно: m.Base.Client.