Add guild command and some other small changes

This commit is contained in:
Wessel Damian Tip
2019-02-05 17:48:08 +01:00
parent 826af8da88
commit a615af1393
11 changed files with 297 additions and 42 deletions

View File

@@ -43,12 +43,15 @@ discord :
messagecreate: true
messagedelete: true
commands :
# Category : CORE
locale : true
# Category : UTILITY
ping : true
math : true
snipe : true
# Category : INFORMATION
stats : true
guild : true
commands : true
# Category : IMAGE
cat : true

View File

@@ -12,7 +12,7 @@ core :
5 : <:ok_hand:497396122416054287> # Updated (guild)
6 : <:ok_hand:497396122416054287> # Updated (user)
7 : <:sad:500719642403405824> # Invalid locale
8 :
8 : <:sad:500719642403405824> # Missing permissions (guild)
util :
ping :
@@ -27,6 +27,22 @@ util :
snipe: <:snipe:508653323788877825> # No snipes found
info:
guild :
0 : <:search:542368817163010057> # Guild Name
1 : <:wumpus_flag:495525134220787713> # Guild region
2 : <:cloud:542368816911613963> # Guild creation
3 : <:alert:542367222279176202> # Content filter
4 : <:exclamation:542368036255039509> # Verification level
5 : <:hashtag:542367004024242176> # Channels
6 : <:owner:542365741844922368> # Owner tag
7 : <:early:542366345795207178> # Owner creation
8 : <:store:542366547180781588> # Owner avatar
9 : <:bot:473670328334155805> # Total bots
10 : <:member:542362747896201218> # Total users
11 : <:offline:362670805441708032> # Total offline members
12 : <:online:362670805051768833> # Total online members
13 : <:dnd:362670805676720128> # Total DnD members
14 : <:idle:362670805760475136> # Total idle members
commands :
0 : <:blueberry:506201160382939141> # Guild prefix
1 : <:spirit:332131321759399937> # More info

View File

@@ -74,10 +74,38 @@ info :
- '**Cooldown**: $[command:cooldown#formatted]'
- '**Arguments**: $[command:arguments]'
fields:
- 'Core'
- 'Information'
- 'Image'
- 'Utility'
- 'Developer'
guild:
fields:
guild:
name: ' Guild Information'
value:
- '$[emoji#0] **Name**: $[guild:name] (`$[guild:id]`)'
- '$[emoji#1] **Region**: $[guild:region]'
- '$[emoji#2] **Creation**: $[guild:created@precise] ago (`$[guild:created@exact]`)'
- '$[emoji#3] **Content Filter**: $[guild:explicity]'
- '$[emoji#4] **Verification Level**: $[guild:verification]'
- '$[emoji#5] **Channels [`Text` / `Voice`]**: $[guild:fullChannels]'
owner:
name: ' Owner Information'
value:
- '$[emoji#6] **Tag**: $[guild:owner#tag] (`$[guild:owner#id]`)'
- '$[emoji#7] **Creation**: $[guild:owner#created@precise] ago (`$[guild:owner#created@exact]`)'
- '$[emoji#8] **Avatar**: [Click here]($[guild:owner#avatar])'
members:
name: ' Member Counts'
value:
- '$[emoji#9] Bots **⤏** $[guild:users#bot]'
- '$[emoji#10] Members **⤏** $[guild:users#total]'
- '**_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\__**'
- '$[emoji#12] Online **⤏** `$[guild:users#online]`'
- '$[emoji#14] Idle **⤏** `$[guild:users#idle]`'
- '$[emoji#13] DnD **⤏** `$[guild:users#dnd]`'
- '$[emoji#11] Offline **⤏** `$[guild:users#offline]`'
image:
fetching : '$[emoji#0] Fetching a random image, this may take some time...'

View File

