Всё просто, так как текст доходит с упоминанием для обработчиков -- это не универсально. Решить проблему очень просто, нам нужно почистить текст от упоминания до его использования. Можно написать вот такой middleware, он будет проверять наличие упоминания в чате и убирать его из текста для любых других вариантов (работать будет и в ЛС). В остальных случаях, он просто не пропустит дальше выполнение.
const GROUP_ID = 123456789;
const mentionPattern = new RegExp(
String.raw`^(?:\[club${GROUP_ID}\|[^\]]+\])(?:[\s.,\'\"!?\-+]+|$)`,
'i'
);
vk.updates.on('message', (context, next) => {
if (context.isChat && !mentionPattern.test(context.text)) {
return;
}
if (context.text) {
context.text = context.text.replace(mentionPattern, '');
}
return next();
});
Демонстрация регулярного выражения