javascript - 使用 discord.js 创建角色
问题描述
我正在尝试使用不和谐的 API 来制作一个机器人,它将创建一个角色并向其中添加一个人。我不确定为什么我的代码不起作用。
async function role(message){
try {
let guild = client.guild.get(236824834066219009);
guild.roles.create({
data:{
name:"asd",
color:"grey",
},
reason:"asd",
})
let role = message.guild.roles.find(r => r.name === "asd");
let user = 236824834066219009;
await user.addrole(role).catch(console.error);
} catch (error) {
console.log(error);
}
}
解决方案
您的代码无法正常工作的原因是因为自discord.js
v12 以来发生了很多变化。
你不能再使用.find()
了roles
,你必须先访问他们cache
,所以你需要替换let role = message.guild.roles.find(r => r.name === "asd");
为let role = message.guild.roles.cache.find(r => r.name === "asd");
您也不能使用添加角色addrole()
,您需要使用,roles.add()
因此您需要替换user.addrole(role)
为user.roles.add(role)
您还可以通过不必找到 来提高代码效率role
,您可以使用.then()
将角色添加到 中user
,您也可以将角色与 一起作为函数中的参数传递guild
,如下所示:
async function role(message, user, guild){
try {
guild.roles.create({
data:{
name:"asd",
color:"grey",
},
reason:"asd",
}).then((role) => user.roles.add(role)).catch(console.error);
} catch (error) {
console.log(error);
}
}
推荐阅读
- r - 在函数中使用 fromJSON 来捕获 URL 的数据
- javascript - Chart.js 无法在我的浏览器上运行
- c# - 在 Unity3D 游戏中控制广告之间的时间
- c# - 在 WPF 中绑定失败
- javascript - SQL 一次搜索多个 id - Node/Express
- vba - 引用下一行进行评估和索引匹配
- android - 有没有像 Apple 的“使用 Wi-Fi Calling 拨打电话”之类的应用程序,我可以在 Android 中制作一个应用程序,比如苹果的吗?
- python - 检索和使用 tkinter 组合框选择
- nuget - 无法在 NuGet 包中包含 .pdb 文件
- build - 支持文件名空间的简单构建系统?