Antworten
Answer
msg.Answer ist fast immer das Richtige:
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:
return msg.Reply("eine neue Nachricht im Chat")
return msg.Edit("den Text dieser Nachricht ersetzen")Formatierung
Text wird als Telegram-HTML geparst:
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.
import "goroku/goroku/utils"
return msg.Answer("Du sagtest: <code>" + utils.EscapeHTML(input) + "</code>")Optionen
msg.Answer("keine Vorschau", goroku.WithNoWebpage(true))
msg.Answer("in ein Forum-Thema", goroku.WithReplyTo(topicID))| Option | Wirkung |
|---|---|
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:
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:
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.