如何在 discord.js 中使用审核日志的成员角色更新部分
Posted
技术标签:
【中文标题】如何在 discord.js 中使用审核日志的成员角色更新部分【英文标题】:How to work with member role update part of audit log in discord.js 【发布时间】:2021-07-08 15:32:07 【问题描述】:我目前正在制作一个机器人,通过在服务器上更新成员角色时发送消息来通知人们。我不知道如何设置应该正式为 client.on 部分的初始部分。 在这里,我展示了一些我认为应该可以工作的代码,但不幸的是它没有工作。
const Discord = require(‘discord.js’);
const client = Discord.Client();
client.on('guildMemberUpdate', (oldMember, newmember) =>
这是我期望做的:
【问题讨论】:
尝试在您的问题中添加更多内容。具体来说,您的代码。我对您要问的内容感到困惑,而一行代码并没有太大帮助。 我已经更新了应该显示更多信息的帖子。以及我期望做的其他机器人的屏幕截图。谢谢。 【参考方案1】:在我给你代码之前,我会告诉你我为实现它所采取的步骤。
提示:始终使用文档。 discord.js
文档帮助了我很多次。
流程:
-
设置指定的文字频道。在我的例子中,我手动获取了频道的 ID 并将其设置为变量
txtChannel
。您必须将我的数字字符串替换为您自己的频道 ID。
我缓存了“新”成员和“旧”成员的每个角色 ID。
检查新成员角色数组的长度是否比旧成员角色数组长。这表示该成员已获得角色。
创建了一个过滤函数,可以“取消”新旧角色数组共有的每个角色 ID。
抓取图标 URL - 我发现如果您尝试获取具有默认不和谐图标的用户的 URL,它将返回 NULL。要绕过这一点,您可以在线获取某种不可见的 PNG 并将其设置为占位符。否则,您会收到一条错误消息,提示您无法检索到正确的 URL 链接。
设置嵌入,并将其发送到文本频道!
注意:
起初,我不明白为什么机器人没有为角色发生变化的其他用户注册。然后我找到了this question on Stack Overflow。该链接指出您必须确保启用公会成员意图。只需按照链接中的说明进行操作,您就应该一切就绪!它有点过时(在术语上),所以当它引用“公会成员意图”时,它实际上现在是“服务器成员意图”。
代码:
它非常复杂,但它完成了工作。
client.on('guildMemberUpdate', (oldMember, newMember) =>
let txtChannel = client.channels.cache.get('803359668054786118'); //my own text channel, you may want to specify your own
let oldRoleIDs = [];
oldMember.roles.cache.each(role =>
console.log(role.name, role.id);
oldRoleIDs.push(role.id);
);
let newRoleIDs = [];
newMember.roles.cache.each(role =>
console.log(role.name, role.id);
newRoleIDs.push(role.id);
);
//check if the newRoleIDs had one more role, which means it added a new role
if (newRoleIDs.length > oldRoleIDs.length)
function filterOutOld(id)
for (var i = 0; i < oldRoleIDs.length; i++)
if (id === oldRoleIDs[i])
return false;
return true;
let onlyRole = newRoleIDs.filter(filterOutOld);
let IDNum = onlyRole[0];
//fetch the link of the icon name
//NOTE: only works if the user has their own icon, else it'll return null if user has standard discord icon
let icon = newMember.user.avatarURL();
const newRoleAdded = new Discord.MessageEmbed()
.setTitle('Role added')
.setAuthor(`$newMember.user.tag`, `$icon`)
.setDescription(`<@&$IDNum>`)
.setFooter(`ID: $IDNum`)
.setTimestamp()
txtChannel.send(newRoleAdded);
)
【讨论】:
谢谢!答案已被接受并投票。而且我发现需要打开 Discord Developer Portal 中 Privileged Gateway Intents 类别下的 Presence Intent 才能使用该功能。无论如何,谢谢你的时间。祝你有美好的一天 好的。很好,你找到了 Presence Intents。以上是关于如何在 discord.js 中使用审核日志的成员角色更新部分的主要内容,如果未能解决你的问题,请参考以下文章