node.js - 发送包含多个信息的消息
问题描述
晚上好,已经尝试建立一个系统来知道谁邀请了某人,这个邀请有多少用途(但我没有成功,所以我打电话给你)......一旦有新成员到达 Discord。我希望在消息中发送此消息。
先感谢您 !
解决方案
跟踪新成员。
要跟踪新成员何时加入服务器,您可以监听客户端的guildMemberAdd
事件。
client.on('guildMemberAdd', member => {
// Code in here is executed whenever
// someone joins a server the bot is
// also in.
});
通过您的客户端发送消息。
1.为了发送消息,您首先必须获取发送该消息的通道。GuildChannel的集合可用于. 除非您在下一步中使用频道 ID,否则您应该过滤 Collection 以仅包含TextChannel和.Guild.channels
Collection.filter
const channels = member.guild.channels.filter(channel => channel.type === 'text');
2.假设你有频道的ID,你可以使用Map.get()
(一个Collection是一个Map,但一个Map不是一个Collection)来检索频道。否则,您可以使用 找到它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 发送消息。
或者,您可以创建一个更高效的 Webhook。
1.要在 Discord 中创建 Webhook,请导航至频道选项,单击Webhooks
,然后单击Create Webhook
。根据需要自定义 Webhook,然后复制链接。
https://discordapp.com/api/webhooks/THIS_IS_THE_ID/THIS_IS_THE_TOKEN
2.回到您的代码,您可以通过其构造函数创建一个Webhook 客户端。
const webhookID = 'pasteTheIDHere';
const webhookToken = 'pasteTheTokenHere';
const webhook = new Discord.WebhookClient(webhookID, webhookToken);
3.send
然后,您可以简单地通过 Webhook 的方法直接向频道发送消息。
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。
client.on('ready', () => {
client.invites = {};
});
2.循环访问客户的公会,并将来自每个公会的邀请添加到对象中。Guild.fetchInvites()
您可以使用(returns a Promise)获取公会内的邀请。
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);
});
推荐阅读
- python - 如何使用 DTW - 动态时间规整在 python 中对齐多个时间序列(不仅仅是 2 个)?
- android - 使用 Android 版 Aeron 时
- c++ - 阵列功率谱的 0 次谐波问题
- avaloniaui - 如何修改 ListBoxItem 字体属性?
- python-3.x - Azure 管道中的 Selenium 测试失败
- javascript - 个人用户(浏览器)能否获取事件回调google calendar api?
- python - 如何更新我的自动完成组合框的完整值
- .net - 如何解决网络和客户端之间的 EIP 版本冲突?
- regex - 正则表达式匹配组号
- java - 如何为 Selenium Java 自动安装正确版本的 chromedriver