查找具有匹配角色标准的 Discord 用户



首先,在开始这个项目之前,我对这种事情的经验为零。我已经使用了各种资源来达到一个功能齐全的机器人的地步,但我挂在我想添加的一个关键功能上。

我正在尝试为我的 Discord 服务器设置一个游戏匹配系统。为此,用户将选择使用我已经设置并工作的定时"匹配"角色。

我想做的和遇到的问题是,我想从该卷中提取随机用户,这些用户也至少有一个匹配的角色来自代表"语言"的两组单独的"子角色"(如以通信目的而闻名的语言"和"硬件"(如他们将用于游戏的平台(。

我认为这将通过数组/字符串或类似的东西来完成,并设置以下框架:

const english = message.guild.roles.get('671416995253714965');
const spanish = message.guild.roles.get('671417045916712961');
const french = message.guild.roles.get('671417095166361603');
const german = message.guild.roles.get('671417141731262516');
const japanese = message.guild.roles.get('671417224531279962');
const korean = message.guild.roles.get('671417269666185239');
const portuguese = message.guild.roles.get('671417316193599500');
const russian = message.guild.roles.get('671417467888730122');
const italian = message.guild.roles.get('671418325661777932');
const chinese = message.guild.roles.get('671418692742938647');
const pc = message.guild.roles.get('670715882292641812');
const mobile = message.guild.roles.get('670716301135839282');
const playstation = message.guild.roles.get('670716107929419789');
const xbox = message.guild.roles.get('670715986655313941');
const nintendo = message.guild.roles.get('670716141915602955');
let languages = ['english', 'spanish', 'french', 'german', 'japanese', 'korean', 'portuguese', 'russian', 'italian', 'chinese']
let hardware = ['pc', 'mobile', 'playstation', 'xbox', 'switch']

编辑:在Cipher的帮助下,我现在有一段代码可以单独组合。我可以对每个组合使用这种格式来创建非常长的代码,以提供所需的结果。我仍然想运行一个数组或其他东西来清理和简化代码。下面是其中一个组合的功能代码示例。

V2:(d(是"牵线搭桥"角色

var myItaxbo = setInterval(() => {
let itaxboList = message.guild.members.filter(member => member.roles.array().includes(d) && member.roles.array().includes(italian) && member.roles.array().includes(xbox));
if(itaxboList.size > 1) {
console.log(itaxboList.size)
let randItaxbo = itaxboList.random(2)
let firstItaxbo = randItaxbo[0]
let secondItaxbo = randItaxbo[1]
firstItaxbo.removeRole(d).catch(console.error);
secondItaxbo.removeRole(d).catch(console.error);
matchmakingChannel.send("Users <@" + firstItaxbo + "> and <@" + secondItaxbo + "> have been matched!")
.then(msg => {
msg.delete(3.6e+6)
})
} else {
console.log('No itaxbo members')
clearInterval(myItaxbo);
};
}, 5000);

V3

var mat = setInterval(() => {
let membersList = message.guild.members.filter(member => member.roles.array().includes(d) && member.roles.some(role => languages.includes(role.id)) && member.roles.some(role => hardware.includes(role.id)));
if (membersList.size > 1) {
console.log(membersList.size)
let randMembers = membersList.random(2)
let firstMember = randMembers[0]
let secondMember = randMembers[1]
firstMember.removeRole(d).catch(console.error);
secondMember.removeRole(d).catch(console.error);
matchmakingChannel.send("Users <@" + firstMember + "> and <@" + secondMember + "> have been matched!")
.then(msg => {
msg.delete(3.6e+6)
})
} else {
console.log('No members')
clearInterval(mat);
};
}, 5000);

你可以这样想。过滤公会成员,然后检查他们是否有游戏和语言角色,并获得 2 兰特成员的兰德集合。

client.on('message', message => {
const languages = ['english', 'spanish', 'french', 'german', 'japanese', 'korean', 'portuguese', 'russian', 'italian', 'chinese']
const hardware = ['pc', 'mobile', 'playstation', 'xbox', 'nintendo']
let membersList = guild.members.filter(member => member.roles.some(role => languages.includes(role.name)) && member.roles.some(role => hardware.includes(role.name)))
if(membersList.size < 2) {
console.log('No members')
return
}
let randMembers = membersList.random(2)
let firstMember = randMembers.first();
let secondMeber = randMembers.last();
});

V2 版本

bot.on('message', message => {
const languages = ['english', 'spanish', 'french', 'german', 'japanese', 'korean', 'portuguese', 'russian', 'italian', 'chinese']
const hardware = ['pc', 'mobile', 'playstation', 'xbox', 'nintendo']
let membersList = message.guild.members.filter(member => member.roles.some(role => languages.includes(role.name)) && member.roles.some(role => hardware.includes(role.name)))
console.log(membersList.size)
if(membersList.size < 2) {
console.log('No members')
return
}
let randMembers = membersList.random(2)
let firstMember = randMembers[0]
let secondMeber = randMembers[1]
});

V3 版本尝试按 ID 获取角色

bot.on('message', message => {
const languages = ['123123', '12321312', '213213123'];
const hardware = ['12321312', '213213213', '213213123'];
let membersList = message.guild.members.filter(member => member.roles.some(role => languages.includes(role.id)) && member.roles.some(role => hardware.includes(role.id)));
console.log(membersList.size);
if (membersList.size < 2) {
console.log('No members');
return;
}
let randMembers = membersList.random(2);
let firstMember = randMembers[0];
let secondMeber = randMembers[1];
});

最新更新