The official leaked source code of the Dyno Discord Bot.
 

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;