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 | Одно альтернативное имя |
Aliases | []string | Несколько альтернативных имён |
Алиасы делят единое пространство имён с командами всех модулей. Коллизия роняет регистрацию, а не перекрывает команду молча.
Кто
| Поле | Действие |
|---|---|
OnlyOwner | Только владелец аккаунта. Проверяется только личность — sudo, маски и временные выдачи игнорируются |
FromID | []int64 разрешённых ID отправителей |
Где
| Поле | Действие |
|---|---|
OnlyPM | Только личные чаты |
NoPM | Никогда в личных чатах |
OnlyGroups | Только группы |
OnlyChannels | Только каналы |
OnlyChats | Только не-личные чаты |
ChatID | []int64 разрешённых ID чатов |
Вложения
| Поле | Действие |
|---|---|
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
},
},Комбинирование
Все заданные поля должны пройти — они объединяются по «И».
go
"purge": {
Aliases: []string{"p"},
OnlyGroups: true,
OnlyReply: true,
NoForwarded: true,
Ratelimit: true,
},Теперь .purge срабатывает только в группе, только как ответ, никогда на пересланном сообщении и с ограничением частоты.