我正在为我的机器人创建一个报告功能,以便在调用该函数时,它将DM要求用户的报告,而当用户提供该报告时,它将获取该报告并将其嵌入到服务器内的预定义通道中。 / p>
message.author.send("Please send your report here in a single message below 1000 characters in length. Provide the tag of the User, Reason and Evidence(optional). This instance shall expire in 120 seconds")
.then((rMsg) => {
rMsg.channel.awaitMessages(res => res.content, {
max: 1,
time: 120000,
errors: ['time']
})
.then((report) => {
console.log(report);
let dmrEmbed = new discord.RichEmbed()
.setColor('#8E5BC5')
.setTitle('User Report (Type: DM)')
.addField('Reporter :', `<@${message.author.id}> ID: ${message.author.id}`)
.addField('Report Content:', `${report.content}`)
.setFooter(message.createdAt);
rMsg.channel.send('Your report has been received. You may be contacted for further information.');
rChannel.send(dmrEmbed);
}).catch(() => {
rMsg.channel.send('This instance has expired.');
});
});
return;
此代码存在两个主要问题。它应该接受DM中用户的输入,但是当它向用户发送第一条要求报告的消息时,此消息将立即发布“已收到您的报告”消息。当我用控制台登录report
时,我可以看到该机器人已将其自己的第一条消息作为答复。
第二个问题是,即使报表中包含带有消息的内容元素,report.content
也会返回undefined
。
答案 0 :(得分:0)
有一些小问题,让我们仔细看看:
问题1: DMChannel#awaitMessages参数为:
因此,您需要添加适当的过滤器以仅接受来自报告者的消息,例如:
rMsg.channel.awaitMessages(res => res.content && res.author.id == , {
这将确保仅对带有内容和来自记者的消息进行签名。
问题2:DMChannel#awaitMessages返回一个Collection。
所以不是
.then((report) => {
使用
.then((collected) => {
const report = collected.first(); // This will return the proper message object.