我正在尝试编写一个机器人,该机器人可以编辑角色“ LFT”的许可权,并在提及该角色时做出其可提及的许可权false
。但是,该代码不执行任何操作。我刚得到一个DeprecationWarning
。
如果有人可以帮助我,那将真的很棒。
let lftrole = message.guild.roles.find("name", "LFT");
if (message.content.includes('@LFT')) {
lftrole.edit({
mentionable: false
});
console.log(`Role mentionable: False`);
.then(
setTimeout(() => {
let lftrole = message.guild.roles.find("name", "LFT");
lftrole.edit({
mentionable: true
});
console.log(`Role mentionable: True`);
}, 30000)
);
}
答案 0 :(得分:1)
您的代码不起作用,因为您正在检查message.content
是否包含'@LFT'
:提及的内容呈现为@RoleName
,但对于漫游器来说,它们看起来像<@&RoleID>
。
您可以尝试解析该模式,但是使用Message.mentions
会更容易。我会这样:
let lftrole = message.guild.roles.find("name", "LFT");
function changeRole(value = true) {
lftrole.edit({
mentionable: value
});
console.log(`LFT role mentionable: ${value}`);
}
if (message.mentions.roles.has(lftrole.id)) {
changeRole(false);
setTimeout(changeRole, 30000);
}
注意:您获得的DeprecationWarning
来自使用Collection.find()
查找角色的时间。不建议使用的方法使您可以使用返回一个元素是否可以接受的函数:这样,您可以组合更多条件。方法如下:
// Instead of using:
let role = guild.roles.find("name", "myRole");
// You can use:
let role = guild.roles.find(r => r.name == "myRole");
// This is useful when you want to check for multiple things,
// or if you want to use other variables from your code
let role = guild.roles.find(r => {
if (otherVariable) return r.name == "myRole";
else return r.name == "myRole" && r.mentionable;
});