Проблема с webhooks и идеей роли / разрешений - PullRequest
0 голосов
/ 22 апреля 2020

Я разрабатываю бота с диссонансом. js, который использует такие вещи, как msg.member.hasPermission("ADMINISTRATOR") или msg.member.roles.cache.has(teacherRoleID). Все работало нормально, пока я не попробовал webhooks. Добавив эти две строки:

client.on('ready', () => {
  client.user.setStatus("online")
  client.user.setActivity("!help", {
    type: "PLAYING",
  });
  superConsole(`Logged in as ${client.user.tag} in ${client.guilds.size} guilds!`);


    const hook = new Discord.WebhookClient("ID", "secret token"); // THESE
    hook.send("I am now alive!");                                 // LINES

  });

(кстати superConsole - это функция) С тех пор программа больше не работала и всегда возвращала одинаковые ошибки: (node:20736) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'hasPermission' of null & (node:20736) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'roles' of null

Когда я удаляю эти 2 строки для webhook, он снова работает. Почему? Я не понимаю.

Права доступа и роль находятся в прослушивателе сообщений:

client.on('message', async msg => {
if (msg.member.hasPermission('ADMINISTRATOR') {
// some stuff here
}
if (msg.member.roles.cache.has(teacherRoleID) {
// some stuff here
}
});

1 Ответ

0 голосов
/ 04 мая 2020

Проблема в том, что когда вы отправляете сообщение с hook, оно запускает клиентское событие message. Поскольку веб-крючок не является членом гильдии, msg.member получит undefined за сообщения, отправленные веб-крючком.

Вы должны использовать что-то вроде этого:

if (msg.member) {
  if (msg.member.hasPermission('ADMINISTRATOR') {
    // some stuff here
  }
  if (msg.member.roles.cache.has(teacherRoleID) {
  // some stuff here
  }
}
...