在discord.js中,我可以使用DiscordBot将DirectMessage发送给用户吗?

时间:2018-03-19 07:56:21

标签: discord discord.js

我想通过Discord Bot向用户发送私信。

用户与机器人不在同一服务器中。

如果我可以使用author.sendMessage,我该如何初始化(查找)作者变量?

我可以找到具有用户ID的用户吗?

感谢您的阅读。

8 个答案:

答案 0 :(得分:7)

对于有兴趣使用Discord.js v12进行此操作的任何人,方法如下:

client.users.cache.get('<id>').send('<message>');

希望这对某人有帮助!

答案 1 :(得分:4)

  

用户与bot不在同一台服务器上。

  

我犯了一个错误,我想将Privatemessage发送给与我添加的机器人不在同一服务器中的用户.. [source]

可以做到 机器人需要至少有一个与用户共用的服务器才能发送直接消息 如果用户与机器人在同一台服务器上,那么您只能使用此帖子上的任何其他方法发送DM。
client.users.get("someID").send("someMessage");

答案 2 :(得分:0)

您的Client对象具有users属性,该属性包含与bot共享服务器的所有缓存用户。 因此,您可以使用<Client>.users.get('id')按用户身份获取用户。

另外,您应该考虑使用<User>.send('Hi'),因为sendMessage已被弃用。

答案 3 :(得分:0)

首先,sendMessage已弃用,将在进一步更新中删除。要发送消息,您可以使用send。要按用户ID和DM查找用户,您只需执行Client.users.get("User ID here").send("Message to Send")即可。我希望这个答案对你有用。

答案 4 :(得分:0)

我发现您应该尝试此操作。它应该工作!使用时请取出空间!

stdbool.h

答案 5 :(得分:0)

使用:mesage.author.send("your message!")

答案 6 :(得分:0)

这些答案很好,但您不能保证用户会使用 client.users.cache.get 进行缓存,尤其是意图更新会限制 Discord 发送给您的数据量。

一个完整的证明解决方案是这样的(假设环境是异步的):

const user = await client.users.fetch("<id>").catch(() => null);

if (!user) return message.channel.send("User not found:(");

await user.send("message").catch(() => {
   message.channel.send("User has DMs closed or has no mutual servers with the bot:(");
});

这个答案不仅可以完成这项工作,而且如果用户存在,它将首先尝试从缓存中获取用户,如果不存在,库将尝试从完全关闭缓存的 Discord API 中获取用户从破坏一切。我还添加了一些 .catch 语句以防止未经处理的拒绝并提供更好的响应!

类似于向消息作者发送 DM(假设消息对象被命名为“消息”):

await message.author.send("message").catch(() => {
    message.channel.send("User has DMs closed or has no mutual servers with the bot:(");
});

现在请不要那么依赖缓存(除非获取公会和频道,因为它们总是由库缓存),并且正如其他答案已经指出的那样,机器人必须至少有一个相互服务器用户和用户必须打开他们的 DM 并解锁机器人。

答案 7 :(得分:0)

在新版本的 discord.js 中只有这样:

bot.users.fetch('User ID').then(dm => {
    dm.send('Message to send')
})