首页 > 解决方案 > 有什么方法可以仅从用户对象中获取 dmChannel id?(discord.js v11)

问题描述

如果我想弄清楚如何获取 dmChannel 的 id,只有用户的对象,这样我就可以在用户的​​ dms 中批量删除,我该怎么做?我到目前为止的代码是:

let dm = client.users.get('123481923481234').createDM()

我得到的错误是:

TypeError: Cannot read property 'createDM' of undefined

我还尝试从公会成员列表中获取用户,这是代码:

        let dms = client.guilds.get('783871449466142750').then(guild=>{
          guild.members.get('432325763753050122').createDM().channel.id
        })

这得到了错误:

TypeError: client.guilds.get(...).then is not a function

有谁知道怎么了?任何帮助,将不胜感激!

标签: javascriptdiscorddiscord.js

解决方案


您是否尝试查看 discord.js 文档?这是 discord.js 准确记录如何使用 discord.js 中可用的每个方法和属性的网站,您只需查看文档即可在几秒钟内解决您在此问题中遇到的每个问题。文档是告诉您如何使用 discord.js 中所有内容的地方,应该是您寻找答案的第一个地方;当您完全陷入困境时,StackOverflow 更像是您遇到的最后一种情况,而这肯定不是其中一种情况。

在您遇到的第一个问题中,错误会告诉您一切:Cannot read property 'createDM' of undefined. 这告诉我们什么?client.users.get('123481923481234')它告诉我们undefined,或者换句话说,在您的机器人缓存中找不到具有该 ID 的用户(client.users代表机器人的用户缓存)。要么您使用了不正确的 ID,要么机器人的缓存根本没有更新以包含该特定用户。如果您想获取该用户,即使他们不在您的机器人缓存中,您可以使用client.fetchUser(). 此方法返回 a Promise,因此您需要使用.then()它来访问其异步数据。(.createDM()也是 aPromise所以你也需要 a.then()来访问创建DMChannel的)。它应该是这样的:

client.fetchUser('123481923481234', true).then(user => {

    user.createDM().then(dmchannel => {

        //Now do whatever you want with the ID
        var channelID = dmchannel.id;

    });

})

至于你尝试的第二件事,那是完全错误的。我不知道您是如何创建该代码的,但您肯定没有查看文档以查看您是否做得对;老实说,它看起来就像您只是猜到了,而没有检查它实际上是如何工作的。首先client.guilds.get()不返回 a Promise,所以你不要使用.then()它。.then()您应该已经知道这一点,因为您在.get()尝试的第一件事中没有使用。其次,如前所述,.createDM() 确实返回 a Promise,因此确实需要.then()您在尝试中未使用的 a 。在第二次尝试的上述两个部分中,你最终做了与你需要做的相反的事情。三、Promise.createDM()您提供一个DMChannel对象而不是DM对象,所以你试图DMChannel.channel.id在你应该做的时候做DMChannel.id. 修复所有这些可能会使第二次尝试起作用,但由于您的第一次尝试不起作用的原因,它可能仍然不起作用。如果是这种情况,您只需将.get()第二次尝试中的所有使用切换到其获取等效项,您可以在文档中轻松找到。为了一个简单易读的答案,我不会在第二个答案中使用获取等效项。所以这是你第二次尝试的样子:

var guild = client.guilds.get('783871449466142750');
guild.members.get('432325763753050122').createDM().then(dmchannel => {
    //Now do whatever you want with the ID
    var channelID = dmchannel.id;
});

以下是文档中解释如何使用这两个答案中的方法和对象的页面的链接。请访问这些页面并查看这些方法是如何工作的,并在将来当您不确定某事如何工作时、当您想弄清楚如何做某事或您已经开发的某事时参考文档discord.js 无法正常工作。文档中的大多数方法都带有提供的、易于理解的示例以及所有可用选项和参数的文档。如果文档无法回答,请仅在此处提问。

https://discord.js.org/#/docs/main/v11/class/Client?scrollTo=fetchUser https://discord.js.org/#/docs/main/v11/class/User?scrollTo=createDM https://discord.js.org/#/docs/main/v11/class/DMChannel https://discord.js.org/#/docs/collection/master/class/Collection?scrollTo=get


推荐阅读