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
}

Das Einbetten von goroku.Base liefert jede Methode außer Name und Commands.

Methoden ​

Name() string ​

Die Identität des Moduls — in .help, .unloadmod, der Konfigurationsoberfläche und als Besitzerschlüssel im Speicher. Muss unter den geladenen Modulen eindeutig sein.

Strings() map[string]string ​

Übersetzbarer Text. Die besonderen Schlüsselpräfixe stehen unter Übersetzungen. Base gibt nil zurück, das ist gültig.

Init(client, db) error ​

Wird einmal bei der Registrierung aufgerufen, bevor ein Handler laufen kann. Base hat Client, DB und Translator bereits gefüllt.

Ein zurückgegebener Fehler bricht die Registrierung ab, das Modul wird nicht geladen.

ClientReady() error ​

Wird aufgerufen, sobald der Telegram-Client verbunden ist. Für Arbeit, die die API braucht; Init kann vor dem Verbindungsaufbau laufen.

OnUnload() error ​

Wird beim Entfernen des Moduls aufgerufen. Gib Goroutinen und Handles frei.

Ein Panic hier wird abgefangen und geloggt, das Entfernen läuft weiter.

OnDlmod() error ​

Wird direkt nach der Installation über .dlmod aufgerufen.

Commands() map[string]CommandHandler ​

Befehlswort auf Handler. Der Schlüssel ist, was Nutzer nach dem Präfix tippen, ohne Beachtung der Groß-/Kleinschreibung. nil ist für ein Modul mit nur Watchern gültig.

Watchers() []WatcherHandler ​

Handler, die bei jeder Nachricht aufgerufen werden. Base gibt nil zurück.

Handler-Typen ​

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

Reihenfolge im Lebenszyklus ​

Erzeugen → Base binden → Init → [registriert] → ClientReady
                                       ↓
                              Befehle / Watcher
                                       ↓
                                   OnUnload

Ein minimales Modul ​

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") },
	}
}

Ohne Base implementieren ​

Base ist optional. Ein Modul, das alle acht Methoden selbst implementiert, funktioniert genauso, und Module aus der Zeit vor Base laden unverändert weiter.

Released under the GNU AGPL v3 License.