我希望我的机器人能够检查...
之后
机器人将返回带有消息Mod mail is already activated here!
这是我的代码
var mg = message.guild
const mythings = mg.channels.filter(chane => chane.client.user.id === `595840576386236437` && chane.name === 'modmail' &&chane.type === `text`);
const mythings2 = mg.channels.filter(chane => chane.client.user.id === `595840576386236437` && chane.name === 'qanda' &&chane.type === `text`);
const mythings3 = mg.roles.filter(role => role.client.user.id === `595840576386236437` && role.name === 'ModMail');
console.log(mythings)
if(mythings) return message.channel.send(`Rejected! There's possible fragments of modmail already set up here!`)
if(mythings2) return message.channel.send(`Rejected! There's possible fragments of modmail already set up here!`)
if(!mythings3) return message.channel.send(`Rejected! There's possible fragments of modmail already set up here!`)
注意
我在 discord.js-commando 中进行此操作,而不是 discord.js 不在我的index.js文件中,所以我唯一的限制是我无法引用客户端变量。目录是〜/ commands / extras / modmail.js / 而不是〜/ index.js / 我的意思是我不能以client
开头变量,因为它会以未定义的形式返回给我,但是允许使用channel.client
之类的东西,因为它定义了发送信息的渠道的创建者。
出了什么问题
这是哪里出了毛病。
OR
我希望:Bot可以在行会中搜索符合client.id和名称期望的频道,然后返回。此外,Bot可以在行会中搜索与所有者(我(指我是机器人)(我(是指我是机器人))的ID和名称相遇的角色,然后还返回。
实际结果是机器人在不应该的时候返回,例如Bot在应该创建频道时找不到频道时会返回。 (虽然我剪掉了代码)
答案 0 :(得分:0)
Collection.filter()
将始终返回新的收藏集。因此,由于变量存在,因此您的第一个条件始终是返回true并执行return
语句。
要么检查Collection的size
属性,要么使用Collection.find()
,它仅在谓词函数返回true时才返回元素。
const myChannels = mg.channels.filter(c => c.client.user.id === '595840576386236437' && ['modmail', 'qanda'].includes(c.name) && c.type === 'text');
const myRole = mg.roles.find(r => r.client.user.id === '595840576386236437' && r.name === 'ModMail');
if (myChannels.size !== 0 || myRole) {
return message.channel.send('Rejected! There\'s possible fragments of modmail already set up here!')
.catch(console.error);
}