Как заставить бота реагировать на сообщения по определенному каналу, с помощью определенного webhook - PullRequest
0 голосов
/ 08 июля 2019

Это в моем файле index.js. У моего бота

Ошибка типа: невозможно прочитать свойство 'id' из неопределенного

хотя код работал раньше.

Поток в основном:

  • Событие сообщения происходит
  • Получает веб-крюки гильдии, где появляется сообщение
  • тогда для каждого webhook это:
    • проверьте имя webhook.
    • проверить идентификатор владельца и посмотреть, совпадает ли он с идентификатором бота
    • проверить, находится ли webhook там, где было отправлено сообщение
  • Реагирует с эмодзи.

Проблема в том, что он не знает, что такое webhook.owner.id
Я перепутал веб-крючок с другими неправильными веб-крюками.

Либо мой код ничего не делает, либо выдает ошибку в консоли.

Немного изменились операторы if (). Иногда возникает ошибка или ничего не происходит.

Добавление и удаление! в webhook.owner.id

doopliss.on('message', async (message) => {
      const webhooks = await message.guild.fetchWebhooks();
      await webhooks.forEach(async webhook => {
        if(message.author.id == doopliss.user.id) 
          return //checks if author is me(bot)
        else if(message.author.bot) 
          return //checks if author is a bot
        else if(webhook.name == `Marker`) 
          return //checks if webhook name is "Marker"
        else if(webhook.owner.id !== doopliss.user.id) 
          return //checks if the webhook owner id equals the bot's id
        else if(message.channel.id == webhook.channelID) 
          return //checks if the channel ID is equal to the webhook channel's ID.
        else
          var thisWord = ">groc";
        if(!message.content.includes(thisWord)) 
          return
        else
          var thatWord = ">sc";
        if(!message.content.includes(thatWord)) 
          return
        else
            message.react(doopliss.emojis.find(emoji => emoji.id === "596458828011405334")) //approve
            .then(() => message.react(doopliss.emojis.find(emoji => emoji.id === "596458827994497024"))) //deny
            .catch(() => console.error('One of the emojis failed to react.'));
})})

Я ожидаю, что бот будет проверять все перед тем, как реагировать на каждое сообщение, но фактический результат - бот либо ничего не делает, либо выдает ошибку в консоли. Одно из ранних утверждений if () должно быть ложным, но я не знаю, какое из них.

1 Ответ

0 голосов
/ 09 июля 2019

Это код, который мне удалось улучшить.

doopliss.on('message', async (message) => {
      const webhooks = await message.guild.fetchWebhooks();
      await webhooks.forEach(async webhook => {
        if(message.author.id == doopliss.user.id) return //checks if author is me(bot)
        else
        console.log(message.author.bot)
        if(message.author.bot) return //checks if author is a bot
        else
        console.log(webhook.name)
        if(webhook.name !== `Marker`) return //checks if webhook name is "Marker"
        else
        console.log(webhook.owner.bot)
        if(webhook.owner.bot !== true) return //checks if the webhook owner id equals the bot's id
        else
        console.log(`Owner: ${webhook.owner.id} You: ${doopliss.user.id}`)
        if(!webhook.owner.id == doopliss.user.id) return //checks if the webhook owner id equals the bot's id
        else
        console.log(`${message.channel.id} then we have ${webhook.channelID}`)
        if(message.channel.id !== webhook.channelID) return //checks if the channel ID is equal to the webhook channel's ID.
        else
        console.log(`pog`)
        var thisWord = ">groc";
        if(message.content.includes(thisWord)) return
        else
        console.log(`pog`)
        var thatWord = ">sc";
        if(message.content.includes(thatWord)) return
        else
            message.react(doopliss.emojis.find(emoji => emoji.id === "596458828011405334")) //approve
            .then(() => message.react(doopliss.emojis.find(emoji => emoji.id === "596458827994497024"))) //deny
            .catch(() => console.error('One of the emojis failed to react.'));
})})

Что я изменил

  • Добавлено в console.logs для устранения проблемы
  • Поскольку вы проверяете, сделал ли ваш бот webhook, я добавил функцию для проверки ботов
  • Я добавил пару! Некоторые значения должны быть !== или (!var). Для логических значений и некоторых строк.

Это должно исправить вашего бота и избавиться от ошибки типа, важно то, как вы расположите операторы if.

...