Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查找具有匹配角色条件的不一致用户_Javascript_Arrays_String_Discord_Discord.js - Fatal编程技术网

Javascript 查找具有匹配角色条件的不一致用户

Javascript 查找具有匹配角色条件的不一致用户,javascript,arrays,string,discord,discord.js,Javascript,Arrays,String,Discord,Discord.js,首先,在开始这个项目之前,我对这类事情没有任何经验。我已经使用了各种资源来实现一个功能齐全的机器人,但是我想添加一个关键特性 我正在尝试为我的Discord服务器设置一个游戏配对系统。要做到这一点,用户将选择一个定时的“配对”角色,我已经设置好并正在工作 我想做的是,我想把随机用户从名单中拉出来,他们也至少有一个匹配角色,来自两组独立的“子角色”,代表“语言”(如用于通信目的的语言)和“硬件”(如用于游戏的平台) 我认为这将通过数组/字符串或类似的方式完成,并设置以下框架: const engl

首先,在开始这个项目之前,我对这类事情没有任何经验。我已经使用了各种资源来实现一个功能齐全的机器人,但是我想添加一个关键特性

我正在尝试为我的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的帮助下,我现在有了一段用于单个组合的代码。我可以为每个组合使用此格式来创建一个非常长的代码,以获得所需的结果。我仍然希望运行数组或其他程序来清理和简化代码。下面是函数的示例其中一个组合的g代码

V2:(d)是“媒人”角色吗

var myItaxbo=setInterval(()=>{
让itaxboList=message.guild.members.filter(member=>member.roles.array().includes(d)和&member.roles.array().includes(意大利语)和&member.roles.array().includes(xbox));
如果(itaxboList.size>1){
console.log(itaxboList.size)
设randItaxbo=itaxboList.random(2)
设firstItaxbo=randItaxbo[0]
设secondItaxbo=randItaxbo[1]
firstItaxbo.removole(d).catch(console.error);
secondItaxbo.removole(d).catch(console.error);
matchmakingChannel.send(“用户和已匹配!”)
。然后(msg=>{
删除消息(3.6e+6)
})
}否则{
console.log('没有itaxbo成员')
清除间隔时间(myItaxbo);
};
}, 5000);
V3

var mat=setInterval(()=>{
let membersList=message.guild.members.filter(member=>member.roles.array()。包括(d)和&member.roles.some(role=>languages.includes(role.id))&&member.roles.some(role=>hardware.includes(role.id));
如果(成员列表大小>1){
console.log(membersList.size)
让randMembers=membersList.random(2)
让firstMember=randMembers[0]
让secondMember=randMembers[1]
firstMember.removole(d.catch)(console.error);
secondMember.removole(d.catch)(console.error);
matchmakingChannel.send(“用户和已匹配!”)
。然后(msg=>{
删除消息(3.6e+6)
})
}否则{
console.log('没有成员')
净距(mat);
};
}, 5000);

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

client.on('message',message=>{
const languages=[“英语”、“西班牙语”、“法语”、“德语”、“日语”、“韩语”、“葡萄牙语”、“俄语”、“意大利语”、“汉语”]
const hardware=['pc'、'mobile'、'playstation'、'xbox'、'nintendo']
让membersList=guild.members.filter(member=>member.roles.some(role=>languages.includes(role.name))&&member.roles.some(role=>hardware.includes(role.name)))
如果(成员列表大小<2){
console.log('没有成员')
返回
}
让randMembers=membersList.random(2)
让firstMember=randMembers.first();
设secondMeber=randMembers.last();
});
V2版本

bot.on('message',message=>{
const languages=[“英语”、“西班牙语”、“法语”、“德语”、“日语”、“韩语”、“葡萄牙语”、“俄语”、“意大利语”、“汉语”]
const hardware=['pc'、'mobile'、'playstation'、'xbox'、'nintendo']
让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)
如果(成员列表大小<2){
console.log('没有成员')
返回
}
让randMembers=membersList.random(2)
让firstMember=randMembers[0]
让secondMeber=randMembers[1]
});
V3版本尝试按ID获取角色

bot.on('message',message=>{
常量语言=['123123','12321312','21312312312'];
常量硬件=['12321312'、'213213'、'2132123'];
让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);
如果(成员列表大小<2){
console.log(“无成员”);
返回;
}
让randMembers=membersList.random(2);
设firstMember=randMembers[0];
设secondMeber=randMembers[1];
});

用户可以有多个硬件和语言角色?如果是,那么需要如何匹配它们?是的,他们可以有多个角色。由于双语用户的原因,我特别希望这些语言可以有多个角色。如果需要,硬件可以限制为一个,但如果我为一个做这个过程,我想我也可以同时做这两个。好的,rephr有一点。用户有pc和xbox角色,有英语、西班牙语和法语角色。所以兰德用户可以是
pc-english
pc-spanish
pc-french
xbox-english
xbox-spanish
对吗?是的,我想某种数组会很简单r而不是尝试为这些组合中的每一个组合制作某种类型的映射(如“匹配”角色),然后从中找到共同点。代码似乎只返回“无成员”。我将自己和另一个用户设置为我们应该匹配的适当角色,所以这不是问题所在
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);
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);