Skip to content

Base ​

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

Bette es ein, und ein Modul braucht nur Name und Commands.

go
type Weather struct{ goroku.Base }

Felder ​

FeldWofür
ClientTelegram-API — Dateien senden, Peers auflösen, Inline-Manager
DBDauerhafter Speicher, siehe Speicher
TranslatorUnterbau für T; direkt brauchst du ihn selten

Alle drei werden vom Loader vor Init gefüllt, sind also in Init, ClientReady, Befehlen und Watchern gleichermaßen nutzbar.

Methoden ​

T(key, def string) string ​

Übersetzter String zu key, sonst def. Ersetzt den getTrans-Helfer, den Module früher kopiert haben.

go
return msg.Answer(m.T("no_city", "❌ <b>Welche Stadt?</b>"))

Aufgelöst wird goroku.modules.<Name>.<key> mit dem Modulnamen wie geschrieben, kleingeschrieben und in snake_case, danach über TranslationAliases.

Sicher bei nil-Base und bei nicht registriertem Modul — dann kommt def.

Init(client, db) error ​

Verdrahtet die Felder und gibt nil zurück. Überschreib es ruhig:

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
}

Der Loader füllt die Felder vor Init, der Aufruf m.Base.Init ist im Normalbetrieb also überflüssig. Behalte ihn: so funktioniert das Modul auch, wenn es in einem Test direkt erzeugt wird.

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

Geben nil zurück. Überschreib die, die du brauchst.

Strings() map[string]string ​

Gibt nil zurück. Überschreiben, um Text zu deklarieren.

Watchers() []WatcherHandler ​

Gibt nil zurück. Überschreiben, um jede Nachricht zu sehen.

NewBase ​

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

Für ein von Hand erzeugtes Modul, das nicht über den Loader registriert wird — interne Helfer und Tests:

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

Das einbettende Modul ist hier nicht bekannt, T liefert daher seinen Standardwert, bis das Modul registriert ist.

Namenskonflikte ​

Hat dein Struct bereits ein Feld Client, DB oder Translator, wird der Name durch das Einbetten von Base mehrdeutig. Benenne deins um oder greife explizit über das eingebettete Struct zu: m.Base.Client.

Released under the GNU AGPL v3 License.