Discord.js 服务器欢迎

Posted

技术标签:

【中文标题】Discord.js 服务器欢迎【英文标题】:Discord.js server welcome 【发布时间】:2018-10-06 09:35:04 【问题描述】:

我有一个 discord.js 机器人。 bot 是否可以 DM 将其添加到服务器的用户?

例子:

用户#0004:将机器人添加到服务器

用户#0004 的 DM 中的机器人:嗨,感谢您将我添加到服务器等。

这在 Discord.js / node.js 中是否可行? 如果是这样,有人可以帮我编码吗?谢谢! ;)

【问题讨论】:

*** 不是代码编写服务。请通读Help Center,尤其是How do I ask a good question? 如果您遇到特定问题,请彻底研究,在这里彻底搜索,如果您仍然卡住,请发布您的代码和问题描述。另外,请记住包括Minimum, Complete, Verifiable Example。人们会很乐意提供帮助 【参考方案1】:

您可以使用此代码轻松完成此操作,尽管此代码假定所有者添加了机器人:

client.on("guildCreate", guild => 
   guild.owner.send('Thanks! You can use +help to discover commands.')
);

奖金;将此代码添加到触发器以在控制台上记录新连接:

  // This event triggers when the bot joins a guild.
  console.log(`New guild joined: $guild.name (id: $guild.id). This guild has $guild.memberCount members!`);

【讨论】:

【参考方案2】:

不幸的是,仅使用 Discord.js 是不可能的 您可以最终做的是拥有一个使用 Discord OAuth 的网站,用户需要使用他的帐户登录,然后从那里生成 邀请机器人的链接,然后用户将机器人添加到服务器。但是这仍然不会是完美的,例如,如果 2 个用户同时邀请机器人?机器人只会加入一次,但不会没有办法找出真正邀请的人。

您可能可以尝试其他方法,例如尝试查找名为大厅或一般或类似的频道,然后将消息发送到那里。

【讨论】:

这不是真的。我清楚地记得 discord.js 突击队有一种向用户发送 dm 的方法,并且许多机器人在加入时会发送 dm 发送服务器范围的 dm。 @AidanelGoste 问题是向邀请机器人访问服务器的用户发送 DM。而不是当新用户加入服务器时。 我的错,我当时可能很累,误读了你的答案。【参考方案3】:

我也去过那里,但不幸的是,您不能只获得添加您的机器人的人的 ID。但肯定有解决这个问题的办法。我也有一个 Discord bot,当 bot 加入新服务器时,它会找到它可以说话的第一个频道,检查它是否是文本频道,并且该 bot 有权在那里说话,然后在找到了频道。我是这样做的:

client.on("guildCreate", guild => 
  var found = false;
  guild.channels.forEach(function(channel, id) 
      // If a channel is already found, nothing more needs to be done
      if(found == true || channel.type != "text") 
        return;
      
      // If the channel isn't found and the bot has permission to 
      // send and read messages in the channel, send a welcome message there
      if(guild.me.permissionsIn(channel).has("SEND_MESSAGES") && guild.me.permissionsIn(channel).has("VIEW_CHANNEL")) 
        found = true;
        return channel.send("Thanks for inviting me, blablabla")
      
  )
);

对我来说它完美无缺,如果您对代码有任何问题,请告诉我。

【讨论】:

【参考方案4】:

这可以通过客户端的guildCreate 事件来实现。所以:

<client>.on('guildCreate', guild => 
   guild.owner.send("Thanks for adding me to your server!")
)

但是,您可能会遇到Cannot read property 'send' of null 的错误,这是因为公会的所有者是可空属性,因为它可能不在缓存中。要解决此问题,您可以利用 guild.members.fetch(guild.owner.user.id) 将成员放入缓存。但是,您确实需要等待返回的承诺:

<client>.on('guildCreate', guild => 
   let owner = await guild.members.fetch(guild.owner.user.id)
   owner.send("Thanks for adding me to your server!")
)

【讨论】:

【参考方案5】:

遗憾的是,您无法获取机器人邀请的人,但是,您可以获得机器人被邀请的服务器的所有者(这是大多数机器人),您可以这样写:

client.on("guildCreate", guild => 
     guild.owner.send('Thanks for adding me!')
);

【讨论】:

【参考方案6】:

试试这样的

const Discord = require("discord.js");
const client = new Discord.Client();

client.on("guildCreate", server => 
  let embed = new Discord.RichEmbed() // Makes a pretty embed
    .setTitle("Thanks for adding me to your server!")
    .setDescription("something here...")
    .setColor("RANDOM")
    .setFooter("Copyright ExampleBot.com");
  server.owner.send(embed);
);

client.login("token");

【讨论】:

【参考方案7】:

首先,我们需要检查 bot 是否已加入公会。这可以通过使用以下代码来完成:

client.on("guildMemberAdd", (guild) => 

);

在我们这样做之后,我们应该真正向所有者发送消息:

client.on("guildMemberAdd", (guild) => 
    guild.owner.send(`Hello, thanks for adding me to $guild.name!`);

【讨论】:

以上是关于Discord.js 服务器欢迎的主要内容,如果未能解决你的问题,请参考以下文章

如何在 discord.js 上为 discord 服务器的新成员发送欢迎消息?

当有人使用 discord.js 加入服务器时发送欢迎消息

将欢迎消息嵌入到 discord.js

检测欢迎消息 discord.js

欢迎消息未通过 Discord.js 发送

Discord.js 在欢迎时提及玩家