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.