所以我制作了一个可以让用户静音和静音的机器人。主要问题是,在静音并取消静音后,角色不再回来 这是我尝试过的
const mainRole = [`791144820810842163` , `794825576602533898` , `791144908240060426` , `791144966474563624` , `791145298072305685` , `791145926344966185` , `791146191336505414` , `791146355552682034` , `792565793568587796` , `795357387794939904` , `795358283623432213` , `798804993468530699` , `791146747367653387`];
module.exports = {
name: `unjail`,
description: "this is unjail command!",
execute(message, args){
const target = message.mentions.users.first();
if (target) {
const memberTarget = message.guild.members.cache.get(target.id);
if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("You cant unjail person because you are not staff/co owner/owner");
let mainRole = message.guild.roles.cache.find(role => role.name === 'Peasant');
let muteRole = message.guild.roles.cache.find(role => role.name === 'Jailed');
let = message.guild.members.cache.get(target.id);
memberTarget.roles.remove(muteRole.id);
memberTarget.roles.add(mainRole.id);
message.channel.send(`<@${memberTarget.user.id}> has been unjailed`);
} else {
message.channel.send('Cant find that member!');
}
}
}
答案 0 :(得分:1)
我猜代码逻辑很好,它应该按预期工作。所以让我们描述它并尝试解决问题。
//extract mentioned user, by this command
const target = message.mentions.users.first();
if (target) {
//target mentioned user from discord server members
const memberTarget = message.guild.members.cache.get(target.id);
//check permissions for user that using the command
if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("You cant unjail person because you are not staff/co owner/owner");
//find roles Peasant in server cache that should be returned and role Jailed
let mainRole = message.guild.roles.cache.find(role => role.name === 'Peasant');
let muteRole = message.guild.roles.cache.find(role => role.name === 'Jailed');
//?????? What have been here?
let = message.guild.members.cache.get(target.id);
//return roles
memberTarget.roles.remove(muteRole.id);
memberTarget.roles.add(mainRole.id);
message.channel.send(`<@${memberTarget.user.id}> has been unjailed`);
} else {
message.channel.send('Cant find that member!');
}
按照正确的逻辑,这段代码实际上应该如何工作:
const mainRole = ['791144820810842163',...]
。通过 fs
模块或 any DBaaS for free-for-dev 写入 JSON 文件应该对您有所帮助。
如果你有一个拥有数千用户的庞大 Discord 服务器,我强烈推荐 Mongo Atlas。
module.exports = {
name: `unjail`,
description: "this is unjail command!",
execute(message, args){
//return exeption for lack of permission
if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("You cant unjail person because you are not staff/co owner/owner");
const target = message.mentions.users.first();
if (!target) return message.channel.send(`Can't find mentioned user!`);
const memberTarget = message.guild.members.cache.get(target.id);
if (!memberTarget) return message.channel.send(`Can't find mentioned user!`);
/**
* At this point, we should return from the store the original roles for a user to restore
* But since we don't have any storage, let's just return the only available role, Peasant, and remove the role Jailed
*/
let mainRole = message.guild.roles.cache.find(role => role.name === 'Peasant');
let muteRole = message.guild.roles.cache.find(role => role.name === 'Jailed');
memberTarget.roles.remove(muteRole.id);
memberTarget.roles.add(mainRole.id);
message.channel.send(`<@${memberTarget.user.id}> has been unjailed`);
}
}