Skip to content

Dein erstes Modul

Ein Goroku-Modul ist ein Go-Struct. Es deklariert seinen Namen und die Befehle, die es behandelt; alles andere — Telegram-Client, Speicher, Übersetzungen, der Lade- und Entlade-Lebenszyklus — kommt aus goroku.Base.

Gerüst erzeugen

Schicke dies an deine Gespeicherten Nachrichten:

.newmod Weather

Goroku antwortet mit Weather.go: ein lauffähiges Modul mit vorbereitetem Handler und den nutzbaren Helfern direkt als Kommentar. Du fängst nie mit einer leeren Datei an.

TIP

.newmod ist nur für den Besitzer, und der Name muss ein gültiger Go-Typname sein — mit Großbuchstaben beginnen (Weather, nicht weather).

Was du bekommst

go
package modules

import "goroku/goroku"

type Weather struct {
	goroku.Base
}

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

func (m *Weather) Strings() map[string]string {
	return map[string]string{
		"name":             "Weather",
		"_cls_doc":         "What Weather does",
		"_cmd_doc_weather": "What .weather does",
		"no_args":          "❌ <b>Send some text or reply to a message</b>",
	}
}

func (m *Weather) Commands() map[string]goroku.CommandHandler {
	return map[string]goroku.CommandHandler{
		"weather": m.WeatherCmd,
	}
}

func (m *Weather) WeatherCmd(msg *goroku.Message) error {
	input := msg.ArgsOrReply()
	if input == "" {
		return msg.Answer(m.T("no_args", "❌ <b>Send some text or reply to a message</b>"))
	}
	return msg.Answer("<b>Weather got:</b> <code>" + input + "</code>")
}

Nur Name und Commands sind Pflicht. Strings ist dabei, weil man es fast immer will — löschen kannst du es aber.

Installieren

Schicke die Datei in einen beliebigen Chat, antworte darauf und sende:

.loadmod

Goroku kompiliert sie als nativen Go-Plugin und registriert den Befehl. .weather hi antwortet jetzt.

Native Plugins laufen in deinem Prozess

Ein Modul läuft als gewöhnlicher Go-Code im Userbot, mit deiner Telegram-Sitzung. Installiere nur Module, deren Quelltext du gelesen hast. Siehe Modul installieren.

Ändern

Bearbeite den Handler und .loadmod die neue Datei. Derselbe Struct-Name ersetzt das laufende Modul.

go
func (m *Weather) WeatherCmd(msg *goroku.Message) error {
	city := msg.Args()
	if city == "" {
		return msg.Answer(m.T("no_city", "❌ <b>Welche Stadt?</b>"))
	}
	return msg.Answer("🌤 <b>" + city + "</b>: sonnig, 22 °C")
}

Weiter

Released under the GNU AGPL v3 License.