Skip to content

Module

go
type Module interface {
	Name() string
	Strings() map[string]string
	Init(client *CustomTelegramClient, db *Database) error
	ClientReady() error
	OnUnload() error
	OnDlmod() error
	Commands() map[string]CommandHandler
	Watchers() []WatcherHandler
}

Вбудовування goroku.Base дає всі методи, крім Name і Commands.

Методи

Name() string

Ідентичність модуля — у .help, .unloadmod, інтерфейсі налаштувань і як ключ власника у сховищі. Має бути унікальним серед завантажених модулів.

Strings() map[string]string

Перекладний текст. Особливі префікси ключів описані в Перекладах. Base повертає nil, і це припустимо.

Init(client, db) error

Викликається один раз під час реєстрації, до того як спрацює будь-який обробник. Base на цей момент уже заповнив Client, DB і Translator.

Повернення помилки перериває реєстрацію, і модуль не завантажується.

ClientReady() error

Викликається, коли клієнт Telegram підключено. Для роботи, якій потрібен API; Init може виконатися раніше, ніж з'явиться з'єднання.

OnUnload() error

Викликається під час видалення модуля. Звільніть горутини й дескриптори.

Паніка тут перехоплюється й логується, видалення триває.

OnDlmod() error

Викликається одразу після встановлення через .dlmod.

Commands() map[string]CommandHandler

Слово команди → обробник. Ключ — те, що користувач набирає після префікса, регістр не важливий. Повернення nil припустиме для модуля лише з вотчерами.

Watchers() []WatcherHandler

Обробники, що викликаються на кожне повідомлення. Base повертає nil.

Типи обробників

go
type CommandHandler func(msg *Message) error
type WatcherHandler func(msg *Message) error

Порядок життєвого циклу

створення → прив'язка Base → Init → [зареєстровано] → ClientReady

                                    команди / вотчери

                                        OnUnload

Мінімальний модуль

go
package modules

import "goroku/goroku"

type Ping struct{ goroku.Base }

func (m *Ping) Name() string { return "Ping" }

func (m *Ping) Commands() map[string]goroku.CommandHandler {
	return map[string]goroku.CommandHandler{
		"ping": func(msg *goroku.Message) error { return msg.Answer("🏓 pong") },
	}
}

Реалізація без Base

Base необов'язковий. Модуль, який сам реалізує всі вісім методів, працює так само, а модулі, написані до появи Base, продовжують завантажуватися без змін.

Released under the GNU AGPL v3 License.