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 服务器欢迎的主要内容,如果未能解决你的问题,请参考以下文章