有没有办法检测特定味精上的味精反应?

时间:2019-06-03 13:28:58

标签: javascript node.js discord discord.js

我正在服务器上建立一个新系统,我需要一种方法来检测某些msg上的响应,因此用户将做出响应以运行诸如send msg之类的功能...

我尝试使用反应收集器,但是我无法处理它,该方法将不适用于旧的消息。 我需要一些简单的东西来构建我的系统,因此我可以使用message.channel.sendmessage.guild.createChannel之类的不同功能,并且能够检测味精含量,这一点非常重要。

2 个答案:

答案 0 :(得分:2)

反应收集器确实可以处理在客户端登录之前已经发送的消息。但是,必须跟踪并提取这些消息。

示例系统(未测试,仅是示例)

messages.json

[
  {
    "guild": "guildIDhere",
    "channel": "channelIDhere",
    "message": "messageIDhere",
    "filter": "(reaction, user) => reaction.emoji.name === '?' && user.id !== client.user.id;",
    "options": { "max": 1 },
    "callback": "collected => console.log(collected);"
  }
]

index.js

const messages = require('./messages.json'); // Path may vary
const fs = require('fs');

client.on('ready', () => {
  const deleteQueue = [];

  for (let i = 0; i < messages.length; i++) {
    const guild = client.guilds.get(messages[i].guild);
    if (!guild) {
      deleteQueue.push(i);
      continue;
    }

    const channel = guild.channels.get(messages[i].channel);
    if (!channel) {
      deleteQueue.push(i);
      continue;
    }

    const message = channel.fetchMessage(messages[i].message);
    if (!message) {
      deleteQueue.push(i);
      continue;
    }

    message.createReactionCollector(eval(messages[i].filter), messages[i].options)
      .then(eval(messages[i].callback))
      .catch(console.error);

  }

  if (deleteQueue.length > 0) {
    for (let i = 0; i < deleteQueue.length; i++) messages.splice(deleteQueue[i], 1);
    fs.writeFileSync('./message.json', JSON.stringify(messages));
    console.log(`${deleteQueue.length} message(s) are no longer available.`);
  }
});

稍后创建收集器:

message.channel.send('React with :smile:')
  .then(m => {
    const filter = ...;
    const options = ...;
    const callback = ...;
    m.createReactionCollector(filter, options)
      .then(callback)
      .catch(...);

    messages.push({
      guild: message.guild.id,
      channel: message.channel.id,
      message: message.id,
      filter: `${filter}`,
      options: options,
      callback: `${callback}`
    });

    fs.writeFileSync('./messages.json', JSON.stringify(messages));
  })
  .catch(console.error);

答案 1 :(得分:0)

我认为您可以使用RethinkDB保存消息。 RethinkDB是一个实时数据库,是一种检测实时消息的简单方法。

https://www.rethinkdb.com/