"failed":2 — истекло время действия ключа, нужно заново получить key методом groups.getLongPollServer.
$data = ['type' => 'text', 'code' => $code];
$data = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
[id<id>|<text>]
, где id — айди пользователя, text — текст упоминанияcode должен возвращать JSON-объект, описывающий виджет. Элементы виджета могут содержать только внутренние ссылки на vk.com (кроме away.php) и vk.me.
В общем случае параметр code выглядит так:
return { widget };
const widget = {
"title": "My Table",
"title_url": "https://link",
"title_counter": 31,
// ...
};
vk.api.appWidgets.update({
type: `Table`,
code: 'return ' + JSON.stringify(widget) + ';'
})
async function getUserId(message) {
if (message.hasReplyMessage) {
return message.replyMessage.senderId;
} else if (message.hasForwards) {
return message.forwards[0].senderId;
} else {
const res = await vk.snippets.resolveResource(message.$match[1]);
return res.id;
}
}
vk.updates.hear(/^(?:-добавить|-друг)\s?([^]+)?/i, async (message) => {
if(message.senderId !== 348543284) return message.send(`У вас недостаточно прав!`)
let userId = await getUserId(message);
let tex = `Денис отправил/одобрил заявку!`
vk.api.friends.add({ user_id: userId, text: tex })
return message.send(`Вы отправили/одобрили заявку`);
});
cmd.hear(/^(?:передать|перевод)\s(\d+)\s(\d+)\s(.*)/i, async (ctx) => {
const [, id, amount, reason] = ctx.$match;
// ...
});