Skip to content

CommandMeta

Filter und Aliase für einen Befehl. Deklariert über das optionale Interface ModuleWithMeta:

go
func (m *Weather) CommandMetas() map[string]goroku.CommandMeta {
	return map[string]goroku.CommandMeta{
		"weather": {
			Aliases:   []string{"w"},
			OnlyOwner: true,
		},
	}
}

Der Dispatcher wendet das an, bevor dein Handler läuft. Ein Befehl, dessen Filter nicht passen, löst schlicht nicht aus.

Dasselbe Struct konfiguriert Watcher über WatcherMetas(), positionsweise dem Slice aus Watchers() zugeordnet.

Benennung

FeldTypWirkung
AliasstringEin einzelner Alternativname
Aliases[]stringMehrere Alternativnamen

Aliase teilen sich einen Namensraum mit den Befehlen aller Module. Eine Kollision lässt die Registrierung scheitern, statt still zu überdecken.

Wer

FeldWirkung
OnlyOwnerNur der Kontobesitzer. Nur Identität — sudo, Masken und temporäre Freigaben zählen nicht
FromID[]int64 erlaubter Absender-IDs

Wo

FeldWirkung
OnlyPMNur private Chats
NoPMNie in privaten Chats
OnlyGroupsNur Gruppen
OnlyChannelsNur Kanäle
OnlyChatsNur nicht-private Chats
ChatID[]int64 erlaubter Chat-IDs

Anhänge

FeldWirkung
OnlyMediaIrgendeinen Anhang verlangen
OnlyPhotosEin Foto verlangen
OnlyVideosEin Video verlangen
OnlyAudiosAudio verlangen
OnlyDocsEin Dokument verlangen
OnlyStickersEinen Sticker verlangen
NoMediaJeden Anhang ablehnen
NoStickersSticker ablehnen
NoAudioAudio ablehnen
NoDocDokumente ablehnen

Form der Nachricht

FeldWirkung
OnlyReplyEine beantwortete Nachricht verlangen
NoReplyAntworten ablehnen
NoForwardedWeitergeleitete ablehnen
MentionEine Erwähnung verlangen
NoMentionErwähnungen ablehnen
OnlyCommandsNur Nachrichten, die Befehle sind
NoCommandsBefehle ablehnen
OnlyInlineNur über Inline
NoInlineInline ablehnen
EditableNur Nachrichten, die dieses Konto bearbeiten kann

Inhalt

FeldTypWirkung
RegexstringText muss passen. Wird bei der Registrierung kompiliert; ein ungültiges Muster lässt sie scheitern
StartsWithstringText muss damit beginnen
EndsWithstringText muss damit enden
ContainsstringText muss das enthalten

Sonstiges

FeldTypWirkung
RatelimitboolRatenlimits pro Nutzer und Chat anwenden
Filterfunc(*Message) boolBeliebiges Prädikat; läuft zuletzt
go
"weather": {
	Filter: func(msg *goroku.Message) bool {
		return len(msg.Text) < 200
	},
},

Kombinieren

Alle gesetzten Felder müssen zutreffen — sie werden UND-verknüpft.

go
"purge": {
	Aliases:     []string{"p"},
	OnlyGroups:  true,
	OnlyReply:   true,
	NoForwarded: true,
	Ratelimit:   true,
},

.purge löst nun nur in einer Gruppe aus, nur als Antwort, nie auf einer weitergeleiteten Nachricht, und ist ratenlimitiert.

Released under the GNU AGPL v3 License.