Как создать бота, который удалит сообщение и разместит его в другом канале, основываясь на реакциях - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь сделать так, чтобы, когда мой бот обнаружил реакцию в определенном канале, он увидел, достигло ли он 10 реакций на определенную реакцию.Затем он удалит ответное сообщение и отправит его в другой определенный канал с прикрепленным к нему сообщением.

Вот код

doopliss.on('message', message => {
  if (message.channel.id === "587066921422290953") {
    setTimeout(function(){
      message.react(message.guild.emojis.get('587070377696690177'))
    }, 10)
    setTimeout(function(){
      message.react(message.guild.emojis.get('587071853609353256'))
    }, 50)
    setTimeout(function(){
      message.react(message.guild.emojis.get('587070377704816640'))
    }, 100)
  }
});
const message = require("discord.js");
const emoji = require("discord.js");
const reaction = require("discord.js");
doopliss.on('message', message => {
  if (message.channel.id === "587066921422290953") {
  let limit = 2; // number of thumbsdown reactions you need
  if (message.reaction.emoji.name == message.guild.emojis.get('587070377696690177') 
  && reaction.count >= limit) message.reaction.message.delete();
  let tcontent = message.reaction.message.content
  let accept = message.guild.channels.get('587097086256873483')

  accept.send(`${tcontent} \`\`\`This server suggestion has been accepted by the community! Great job! Now a staff member just needs to forward it to username.\`\`\``)
}})

Не могу понять, как это сделать.

Ожидаемый результат: Бот видит, есть ли в сообщении 10 реакций, затем удаляет его и передает то же сообщение в другой канал. Фактический результат: Произошла ошибка Cannot read 'channel' property

1 Ответ

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

Сначала я хочу сказать, что у какого-то вопроса, например, , у этого есть то, что вы ищете.

Более того, документация по разногласиям и руководство содержат раздел ожидающих реакций .

Существует еще один вопрос, касающийся предмета или функции, используемой в руководстве иНемного поиска вы можете найти вопрос, подобный этому , который почти такой же, как и вы.

Однако, вот полный пример того, что вы хотите сделать.Вы можете добавить таймер к обещанию, а не просто ждать.Я не использовал коллектор реакции, потому что обещание немного быстрее, но вы также можете создать систему управления несколькими коллекторами или использовать client.on('messageReactionAdd').

const Discord = require('discord.js');
const config = require('./config.json');


const channelSuggestion = '<channelID>';
const channelSend = '<channelID>';
const emojiReact = '<emojiID>';
const prefixSuggestion = '!';
const reactionMax = 11;

const client = new Discord.Client();
client.on('ready', () => {
  console.log('Starting!');
  client.user.setActivity(config.activity);
});

client.on('message', (msg) => {
  if ((msg.content[0] === prefixSuggestion) && (msg.channel.type === 'dm')){
    sendSuggestion(msg);
  }
});


function filter(reaction) {
  return reaction.emoji.id === emojiReact;
}

function moveSuggestion(msg) {
  client.channels.get(channelSend).send(msg.content)
    .then(() => msg.delete()).catch(err => console.log(error));
}

function sendSuggestion(msg){
  client.channels.get(channelSuggestion).send(msg.content.substr(1))
    .then((newMsg) => newMsg.react(emojiReact))
    .then((newMsgReaction) => 
      newMsgReaction.message
      .awaitReactions(filter, {max: reactionMax})//, time: 15000, errors: ['time']})
      .then(collected => {
        moveSuggestion(newMsgReaction.message);
      })
      // .catch(collected => {
      //   console.log(`After a minute, only ${collected.size} out of 10 reacted.`);
      // })
     );
}

client.login(config.token)
  .then(() => console.log("We're in!"))
  .catch((err) => console.log(err));

Бот будет слушать сообщение dm(Я не знаю, как вы хотите, чтобы ваш бот отправил сообщение с предложением, поэтому я сделал свой собственный путь), который начинается с !.
Затем бот отправит сообщение на определенный канал, подождите Nчеловек, чтобы добавить реакцию, а затем отправит сообщение на другой канал.

...