CommandMeta
コマンドのフィルタとエイリアス。任意インターフェース ModuleWithMeta で宣言します。
go
func (m *Weather) CommandMetas() map[string]goroku.CommandMeta {
return map[string]goroku.CommandMeta{
"weather": {
Aliases: []string{"w"},
OnlyOwner: true,
},
}
}ディスパッチャはこれをハンドラの実行前に適用します。フィルタに合わない コマンドは、そもそも発火しません。
同じ構造体が WatcherMetas() でウォッチャーの設定にも使われ、Watchers() が返す スライスと位置で対応します。
名前
| フィールド | 型 | 効果 |
|---|---|---|
Alias | string | 別名を1つ |
Aliases | []string | 別名を複数 |
エイリアスは全モジュールのコマンドと同じ名前空間を共有します。衝突は登録を失敗 させ、黙って覆い隠すことはありません。
誰が
| フィールド | 効果 |
|---|---|
OnlyOwner | アカウント所有者のみ。本人かどうかだけを見て、sudo・マスク・一時付与は無視 |
FromID | 許可する送信者 ID の []int64 |
どこで
| フィールド | 効果 |
|---|---|
OnlyPM | 個人チャットのみ |
NoPM | 個人チャットでは動かさない |
OnlyGroups | グループのみ |
OnlyChannels | チャンネルのみ |
OnlyChats | 個人チャット以外のみ |
ChatID | 許可するチャット ID の []int64 |
添付
| フィールド | 効果 |
|---|---|
OnlyMedia | 何らかの添付を必須に |
OnlyPhotos | 写真を必須に |
OnlyVideos | 動画を必須に |
OnlyAudios | 音声を必須に |
OnlyDocs | 文書を必須に |
OnlyStickers | ステッカーを必須に |
NoMedia | 添付を拒否 |
NoStickers | ステッカーを拒否 |
NoAudio | 音声を拒否 |
NoDoc | 文書を拒否 |
メッセージの形
| フィールド | 効果 |
|---|---|
OnlyReply | 返信先メッセージを必須に |
NoReply | 返信を拒否 |
NoForwarded | 転送メッセージを拒否 |
Mention | メンションを必須に |
NoMention | メンションを拒否 |
OnlyCommands | コマンドであるメッセージのみ |
NoCommands | コマンドを拒否 |
OnlyInline | インライン経由のみ |
NoInline | インラインを拒否 |
Editable | このアカウントが編集できるメッセージのみ |
内容
| フィールド | 型 | 効果 |
|---|---|---|
Regex | string | テキストが一致すること。登録時にコンパイルされ、不正なパターンは登録を失敗させます |
StartsWith | string | これで始まること |
EndsWith | string | これで終わること |
Contains | string | これを含むこと |
その他
| フィールド | 型 | 効果 |
|---|---|---|
Ratelimit | bool | 利用者別・チャット別のレート制限を適用 |
Filter | func(*Message) bool | 任意の述語。最後に実行されます |
go
"weather": {
Filter: func(msg *goroku.Message) bool {
return len(msg.Text) < 200
},
},組み合わせ
設定されたフィールドはすべて満たす必要があります(AND 結合)。
go
"purge": {
Aliases: []string{"p"},
OnlyGroups: true,
OnlyReply: true,
NoForwarded: true,
Ratelimit: true,
},これで .purge は、グループでのみ、返信としてのみ、転送メッセージでは決して 発火せず、レート制限も掛かります。