【发布时间】:2021-06-11 08:14:05
【问题描述】:
有没有什么方法可以在不需要数据库和/或 Discord.js 上的 JSON 文件的情况下正确保存用户的角色历史记录?我想创建一个函数来记录用户在命令开头所拥有的角色,并在触发特定函数后将其返回。
【问题讨论】:
标签: discord discord.js
有没有什么方法可以在不需要数据库和/或 Discord.js 上的 JSON 文件的情况下正确保存用户的角色历史记录?我想创建一个函数来记录用户在命令开头所拥有的角色,并在触发特定函数后将其返回。
【问题讨论】:
标签: discord discord.js
有一种简单的方法可以在 Discord 上保存用户的角色历史记录,而无需数据库和/或任何 JSON 文件,您必须在代码中添加几行才能执行此操作。
您首先需要确保您的 Discord 机器人在 Discord 开发者门户面板中启用了“Privileged Gateway Intents”,这将大大提高机器人缓存获取任务的准确性。接下来,为用户提及或用户 ID 创建一个常量,如下所示:
const saveRolesFor = (message.mentions.members.first() || message.guild.members.cache.get(args[0]));
使用这 2 个参数,您将能够声明用户的 id 或提及用户。
然后您必须将指定用户的角色保存在另一个常量变量中,如下所示:
const roleHistory = saveRolesFor.roles.cache.map(r => r.id);
映射角色是最好的做法是因为角色缓存包含其他元素,除了实际的用户角色之外,映射它们只会包含用户的实际角色,从而防止潜在的问题。
现在您必须说明您希望用户拥有的新角色,如下所示:
let roleToAdd = message.guild.roles.cache.find(r => r.name === 'Role');
是时候删除所有以前的角色并将roleToAdd 添加到用户,您应该这样做:
await(saveRolesFor.roles.set([roleToAdd.id]));
您将需要set 用户的角色,因为此功能会自动删除用户拥有的任何其他角色,并添加您声明的单个角色,您不再需要.remove 和.add 功能。
执行完这些功能后,您可以发挥创意,在某些功能完成后将角色历史添加回来。 一个非常简单的示例是在发送消息后将角色添加回用户,例如:
message.channel.send(`The roles for ${saveRolesFor} have been added back!`)
.then(saveRolesFor.roles.set(roleHistory));
用户之前的所有角色都将成功添加,roleToAdd 将被删除,因为您 .set 是用户的角色历史,意味着您仅添加了那些特定角色。 .then 函数在消息发送到频道后调用 roleHistory set,您可以对其进行修改以适合您尝试从代码中获取的内容。
这不是重新添加角色的最佳方式,因为它需要不到一秒钟的时间,但上面显示的功能在创建类似命令时非常有用。
希望对您有所帮助!
【讨论】: