晚上好,尝试过建立一个系统来知道谁邀请了某人,这个邀请有多少用途(但是我没有成功,所以我打电话给您)...当新成员到达Discord时。 我希望通过邮件发送此邮件。
提前谢谢!
答案 0 :(得分:1)
要跟踪新成员何时加入服务器,您可以收听客户端的guildMemberAdd
事件。
client.on('guildMemberAdd', member => {
// Code in here is executed whenever
// someone joins a server the bot is
// also in.
});
1。。要发送消息,您首先必须获取将所述消息发送给的渠道。 Collection中有GuildChannel个Guild.channels
中的一个。除非您在下一步中使用通道的ID,否则应过滤集合以仅包含TextChannel和Collection.filter
的集合。
const channels = member.guild.channels.filter(channel => channel.type === 'text');
2。。假设您具有频道ID,则可以使用Map.get()
(集合是地图,而地图不是集合)来检索频道。否则,您可以使用Collection.find()
找到它,或者只需使用Collection.first()
选择第一个。
const channel = channels.get('someID');
或
const channel = channels.find(channel => channel.name === 'welcome');
或
const channel = channels.first();
3。。要向频道发送消息,可以使用TextChannel.send()
。请记住,它返回一个Promise。
channel.send(`Hello, ${member}!`)
.catch(console.error);
client.on('guildMemberAdd', member => {
const channels = member.guild.channels.filter(channel => channel.type === 'text');
const channel = channels.get('someID');
if (!channel) return console.error('Unable to find specified welcome channel!');
channel.send(`Hello, ${member}!`)
.catch(console.error);
});
或者,您可以创建一个Webhook,它将更加高效。
1。。要在Discord中创建Webhook,请导航至频道的选项,依次单击Webhooks
和Create Webhook
。根据需要自定义Webhook,然后复制链接。
https://discordapp.com/api/webhooks/THIS_IS_THE_ID/THIS_IS_THE_TOKEN
2。。回到您的代码,您可以通过其构造函数创建一个Webhook Client。
const webhookID = 'pasteTheIDHere';
const webhookToken = 'pasteTheTokenHere';
const webhook = new Discord.WebhookClient(webhookID, webhookToken);
3。。然后,您只需通过Webhook的send
方法将消息直接发送到渠道即可。
webhook.send(`Hello ${member}!`)
.catch(console.error);
client.on('guildMemberAdd', member => {
const webhookID = 'pasteIDHere';
const webhookToken = 'pasteTokenHere';
const webhook = new Discord.WebhookClient(webhookID, webhookToken);
webhook.send(`Hello, ${member}!`)
.catch(console.error);
});
如果您没有直接访问Discord服务器的权限,则可以使用TextChannel.createWebhook()
为您创建Webhook。然后,您将为每个行会的“欢迎” Webhook存储ID和令牌,并使用上面的代码。
要跟踪用于加入服务器的邀请,您必须跟踪邀请本身。
1。。在客户端的ready
事件中,创建一个新对象来容纳Invite s。
client.on('ready', () => {
client.invites = {};
});
2。。循环浏览客户协会,并将每个邀请添加到对象中。您可以使用Guild.fetchInvites()
(返回承诺)在公会中获取邀请。
for (const [id, guild] of client.guilds) {
guild.fetchInvites()
.then(invites => client.invites[id] = invites)
.catch(console.error);
}
3。。返回guildMemberAdd
事件,您需要检查使用了哪个邀请。您可以通过检查它是否存在或正在使用中的哪个(Invite.uses
)来做到这一点。
member.guild.fetchInvites()
.then(invites => {
const existing = client.invites[member.guild.id];
client.invites[member.guild.id] = invites;
const invite = invites.find(invite => !existing.get(invite.code) || existing.get(invite.code).uses < invite.uses);
})
.catch(console.error);
client.on('ready', () => {
client.invites = {};
for (const [id, guild] of client.guilds) {
guild.fetchInvites()
.then(invites => client.invites[id] = invites)
.catch(console.error);
}
});
// Any time the client joins a guild, you should also add their invites to the cache.
client.on('guildCreate', guild => {
guild.fetchInvites()
.then(invites => client.invites[id] = invites)
.catch(console.error);
});
client.on('guildMemberAdd', member => {
member.guild.fetchInvites()
.then(invites => {
const existing = client.invites[member.guild.id];
client.invites[member.guild.id] = invites;
const inviteUsed = invites.find(invite => !existing.get(invite.code) || existing.get(invite.code).uses < invite.uses);
const channels = member.guild.channels.filter(channel => channel.type === 'text');
const channel = channels.get('someID');
if (!channel) return console.error('Unable to find specified welcome channel!');
channel.send(`${member} joined, using an invite from ${inviteUsed.inviter} (${inviteUsed.uses} use${inviteUsed.uses !== 1 ? 's' : '')!`);
})
.catch(console.error);
});