mirror of https://github.com/aididan20/dyno
94 lines
2.6 KiB
94 lines
2.6 KiB
'use strict';
|
|
|
|
const {Command} = require('@dyno.gg/dyno-core');
|
|
|
|
class UpdateTeam extends Command {
|
|
|
|
constructor(...args) {
|
|
super(...args);
|
|
|
|
this.name = 'updateteam';
|
|
this.aliases = ['updateteam'];
|
|
this.group = 'Admin';
|
|
this.description = 'Update team data for the website';
|
|
this.usage = 'updateteam';
|
|
this.hideFromHelp = true;
|
|
this.permissions = 'admin';
|
|
this.expectedArgs = 0;
|
|
}
|
|
|
|
parseUser(user, size) {
|
|
return {
|
|
id: user.id,
|
|
name: `${user.username}#${user.discriminator}`,
|
|
avatar: user.dynamicAvatarURL(null, size),
|
|
};
|
|
}
|
|
|
|
hasRole(member, roleId) {
|
|
if (!member.roles.includes(roleId)) {
|
|
return false;
|
|
}
|
|
|
|
const roleIds = [
|
|
'203040224597508096',
|
|
'250182695693320193',
|
|
'231095149508296704',
|
|
'225209883828420608',
|
|
'355054563931324420'
|
|
];
|
|
const roleIndex = roleIds.indexOf(roleId);
|
|
const excludeIds = roleIds.filter(id => roleIds.indexOf(id) < roleIndex);
|
|
|
|
return !excludeIds.filter(id => member.roles.includes(id)).length;
|
|
}
|
|
|
|
updateCoreMember(members, user) {
|
|
let member = members.find(m => m.id === user.id);
|
|
user = Object.assign(user, member);
|
|
return user;
|
|
}
|
|
|
|
async execute({ message, args }) {
|
|
const guild = message.channel.guild;
|
|
const roles = {
|
|
contributors: guild.members
|
|
.filter(m => this.hasRole(m, '250182695693320193'))
|
|
.map(m => this.parseUser(m.user, 128))
|
|
.sort((a, b) => a.id - b.id),
|
|
moderators: guild.members
|
|
.filter(m => this.hasRole(m, '231095149508296704'))
|
|
.map(m => this.parseUser(m.user, 128))
|
|
.sort((a, b) => a.id - b.id),
|
|
accomplices: guild.members
|
|
.filter(m => this.hasRole(m, '225209883828420608'))
|
|
.map(m => this.parseUser(m.user, 128))
|
|
.sort((a, b) => a.id - b.id),
|
|
support: guild.members
|
|
.filter(m => this.hasRole(m, '355054563931324420'))
|
|
.map(m => this.parseUser(m.user, 128))
|
|
.sort((a, b) => a.id - b.id),
|
|
};
|
|
|
|
const coreMembers = guild.members
|
|
.filter(m => m.roles.includes('203040224597508096'))
|
|
.map(m => this.parseUser(m.user, 256));
|
|
|
|
try {
|
|
const globalConfig = await this.models.Dyno.findOne({}, { team: 1 }).lean().exec();
|
|
for (let [key, val] of Object.entries(roles)) {
|
|
globalConfig.team[key] = val;
|
|
}
|
|
globalConfig.team.core = globalConfig.team.core.map(user => this.updateCoreMember(coreMembers, user));
|
|
|
|
await this.models.Dyno.update({}, { $set: { team: globalConfig.team } });
|
|
|
|
return this.success(message.channel, 'Updated team members.');
|
|
} catch (err) {
|
|
this.logger.error(err);
|
|
return this.error(message.channel, 'An error occurred.');
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = UpdateTeam;
|