首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用匹配的角色标准查找不和谐的用户

使用匹配的角色标准查找不和谐的用户
EN

Stack Overflow用户
提问于 2020-02-10 04:12:52
回答 1查看 1K关注 0票数 0

首先,在开始这个项目之前,我对这类事情没有任何经验。我已经使用了各种资源来达到一个功能齐全的机器人,但我挂在一个关键的功能,我想补充。

我试图为我的不和谐服务器建立一个游戏匹配系统。要做到这一点,用户将选择一个时间“匹配”的角色,我已经设置和工作。

我想做的和现在遇到的问题是,我想把随机的用户从这张纸上拉出来,它们至少有一个匹配的角色,来自代表“语言”的两个独立的“子角色”组(如用于通信目的的语言)和“硬件”(比如他们将用于游戏的平台)。

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

代码语言:javascript
运行
复制
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']

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

V2:(d)是“相亲”角色

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-11 06:43:36

你可以这样想。过滤GuildMembers,然后检查它们是否有游戏和语言角色,以及rand集合和get 2兰特成员。

代码语言:javascript
运行
复制
    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版本

代码语言:javascript
运行
复制
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获取角色

代码语言:javascript
运行
复制
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];
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60143984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档