Skip to content

Antworten ​

Answer ​

msg.Answer ist fast immer das Richtige:

go
return msg.Answer("🌤 <b>Sonnig</b>, 22 °C")

Es bearbeitet deine eigene Nachricht, wenn der Befehl von dir kam, und antwortet, wenn jemand anderes ihn ausgelöst hat. Das ist die Userbot-Konvention: dein .weather wird zum Ergebnis, statt eine zweite Nachricht hinzuzufügen.

Reply und Edit ​

Wenn du das konkrete Verhalten brauchst:

go
return msg.Reply("eine neue Nachricht im Chat")
return msg.Edit("den Text dieser Nachricht ersetzen")

Formatierung ​

Text wird als Telegram-HTML geparst:

go
msg.Answer("<b>fett</b> <i>kursiv</i> <code>mono</code>")
msg.Answer("<a href=\"https://goroku.dev\">Link</a>")
msg.Answer("<blockquote>zitiert</blockquote>")

Unterstützt: b, strong, i, em, u, s, del, code, pre, a, blockquote, tg-spoiler und tg-emoji für Premium-Emoji.

Alles vom Nutzer escapen

Nutzertext direkt in HTML einzusetzen zerbricht die Nachricht, sobald er < oder & enthält.

go
import "goroku/goroku/utils"

return msg.Answer("Du sagtest: <code>" + utils.EscapeHTML(input) + "</code>")

Optionen ​

go
msg.Answer("keine Vorschau", goroku.WithNoWebpage(true))
msg.Answer("in ein Forum-Thema", goroku.WithReplyTo(topicID))
OptionWirkung
WithNoWebpage(bool)Linkvorschau unterdrücken
WithReplyTo(int64)Auf eine Nachricht antworten oder in ein Forum-Thema posten
WithInvertMedia(bool)Vorschau über den Text
WithWebPageMedia(url, optional, forceLarge)Bestimmte Vorschau erzwingen

Lange Ausgaben ​

Telegram begrenzt eine Nachricht auf rund 4096 Zeichen. Lange Ergebnisse als Datei senden:

go
import (
	"bytes"
	"goroku/goroku"
)

func (m *Mod) DumpCmd(msg *goroku.Message) error {
	report := m.buildLongReport()
	if len(report) < 3500 {
		return msg.Answer("<pre>" + report + "</pre>")
	}
	_, err := m.Client.SendFile(
		goroku.ChatRefID(msg.ChatID),
		bytes.NewReader([]byte(report)),
		"📄 Vollständiger Bericht",
	)
	return err
}

Fortschritt bei langer Arbeit ​

Sofort antworten, dann unterwegs bearbeiten:

go
func (m *Mod) SlowCmd(msg *goroku.Message) error {
	if err := msg.Answer("⏳ <b>Arbeite…</b>"); err != nil {
		return err
	}
	result, err := m.doSlowThing(msg.Context())
	if err != nil {
		return err
	}
	return msg.Answer(result)
}

Automatische Antwort ​

Ändert ein Handler msg.Text und ruft nie Answer auf, sendet der Dispatcher den neuen Text für dich. Explizit ist klarer, aber deshalb enden manche eingebauten Module mit einer Zuweisung an msg.Text.

Released under the GNU AGPL v3 License.