用户DM中的awaitMessages()问题

时间:2019-07-25 16:23:19

标签: javascript discord.js

我正在为我的机器人创建一个报告功能,以便在调用该函数时,它将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

1 个答案:

答案 0 :(得分:0)

有一些小问题,让我们仔细看看:

问题1: DMChannel#awaitMessages参数为: Docs

因此,您需要添加适当的过滤器以仅接受来自报告者的消息,例如:

rMsg.channel.awaitMessages(res => res.content && res.author.id == , {

这将确保仅对带有内容和来自记者的消息进行签名。

问题2:DMChannel#awaitMessages返回一个Collection。 Docs

所以不是

.then((report) => {

使用

.then((collected) => {
    const report = collected.first(); // This will return the proper message object.