首页 > 解决方案 > DM 中的 AwaitMessages 不起作用 Discord.js

问题描述

我正在尝试在用户的 DM 中运行 awaitMessage 函数,但它不起作用。任何人都可以帮忙吗?

错误:TypeError:无法读取未定义的属性“awaitMessages”

const discord = require('discord.js')

module.exports = {
  name: "team",
  description: "You can create a new team",
  usage: "team",
  category: "info",
  run: (client, message) => {

      const member = message.member; 
      const user = message.author;

      member.send("Do you want continue ? (Yes/No)");
      message.dmChannel.awaitMessages(user == message.author, {max: 1 ,  time: 40000})
      .then (collect => {
        if (collected.first().content.toLowerCase() == 'yes') {
       member.send("Test") 
       } else {
       member.send("Test")
       }
       });
  }
}```

标签: javascriptnode.jsdiscord.js

解决方案


首先,我建议对多个 awaitMessages 使用 async/await,因为代码会变得非常嵌套且难以查看。

代替

message.dmChannel.awaitMessages(user == message.author, { max: 1 ,  time: 40000 })

利用

let collected = await message.dmChannel.awaitMessages(filter, { max: 1, time: 400000 });

如果您试图只允许触发命令的用户通过过滤器,只需匹配如下 ID:

let filter = (m) => { m.author.id == message.author.id; }

最后,如果用户无法回复,只需使用 try/catch 块,就像这样

let filter = (m) => {
  m.author.id == message.author.id;
};
try {
  let collected = await message.dmChannel.awaitMessages(filter, {
    max: 1,
    time: 400000,
  });
  let response = collected.first().content.toLowerCase();
  if (response == "yes") {
    member.send("Test");
  } else {
    member.send("Test");
  }
} catch (e) {
  return message.reply("Looks like you took too long to reply!");
}

我希望这可以为您服务。


推荐阅读