Skip to content

CommandMeta

Фильтры и алиасы команды. Объявляется через опциональный интерфейс ModuleWithMeta:

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

Диспетчер применяет это до запуска вашего обработчика. Команда, чьи фильтры не совпали, просто не срабатывает.

Та же структура настраивает вотчеры через WatcherMetas(), сопоставляясь по позиции со слайсом из Watchers().

Имена

ПолеТипДействие
AliasstringОдно альтернативное имя
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Только сообщения, которые аккаунт может редактировать

Содержимое

ПолеТипДействие
RegexstringТекст должен совпасть. Компилируется при регистрации; некорректный шаблон роняет регистрацию
StartsWithstringТекст должен начинаться с этого
EndsWithstringТекст должен заканчиваться этим
ContainsstringТекст должен содержать это

Прочее

ПолеТипДействие
RatelimitboolПрименять лимиты по пользователю и чату
Filterfunc(*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 срабатывает только в группе, только как ответ, никогда на пересланном сообщении и с ограничением частоты.

Released under the GNU AGPL v3 License.