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
| Feld | Typ | Wirkung |
|---|---|---|
Alias | string | Ein einzelner Alternativname |
Aliases | []string | Mehrere Alternativnamen |
Aliase teilen sich einen Namensraum mit den Befehlen aller Module. Eine Kollision lässt die Registrierung scheitern, statt still zu überdecken.
Wer
| Feld | Wirkung |
|---|---|
OnlyOwner | Nur der Kontobesitzer. Nur Identität — sudo, Masken und temporäre Freigaben zählen nicht |
FromID | []int64 erlaubter Absender-IDs |
Wo
| Feld | Wirkung |
|---|---|
OnlyPM | Nur private Chats |
NoPM | Nie in privaten Chats |
OnlyGroups | Nur Gruppen |
OnlyChannels | Nur Kanäle |
OnlyChats | Nur nicht-private Chats |
ChatID | []int64 erlaubter Chat-IDs |
Anhänge
| Feld | Wirkung |
|---|---|
OnlyMedia | Irgendeinen Anhang verlangen |
OnlyPhotos | Ein Foto verlangen |
OnlyVideos | Ein Video verlangen |
OnlyAudios | Audio verlangen |
OnlyDocs | Ein Dokument verlangen |
OnlyStickers | Einen Sticker verlangen |
NoMedia | Jeden Anhang ablehnen |
NoStickers | Sticker ablehnen |
NoAudio | Audio ablehnen |
NoDoc | Dokumente ablehnen |
Form der Nachricht
| Feld | Wirkung |
|---|---|
OnlyReply | Eine beantwortete Nachricht verlangen |
NoReply | Antworten ablehnen |
NoForwarded | Weitergeleitete ablehnen |
Mention | Eine Erwähnung verlangen |
NoMention | Erwähnungen ablehnen |
OnlyCommands | Nur Nachrichten, die Befehle sind |
NoCommands | Befehle ablehnen |
OnlyInline | Nur über Inline |
NoInline | Inline ablehnen |
Editable | Nur Nachrichten, die dieses Konto bearbeiten kann |
Inhalt
| Feld | Typ | Wirkung |
|---|---|---|
Regex | string | Text muss passen. Wird bei der Registrierung kompiliert; ein ungültiges Muster lässt sie scheitern |
StartsWith | string | Text muss damit beginnen |
EndsWith | string | Text muss damit enden |
Contains | string | Text muss das enthalten |
Sonstiges
| Feld | Typ | Wirkung |
|---|---|---|
Ratelimit | bool | Ratenlimits pro Nutzer und Chat anwenden |
Filter | func(*Message) bool | Beliebiges 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.