Discord.JS 角色创建事件
Posted
技术标签:
【中文标题】Discord.JS 角色创建事件【英文标题】:Discord.JS roleCreate event 【发布时间】:2020-10-25 22:29:13 【问题描述】:client.on("roleCreate", role =>
const channel = role.guild.channels.cache.find(ch => ch.name === "welcome");
const embed = new Discord.MessageEmbed()
.setColor("DEFAULT")
.setDescription(`A new role has been created\nPermissions List: $role.permissions`)
channel.send(embed)
);
我正在尝试来自 Discord.JS 文档的不同事件,但是,当我遇到 roleCreate
事件时,我尝试了它,当我创建一个新角色时,它可以工作。但是对于role.permissions
;我不太清楚为什么会收到[object Object]
。我怎么可能解决这个问题?
Discord.JS:v12.2.0
【问题讨论】:
【参考方案1】:那是因为role.permissions
是一个对象:
https://discord.js.org/#/docs/main/stable/class/Permissions
结合join()
使用.toArray()
方法:
client.on("roleCreate", role =>
const channel = role.guild.channels.cache.find(ch => ch.name === "welcome");
const perms = role.permissions.toArray().join("\n");
const embed = new Discord.MessageEmbed()
.setColor("DEFAULT")
.setDescription(`A new role has been created\nPermissions List:\n$perms`)
channel.send(embed)
);
从CREATE_INSTANT_INVITE
获取它到Create Instant Invite
const perms = role.permissions.toArray().map(e =>
const words = e.split("_").map(x => x[0] + x.slice(1).toLowerCase());
return words.join(" ");
).join("\n");
【讨论】:
另一个问题,所以如果我得到[object Object]
,我应该始终使用toArray()
方法与join()
结合使用?
不,这取决于情况,总体而言,您应该尝试以某种方式将对象转换为字符串,可能是属性,可能是方法,一切都取决于。
它现在可以工作了,但是,一切都在 Caps 上。最后一个问题,我怎样才能使它而不是CREATE_INSTANT_INVITE
它将是Create Instant Invite
?到目前为止,我有这个if(role.permissions === "CREATE_INSTANT_INVITE") role.permissions("Create Instant Invite")
,但它仍然全部大写。
首先role.permissions === "CREATE_INSTANT_INVITE"
永远不会工作,看看我发送的链接。它是一个对象,为什么要将它与字符串进行比较?如果你想检查它是否有特定的权限使用role.permissions.has(permission_name)
,你可能不应该尝试改变标志的语法,如果你想以那种格式显示它,你需要映射每个。编辑了我的帖子以展示如何正式化
权限名称之间的_
现已消失。但是,所有字母仍然大写。我尝试将.toUpperCase
更改为.toLowerCase
,但唯一改变的字母大小是前面。所以是cREATE iNSTANT iNVITE
以上是关于Discord.JS 角色创建事件的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试创建一个角色时,它给了我一个错误(discord.js)