@@ -73,10 +73,38 @@ info :
- '**Cooldown**: $[command:cooldown#formatted]'
- '**Argumenten**: $[command:arguments]'
fields:
- 'Kern'
- 'Informatie'
- 'Plaatjes'
- 'Overig'
- 'Ontwikkelaar'
guild:
fields:
guild:
name: ' Gilde Informatie'
value:
- '$[emoji#0] **Naam**: $[guild:name] (`$[guild:id]`)'
- '$[emoji#1] **Regio**: $[guild:region]'
- '$[emoji#2] **Creatie**: $[guild:created@precise] ago (`$[guild:created@exact]`)'
- '$[emoji#3] **Inhoudsfilter**: $[guild:explicity]'
- '$[emoji#4] **Verificatieniveau**: $[guild:verification]'
- '$[emoji#5] **Kanalen [`Tekst` / `Stem`]**: $[guild:fullChannels]'
owner:
name: ' Eigenaar Informatie'
value:
- '$[emoji#6] **Label**: $[guild:owner#tag] (`$[guild:owner#id]`)'
- '$[emoji#7] **Creatie**: $[guild:owner#created@precise] ago (`$[guild:owner#created@exact]`)'
- '$[emoji#8] **Avatar**: [Click here]($[guild:owner#avatar])'
members:
name: ' Leden Nummers'
value:
- '$[emoji#9] Robots **⤏** $[guild:users#bot]'
- '$[emoji#10] Leden **⤏** $[guild:users#total]'
- '**_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\__**'
- '$[emoji#12] Online **⤏** `$[guild:users#online]`'
- '$[emoji#14] Idle **⤏** `$[guild:users#idle]`'
- '$[emoji#13] DnD **⤏** `$[guild:users#dnd]`'
- '$[emoji#11] Offline **⤏** `$[guild:users#offline]`'
image:
fetching : '$[emoji#0] Een willekeurig plaatje aan het ophalen, dit kan enige tijd duren...'

View File

