Для начала, у меня был нулевой опыт с подобными вещами до начала этого проекта. Я использовал различные ресурсы, чтобы добраться до полностью функционирующего бота, но я одержим ключевую функцию, которую хочу добавить.
Я пытаюсь настроить игровую систему подбора матчей для моего сервера 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) роль "подбора"
* 10 13 *
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);