javascript - Discord.js - 你如何记录角色变化?
问题描述
我正在 Discord.js v12.2.0 上的 Discord 机器人上设置服务器日志,目前正在尝试设置角色日志记录。我在互联网上翻了一下,我只能在旧版本的 Discord.js 上找到解决方案,这显然不适用于 v12.2.0。我已经设置了 guildMemberUpdate 事件来记录昵称更改,但我根本不知道如何为角色执行此操作。它可能只是超级简单,但我不知道我会怎么做。
到目前为止,这是我的代码:
client.on('guildMemberUpdate', (oldMember, newMember) => {
if (!oldMember.nickname && newMember.nickname) {
const membernewnicklog = new Discord.MessageEmbed()
.setAuthor(`${newMember.user.tag}`, `${newMember.user.displayAvatarURL({ format: "png", dynamic: true })}`)
.setDescription(`**${newMember} nickname added**`)
.setFooter(`${newMember.user.username}'s ID: ${newMember.id}`)
.setTimestamp()
.setColor('#ffff00')
.addField("New nickname", newMember.nickname)
client.channels.cache.get('736996028787589201').send(membernewnicklog);
return;
}
if (oldMember.nickname && !newMember.nickname) {
const memberremovenicklog = new Discord.MessageEmbed()
.setAuthor(`${oldMember.user.tag}`, `${oldMember.user.displayAvatarURL({ format: "png", dynamic: true })}`)
.setDescription(`**${oldMember} nickname removed**`)
.setFooter(`${oldMember.user.username}'s ID: ${oldMember.id}`)
.setTimestamp()
.setColor('#f04747')
.addField("Old nickname", oldMember.nickname)
client.channels.cache.get('736996028787589201').send(memberremovenicklog);
return;
}
if (oldMember.nickname && newMember.nickname) {
const memberchangednicklog = new Discord.MessageEmbed()
.setAuthor(`${newMember.user.tag}`, `${newMember.user.displayAvatarURL({ format: "png", dynamic: true })}`)
.setDescription(`**${newMember} nickname changed**`)
.setFooter(`${newMember.user.username}'s ID: ${newMember.id}`)
.setTimestamp()
.setColor('#ff4500')
.addField("Before", oldMember.nickname)
.addField("After", newMember.nickname);
client.channels.cache.get('736996028787589201').send(memberchangednicklog);
return;
}
});
这就是我想要的:https ://imgur.com/a/FRbTpGQ (来自另一个机器人的示例)
任何帮助将不胜感激。谢谢!
解决方案
client.on("guildMemberUpdate", (oldMember, newMember) => {
// Old roles Collection is higher in size than the new one. A role has been removed.
if (oldMember.roles.cache.size > newMember.roles.cache.size) {
// Creating an embed message.
const Embed = new discord.MessageEmbed();
Embed.setColor("RED");
Embed.setAuthor(newMember.user.tag, newMember.user.avatarURL());
// Looping through the role and checking which role was removed.
oldMember.roles.cache.forEach(role => {
if (!newMember.roles.cache.has(role.id)) {
Embed.addField("Role Removed", role);
}
});
client.channels.cache.get("ChannelID").send(Embed);
} else if (oldMember.roles.cache.size < newMember.roles.cache.size) {
const Embed = new discord.MessageEmbed();
Embed.setColor("GREEN");
Embed.setAuthor(newMember.user.tag, newMember.user.avatarURL());
// Looping through the role and checking which role was added.
newMember.roles.cache.forEach(role => {
if (!oldMember.roles.cache.has(role.id)) {
Embed.addField("Role Added", role);
}
});
client.channels.cache.get("ChannelID").send(Embed);
}
});
推荐阅读
- reactjs - 如何使链接与 card-img-overlay React 一起使用
- groovy - Camunda 通过内联脚本在控制台上打印
- reactjs - 如何在 IIS 上使用 ASP .Net Web API 部署 React 应用程序?
- python - Azure python SDK 在虚拟机中运行 powershell 脚本
- c# - 使用 MailSystem.Net 的带有附件符号的 S/Mime
- android-studio - 在 vscode 中运行颤振应用程序并得到此错误无法确定任务':app:compileDebugJavaWithJavac'的依赖关系
- google-chrome-extension - 配置 chrome 扩展而不制作自定义版本
- reactjs - 在 React 的上下文中传递带参数的函数
- node.js - 如何通过node js下载outlook附件
- python - 如何在 Python 中扩展 ChainerRL 中的代理类