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 WeatherGoroku 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
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:
.loadmodGoroku 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.
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
- Aufbau eines Moduls — wofür jede Methode da ist
- Befehle — Aliase, Einschränkungen, Ratenlimits
- Speicher — Dinge über Neustarts hinweg merken