从 json 文件加入时添加角色 (autorole)
Adding a role (autorole) on join from a json file
我是 JS 的新手,为了学习我决定为 Discord 制作一个机器人,我学到了很多东西并且正在继续学习。我有一个 "autorole" 的想法。我知道传统的做法。
bot.on('guildMemberAdd', member => {
var role = member.guild.roles.find('name', 'Member');
member.addRole(role);
});
但是,我希望它从 .json 文件中获取角色。其余代码没问题,我可以用 >autorole Role
写入 json。我只是不确定如何将 json 合并到 member.addRole(role)
.
我的 json 看起来像这样:
{
"505107608391254026": {
"role": "Staff"
}
}
我尝试过并认为可行的方法如下。请记住,在有人决定因为我尝试学习和失败而将我列入黑名单之前,我是一个新手。
首先我尝试了这个:
let auto = JSON.parse(fs.readFileSync("./Storage/autorole.json", "utf8"));
bot.on('guildMemberAdd', member => {
var role = member.guild.roles.find('name', auto.role);
member.addRole(role);
});
失败后,我尝试了这个。
let auto = JSON.parse(fs.readFileSync("./Storage/autorole.json", "utf8"));
bot.on('guildMemberAdd', member => {
var role = auto.role;
member.addRole(role);
});
我在我的 discord 机器人中使用相同的方法。根据我从您的代码中得知的情况,您在 json 文件中的不和谐 ID 下列出了每个用户的角色。
编辑:我没有意识到那是公会 ID。我更改了以下代码以适应这一点。
如果您还没有将文件定义为可用变量,您将希望开始:
var jsonPath = 'path to json here';
var jsonRead = fs.readFileSync(jsonPath);
var jsonFile = JSON.parse(jsonRead);
接下来,在 json 文件中定义公会的 id:
bot.on('guildMemberAdd', member => {
var guildId = member.guild.id;
let autoRole = jsonFile[guildId]
})
完成后,我们现在可以将我们想要赋予的角色定义为 autoRole.role
我的完整代码是:
var jsonPath = 'path to json here';
var jsonRead = fs.readFileSync(jsonPath);
var jsonFile = JSON.parse(jsonRead);
bot.on('guildMemberAdd', member => {
var guildId = member.guild.id;
let autoRole = jsonFile[guildId]
let myRole = member.guild.roles.find(role => role.name === autoRole.role);
member.addRole(myRole)
})
编辑:
为了帮助解决您在评论中提出的问题,您可以添加 if (!jsonFile[guildId])
和 else 语句。换句话说,如果您的对象不存在,请执行此操作。
代码:
var jsonPath = 'path to json here';
var jsonRead = fs.readFileSync(jsonPath);
var jsonFile = JSON.parse(jsonRead);
bot.on('guildMemberAdd', member => {
var guildId = member.guild.id;
if (!jsonFile[guildId]) {
console.log('Role could not be found')
} else {
let autoRole = jsonFile[guildId]
let myRole = member.guild.roles.find(role => role.name === autoRole.role);
member.addRole(myRole)
}
})
我是 JS 的新手,为了学习我决定为 Discord 制作一个机器人,我学到了很多东西并且正在继续学习。我有一个 "autorole" 的想法。我知道传统的做法。
bot.on('guildMemberAdd', member => {
var role = member.guild.roles.find('name', 'Member');
member.addRole(role);
});
但是,我希望它从 .json 文件中获取角色。其余代码没问题,我可以用 >autorole Role
写入 json。我只是不确定如何将 json 合并到 member.addRole(role)
.
我的 json 看起来像这样:
{
"505107608391254026": {
"role": "Staff"
}
}
我尝试过并认为可行的方法如下。请记住,在有人决定因为我尝试学习和失败而将我列入黑名单之前,我是一个新手。
首先我尝试了这个:
let auto = JSON.parse(fs.readFileSync("./Storage/autorole.json", "utf8"));
bot.on('guildMemberAdd', member => {
var role = member.guild.roles.find('name', auto.role);
member.addRole(role);
});
失败后,我尝试了这个。
let auto = JSON.parse(fs.readFileSync("./Storage/autorole.json", "utf8"));
bot.on('guildMemberAdd', member => {
var role = auto.role;
member.addRole(role);
});
我在我的 discord 机器人中使用相同的方法。根据我从您的代码中得知的情况,您在 json 文件中的不和谐 ID 下列出了每个用户的角色。
编辑:我没有意识到那是公会 ID。我更改了以下代码以适应这一点。
如果您还没有将文件定义为可用变量,您将希望开始:
var jsonPath = 'path to json here';
var jsonRead = fs.readFileSync(jsonPath);
var jsonFile = JSON.parse(jsonRead);
接下来,在 json 文件中定义公会的 id:
bot.on('guildMemberAdd', member => {
var guildId = member.guild.id;
let autoRole = jsonFile[guildId]
})
完成后,我们现在可以将我们想要赋予的角色定义为 autoRole.role
我的完整代码是:
var jsonPath = 'path to json here';
var jsonRead = fs.readFileSync(jsonPath);
var jsonFile = JSON.parse(jsonRead);
bot.on('guildMemberAdd', member => {
var guildId = member.guild.id;
let autoRole = jsonFile[guildId]
let myRole = member.guild.roles.find(role => role.name === autoRole.role);
member.addRole(myRole)
})
编辑:
为了帮助解决您在评论中提出的问题,您可以添加 if (!jsonFile[guildId])
和 else 语句。换句话说,如果您的对象不存在,请执行此操作。
代码:
var jsonPath = 'path to json here';
var jsonRead = fs.readFileSync(jsonPath);
var jsonFile = JSON.parse(jsonRead);
bot.on('guildMemberAdd', member => {
var guildId = member.guild.id;
if (!jsonFile[guildId]) {
console.log('Role could not be found')
} else {
let autoRole = jsonFile[guildId]
let myRole = member.guild.roles.find(role => role.name === autoRole.role);
member.addRole(myRole)
}
})