@@ -45,21 +45,26 @@ module.exports = class Commands extends DiscordCommand {
fields : [
{
name : msg.author.locale['info']['commands']['fields'][0],
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'information' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'core' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
inline: true
},
{
name : msg.author.locale['info']['commands']['fields'][1],
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'image' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'information' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
inline: true
},
{
name : msg.author.locale['info']['commands']['fields'][2],
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'utility' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'image' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
inline: true
},
{
name : msg.author.locale['info']['commands']['fields'][3],
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'utility' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
inline: true
},
{
name : msg.author.locale['info']['commands']['fields'][4],
value : this.bot.cmds.filter((v) => v.extData.category.toLowerCase() === 'developer' && !v.extData.hidden).map((v) => `**•** [\`${msg.prefix}${v.extData.name}\`](https://discordapp.com/channels/${msg.channel.guild.id}/${msg.channel.id}/${msg.id}) ${v.extData.description ? `**-** ${v.extData.description}` : ''}`).join('\n'),
inline: true
}

View File

@@ -0,0 +1,118 @@
const { DiscordCommand } = require('../../../core');
const moment = require('moment'); require('../../../util/moment/diff.js');
module.exports = class name extends DiscordCommand {
constructor(bot) {
super(bot, {
name : 'guild',
syntax : 'guild <...guild:string>',
aliases : [ '<...guild:string>' ],
argument : [],
description : 'Get a guild\'s information',
hidden : false,
enabled : true,
cooldown : 1000,
category : 'Information',
ownerOnly : false,
guildOnly : false,
permissions : [ 'embedLinks' ]
});
this.verifications = { '0': 'none', '1': 'low', '2': 'medium', '3': '(╯°□°)╯︵ ┻━┻', '4': '┻━┻ ミヽ(ಠ益ಠ)ノ彡┻━┻' };
this.explicits = { '0': 'off', '1': 'everyone without roles', '2': 'everyone' };
this.flags = { 'eu-central': '🇪🇺', 'london': '🇬🇧', 'amsterdam': '🇳🇱', 'japan': '🇯🇵',
'brazil': '🇧🇷', 'us-west': '🇺🇸', 'hongkong': '🇭🇰', 'sydney': '🇦🇺',
'singapore': '🇸🇬', 'us-central': '🇺🇸', 'eu-west': '🇪🇺', 'us-south': '🇺🇸',
'us-east': '🇺🇸', 'frankfurt': '🇩🇪', 'russia': '🇷🇺' };
}
async execute(msg, args) {
const g = this.bot.REST.getGuild((args.length >= 1 ? args.join(' ') : msg.channel.guild.id));
if (!g) return msg.channel.createMessage('INVALID');
msg.channel.createMessage({
embed: {
title : g.name,
thumbnail: { url: g.iconURL },
fields : [
{
name: msg.author.locale['info']['guild']['fields']['guild']['name'],
value: this.localize(msg.author.locale['info']['guild']['fields']['guild']['value'].join('\n'), { guild: g }),
inline: true
},
{
name: msg.author.locale['info']['guild']['fields']['owner']['name'],
value: this.localize(msg.author.locale['info']['guild']['fields']['owner']['value'].join('\n'), { guild: g }),
inline: true
},
{
name: msg.author.locale['info']['guild']['fields']['members']['name'],
value: this.localize(msg.author.locale['info']['guild']['fields']['members']['value'].join('\n'), { guild: g }),
inline: true
}
]
}
});
}
localize(msg, extData) {
if (!msg) return '';
if (extData && extData.guild) {
const o = this.bot.users.get(extData.guild.ownerID);
o.c = moment.preciseDiff(new Date(), new Date(o.createdAt), true);
o.cs = [
o.c.years >= 1 ? `${o.c.years} years` : undefined,
o.c.months >= 1 ? `${o.c.months} months` : undefined,
o.c.days >= 1 ? `${o.c.days} days` : undefined
].join(' ');
extData.guild.c = moment.preciseDiff(new Date(), new Date(extData.guild.createdAt), true);
extData.guild.cs = [
extData.guild.c.years >= 1 ? `${extData.guild.c.years} years` : undefined,
extData.guild.c.months >= 1 ? `${extData.guild.c.months} months` : undefined,
extData.guild.c.days >= 1 ? `${extData.guild.c.days} days` : undefined
].join(' ');
msg = msg
.replace(/\$\[guild:id]/g, extData.guild.id)
.replace(/\$\[guild:name]/g, extData.guild.name)
.replace(/\$\[guild:region]/g, `${this.flags[extData.guild.region] ? this.flags[extData.guild.region] : this.bot.emote('info', 'guild', '2')} ${extData.guild.region}`)
.replace(/\$\[guild:explicity]/g, this.explicits[extData.guild.explicitContentFilter])
.replace(/\$\[guild:verification]/g, this.verifications[extData.guild.verificationLevel])
.replace(/\$\[guild:fullChannels]/g , `${extData.guild.channels.filter((v) => v.type === 0).length} / ${extData.guild.channels.filter((v) => v.type === 2).length}`)
.replace(/\$\[guild:users#bot]/g, extData.guild.members.filter((v) => v.bot).length)
.replace(/\$\[guild:users#dnd]/g, extData.guild.members.filter((v) => v.status === 'dnd').length)
.replace(/\$\[guild:users#idle]/g, extData.guild.members.filter((v) => v.status === 'idle').length)
.replace(/\$\[guild:users#total]/g, extData.guild.members.filter((v) => !v.bot).length)
.replace(/\$\[guild:users#online]/g, extData.guild.members.filter((v) => v.status === 'online').length)
.replace(/\$\[guild:users#offline]/g, extData.guild.members.filter((v) => v.status === 'offline').length)
.replace(/\$\[guild:created@precise]/g, extData.guild.cs)
.replace(/\$\[guild:created@exact]/g, moment(extData.guild.createdAt).format('YYYY[/]MM[/]DD HH[:]mm'))
.replace(/\$\[guild:owner#id]/g , o.id)
.replace(/\$\[guild:owner#tag]/g , `${o.username}#${o.discriminator}`)
.replace(/\$\[guild:owner#created@precise]/g, o.cs)
.replace(/\$\[guild:owner#created@exact]/g, moment(o.createdAt).format('YYYY[/]MM[/]DD HH[:]mm'))
.replace(/\$\[guild:owner#avatar]/g, o.avatar ? o.avatarURL : o.defaultAvatarURL);
}
return msg
.replace(/\$\[emoji#0]/g, this.bot.emote('info', 'guild', '0'))
.replace(/\$\[emoji#1]/g, this.bot.emote('info', 'guild', '1'))
.replace(/\$\[emoji#2]/g, this.bot.emote('info', 'guild', '2'))
.replace(/\$\[emoji#3]/g, this.bot.emote('info', 'guild', '3'))
.replace(/\$\[emoji#4]/g, this.bot.emote('info', 'guild', '4'))
.replace(/\$\[emoji#5]/g, this.bot.emote('info', 'guild', '5'))
.replace(/\$\[emoji#6]/g, this.bot.emote('info', 'guild', '6'))
.replace(/\$\[emoji#7]/g, this.bot.emote('info', 'guild', '7'))
.replace(/\$\[emoji#8]/g, this.bot.emote('info', 'guild', '8'))
.replace(/\$\[emoji#9]/g, this.bot.emote('info', 'guild', '9'))
.replace(/\$\[emoji#10]/g, this.bot.emote('info', 'guild', '10'))
.replace(/\$\[emoji#11]/g, this.bot.emote('info', 'guild', '11'))
.replace(/\$\[emoji#12]/g, this.bot.emote('info', 'guild', '12'))
.replace(/\$\[emoji#13]/g, this.bot.emote('info', 'guild', '13'))
.replace(/\$\[emoji#14]/g, this.bot.emote('info', 'guild', '14'));
}
};

View File

@@ -1,5 +1,6 @@
// Main
const Webhook = require('./DiscordWebhook');
const RESTclient = require('../internal/Discord/rest');
const { Client: Eris } = require('eris');
// Registries
const EventRegistry = require('../registry/Discord/Events');
@@ -28,6 +29,7 @@ module.exports = class WumpDiscord extends Eris {
this.localeDic = [];
this.m = options.db;
this.REST = new RESTclient(this);
this.eventRegistry = new EventRegistry(this);
this.localeRegistry = new LocaleRegistry(this);
this.commandRegistry = new CommandRegistry(this);

View File

@@ -1,37 +0,0 @@
module.exports = class RESTclient {
constructor(bot) {
this.bot = bot;
}
resolveGuild(q) {
if (q) return undefined;
const g = this.bot.guilds.get(q);
if (/^\d+$/.test(q)) return g;
else {
const gs = this.bot.guilds.filter((v) => v.name.toLowerCase().includes(q.toLowerCase()));
if (gs.length > 1) return gs[0];
else return undefined;
}
}
resolveUser(q) {
if (!q) return undefined;
if (/^\d+$/.test(q)) {
const u = this.bot.users.get(q);
if (u) return u;
} else if (/^<@!?(\d+)>$/.test(q)) {
const u = this.bot.users.get(q.match(/^<@!?(\d+)>$/)[1]);
if (u) return u;
} else if (/^(.+)#(\d{4})$/.test(q)) {
const m = q.match(/^(.+)#(\d{4})$/);
const u = this.bot.users.filter((v) => v.username === m[1] && Number(v.discriminator) === Number(m[2]));
if (u.length >= 1) return u[0];
} else {
const u = this.bot.users.filter((v) => v.username.toLowerCase().includes(q.toLowerCase()));
if (u.length >= 1) return u[0];
else return undefined;
}
}
};

View File

@@ -0,0 +1,92 @@
module.exports = class RESTclient {
constructor(bot) {
this.bot = bot;
}
getRole($, g) {
if (/^\d+$/.test($) && g.roles.get($)) return $;
else if (/<@%(\d+)>$/.test($)) {
const m = $.match(/^<@&(\d+)>$/);
const r = g.roles.get(m[1]);
if (r) return $;
} else {
const r = g.roles.filter((v) => v.name.toLowerCase().includes($.toLowerCase()));
if (r.length > 0) return r[0];
}
return undefined;
}
getUser($) {
if (/^\d+$/.test($) && this.bot.users.get($)) return this.bot.users.get($);
else if (/^<@!?(\d+)>$/.test($)) {
const u = this.bot.users.get($.match(/^<@!?(\d+)>$/)[1]);
if (u) return u;
}else if (/^(.+)#(\d{4})$/.test($)) {
const m = $.match(/^(.+)#(\d{4})$/);
const u = this.bot.users.filter((u) => u.username === m[1] && Number(u.discriminator) === Number(m[2]));
if (u.length > 0) return u[0];
} else {
const u = this.bot.users.filter((u) => u.username.toLowerCase().includes($.toLowerCase()));
if (u.length > 0) return u[0];
}
return undefined;
}
getGuild($) {
if (/^\d+$/.test($) && this.bot.guilds.get($)) return this.bot.guilds.get($);
else {
const tmp = this.bot.guilds.filter((v) => v.name.toLowerCase().includes(q.toLowerCase()));
if (tmp.length > 0) return tmp[0];
}
return undefined;
}
getChannel($, g) {
let c;
if (/^\d+$/.test($)) {
if (g) {
if (!g.channels.has($)) return undefined;
return g.channels.get($);
} else {
c = c in this.bot.channelGuildMap && this.bot.guilds.get(this.bot.channelGuildMap[$]).channels.get($);
if (c) return c;
}
} else if (/^<#(\d+)>$/.test(c)) {
const m = $.match(/^<#(\d+)>$/);
if ($) {
if (!g.channels.has(m[1])) return undefined;
return g.channels.get(m[1]);
} else {
c = m[1] in this.bot.channelGuildMap && this.bot.guilds.get(this.bot.channelGuildMap[m[1]]).channels.get($);
if (c) return c;
}
} else if ($) {
c = g.channels.filter((v) => v.name.toLowerCase().includes($.toLowerCase()));
if (c.length > 0) return c[0];
}
return undefined;
}
getMember($, g, n = false) {
if (/^\d+$/.test($) && g.members.get($)) return g.members.get($);
else if (/^<@!?(\d+)>$/.test($)) {
const m = $.match(/^<@!?(\d+)>$/);
const u = g.members.get(m[1]);
if (u) return u;
} else if (/^(.+)#(\d{4})$/.test($)) {
const m = $.match(/^(.+)#(\d{4})$/);
const u = g.members.filter((v) => v.user.username === m[1] && Number(v.user.discriminator) === Number(m[2]));
if (u.length > 0) return u[0];
} else if (!n) {
const u = g.members.filter((v) => v.user.username.toLowerCase().includes(v.toLowerCase()));
if (u.length > 0) return u[0];
}
return undefined;
}
};