我正在服务器上建立一个新系统,我需要一种方法来检测某些msg上的响应,因此用户将做出响应以运行诸如send msg之类的功能...
我尝试使用反应收集器,但是我无法处理它,该方法将不适用于旧的消息。
我需要一些简单的东西来构建我的系统,因此我可以使用message.channel.send
或message.guild.createChannel
之类的不同功能,并且能够检测味精含量,这一点非常重要。
答案 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是一个实时数据库,是一种检测实时消息的简单方法。