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.