Skip to content
This repository has been archived by the owner on Apr 29, 2022. It is now read-only.

Commit

Permalink
v1.1
Browse files Browse the repository at this point in the history
  • Loading branch information
iwa authored Sep 15, 2020
2 parents 4e462f8 + 10436c5 commit aff16f0
Show file tree
Hide file tree
Showing 44 changed files with 1,763 additions and 265 deletions.
20 changes: 11 additions & 9 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "kwako",
"version": "1.0.6",
"version": "1.1.0",
"description": "",
"main": "build/index.js",
"scripts": {
Expand All @@ -20,24 +20,26 @@
"homepage": "https://github.com/iwa/Kwako#readme",
"dependencies": {
"@discordjs/opus": "^0.3.2",
"@types/mongodb": "^3.5.26",
"@types/node": "^14.0.27",
"@types/mongodb": "^3.5.27",
"@types/node": "^14.6.4",
"@types/pino": "^6.3.0",
"@types/ws": "^7.2.4",
"anilist-node": "^1.4.0",
"axios": "^0.19.2",
"anilist-node": "^1.5.0",
"axios": "^0.20.0",
"bufferutil": "^4.0.1",
"canvas": "^2.6.1",
"discord.js": "^12.3.1",
"dotenv": "^8.2.0",
"mongodb": "^3.6.0",
"pino": "^6.5.1",
"mee6-levels-api": "^1.1.0",
"mongodb": "^3.6.1",
"pino": "^6.6.0",
"popyt": "^4.1.1",
"sodium": "^3.0.2",
"twitch": "^4.2.2",
"utf-8-validate": "^5.0.2",
"ytdl-core": "^3.2.1"
"ytdl-core": "^3.2.2"
},
"devDependencies": {
"pino-pretty": "^4.1.0"
"pino-pretty": "^4.2.1"
}
}
6 changes: 3 additions & 3 deletions src/Client.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Collection, Client }from "discord.js";
import { Collection, Client } from "discord.js";

import log from './Logger';

Expand Down Expand Up @@ -32,7 +32,7 @@ export default new class Kwako extends Client {

private async getPledgeData() {
const link = `https://www.patreon.com/api/oauth2/api/campaigns/3028203/pledges`;
return await axios
return axios
.get(link, {
headers: { authorization: `Bearer ${process.env.PATREON_TOKEN}` }
})
Expand All @@ -56,7 +56,7 @@ export default new class Kwako extends Client {
this.golden = golden;
})
.catch(err => {
return this.log.error({msg: `Error Fetching Patreon Data:`, status: err.response.status, reason: err.response.statusText})
return this.log.error({msg: `Error Fetching Patreon Data`, status: err.response.status, reason: err.response.statusText})
});
}

Expand Down
12 changes: 11 additions & 1 deletion src/commands/actions/facepalm.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
import Kwako from '../../Client'
import { Message, MessageEmbed } from 'discord.js'
import utilities from '../../utils/utilities'

let nbGifs = 5;
let lastGif = 0;

module.exports.run = async (msg: Message) => {
const embed = new MessageEmbed();
embed.setColor('#F2DEB0')
embed.setDescription(`**<@${msg.author.id}>**, facepalm!`)
embed.setImage('https://i.imgur.com/zqUDpIk.gif');

let n = utilities.randomInt(nbGifs)
while (lastGif === n)
n = utilities.randomInt(nbGifs);
lastGif = n;

embed.setImage(`https://${process.env.CDN_URL}/img/facepalm/${n}.gif`);

return msg.channel.send(embed)
.then(() => {
Expand Down
13 changes: 13 additions & 0 deletions src/commands/actions/yeet.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Message } from 'discord.js'
import actionsRun from '../../utils/actions';

module.exports.run = (msg: Message, args: string[]) => {
actionsRun(msg, args, 'yeet', 'yeet', false);
};

module.exports.help = {
name: 'Yeet',
usage: "Yeet (mention someone) [someone else]",
desc: "Yeet people by mentioning them",
perms: ['EMBED_LINKS']
};
11 changes: 8 additions & 3 deletions src/commands/config/addlevelrole.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,15 @@ module.exports.run = async (msg: Message, args: string[]) => {
await Kwako.db.collection('settings').insertOne({ '_id': msg.guild.id });
guildConf = { '_id': msg.guild.id };
}

guildConf.useExpSystem &&= true;
if(!guildConf.useExpSystem)
return msg.channel.send(':x: > You need to enable the experience system in order to use level roles');

let levelroles:string = guildConf.levelroles ? guildConf.levelroles : "[]";
let levelrolesMap:Map<number, Array<string>> = new Map(JSON.parse(levelroles));

if(parseInt(args[0]) < 2 || parseInt(args[0]) > 50)
if(parseInt(args[0], 10) < 2 || parseInt(args[0], 10) > 50)
return msg.channel.send(":x: > Please choose a valid level number between 2 and 50!")

let role = args[1];
Expand All @@ -35,13 +40,13 @@ module.exports.run = async (msg: Message, args: string[]) => {
return msg.reply('please mention a role!')


levelrolesMap.set(parseInt(args[0]), [role, previous]);
levelrolesMap.set(parseInt(args[0], 10), [role, previous]);

levelroles = JSON.stringify([...levelrolesMap]);

await Kwako.db.collection('settings').updateOne({ _id: msg.guild.id }, { $set: { levelroles: levelroles }}, { upsert: true })

await giveRoleToUpper(msg, role, parseInt(args[0]));
await giveRoleToUpper(msg, role, parseInt(args[0], 10));

await msg.channel.send(`I'll now give the role <@&${role}> to members when they reach the level **${args[0]}** and to members currently above this level.`);
if (previous)
Expand Down
11 changes: 8 additions & 3 deletions src/commands/config/dellevelrole.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,18 @@ module.exports.run = async (msg: Message, args: string[]) => {
await Kwako.db.collection('settings').insertOne({ '_id': msg.guild.id });
guildConf = { '_id': msg.guild.id };
}

guildConf.useExpSystem &&= true;
if(!guildConf.useExpSystem)
return msg.channel.send(':x: > You need to enable the experience system in order to use level roles');

let levelroles:string = guildConf.levelroles ? guildConf.levelroles : "[]";
let levelrolesMap:Map<number, string> = new Map(JSON.parse(levelroles));

if(parseInt(args[0]) < 2 || parseInt(args[0]) > 100)
return msg.channel.send(":x: > Please choose a valid level number between 2 and 100!")
if(parseInt(args[0], 10) < 2 || parseInt(args[0], 10) > 50)
return msg.channel.send(":x: > Please choose a valid level number between 2 and 50!")

levelrolesMap.delete(parseInt(args[0]))
levelrolesMap.delete(parseInt(args[0], 10))

levelroles = JSON.stringify([...levelrolesMap]);

Expand Down
5 changes: 5 additions & 0 deletions src/commands/config/disable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ module.exports.run = async (msg: Message, args: string[], guildConf: any) => {
let cmd: any = Kwako.commands.get(args[0]) || Kwako.commands.find((comd) => comd.help.aliases && comd.help.aliases.includes(args[0]));
if (!cmd) return;

if(disabled.includes(cmd.help.name))
return msg.channel.send({'embed':{
'title': ':x: This command has already been disabled'
}})

disabled.push(cmd.help.name);
if(cmd.help.aliases) {
for(const alias of cmd.help.aliases) {
Expand Down
5 changes: 3 additions & 2 deletions src/commands/config/disabled.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ module.exports.run = async (msg: Message, args: string[], guildConf: any) => {

let desc = "";

for(const command of disabled) {
for(const command of disabled)
desc = `${desc}\`${command}\`, `
}

desc = desc.slice(0, (desc.length-2))

embed.setDescription(desc)

Expand Down
9 changes: 7 additions & 2 deletions src/commands/config/enable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,19 @@ import { Message } from 'discord.js';

module.exports.run = async (msg: Message, args: string[], guildConf: any) => {
if ((!msg.member.hasPermission('MANAGE_GUILD'))) return;
if (args.length != 1) return;
if (args.length !== 1) return;

let disabled: string[] = guildConf.disabledCommands || [];

let cmd: any = Kwako.commands.get(args[0]) || Kwako.commands.find((comd) => comd.help.aliases && comd.help.aliases.includes(args[0]));
if (!cmd) return;

let filtered = disabled.filter((value) => { return value != cmd.help.name });
if(!disabled.includes(cmd.help.name))
return msg.channel.send({'embed':{
'title': ':x: This command has already been enabled'
}})

let filtered = disabled.filter((value) => { return value !== cmd.help.name });
if (cmd.help.aliases)
filtered = filtered.filter((value) => { return !cmd.help.aliases.includes(value) });

Expand Down
174 changes: 174 additions & 0 deletions src/commands/config/levelrole.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,174 @@
import Kwako from '../../Client';
import { Message, MessageEmbed } from 'discord.js';
import utilities from '../../utils/utilities';

module.exports.run = async (msg: Message, args: string[], guildConf: any) => {
if ((!msg.member.hasPermission('MANAGE_GUILD'))) return;
guildConf.useExpSystem &&= true;
if(!guildConf.useExpSystem)
return msg.channel.send({'embed':{
'title': ':x: You need to enable the experience system in order to use level roles'
}});

if (args.length === 0) return msg.channel.send({'embed':{
'title': `\`${guildConf.prefix}levelrole (add|remove|list)\``
}});

let guild = await Kwako.db.collection('settings').findOne({ '_id': { $eq: msg.guild.id } });

let levelroles:string = guild.levelroles || "[]";
let levelrolesMap:Map<number, Array<string>> = new Map(JSON.parse(levelroles));

switch (args[0]) {
// Add
case 'add':
if (args.length < 3) return msg.channel.send({'embed':{
'title': `\`${guildConf.prefix}levelrole add (level number) (mention role) [mention previous role]\``
}});

if(parseInt(args[1], 10) < 1 || parseInt(args[1], 10) > 50)
return msg.channel.send({'embed':{
'title': ':x: Please choose a valid level number between 1 and 50!'
}})

let role = args[2] || "";
if(role.startsWith('<@&') && role.endsWith('>')) {
role = role.slice(3, (role.length-1))
let chan = await msg.guild.roles.fetch(role);
if(!chan || !chan.editable)
return msg.channel.send({'embed':{
'title': ":x: This role doesn't exist!"
}})
} else
return msg.channel.send({'embed':{
'title': `:x: ${msg.author.username}, please mention a role!`
}})

let previous = args[3] || null;
if(parseInt(args[1], 10) === 1)
previous = null;

if(previous && previous.startsWith('<@&') && previous.endsWith('>')) {
previous = previous.slice(3, (previous.length-1))
let chan = await msg.guild.roles.fetch(previous);
if(!chan || !chan.editable)
return msg.channel.send({'embed':{
'title': ":x: The previous role doesn't exist!"
}})
} else if(previous)
return msg.channel.send({'embed':{
'title': `:x: ${msg.author.username}, please mention a role!`
}})

levelrolesMap.set(parseInt(args[1], 10), [role, previous]);

levelroles = JSON.stringify([...levelrolesMap]);

await Kwako.db.collection('settings').updateOne({ _id: msg.guild.id }, { $set: { levelroles: levelroles }}, { upsert: true })

await msg.react('🔄');
await giveRoleToUpper(msg, role, parseInt(args[1], 10));

let addEmbed = new MessageEmbed()
.setTitle('✅ New Level Role Added')
.addField('Role', `<@&${role}>`, true)
.addField('at Level', args[1], true);

if (previous)
addEmbed.addField('Previous Role', `When members reach the level ${args[1]}, I'll remove <@&${previous}> from their roles.`, false);

await msg.channel.send(addEmbed);
Kwako.log.info({msg: 'levelrole add', author: { id: msg.author.id, name: msg.author.tag }, guild: { id: msg.guild.id, name: msg.guild.name }, levelrole: { id: args[1], role: role }})
return;

// Remove
case 'remove':
if (args.length < 2) return msg.channel.send({'embed':{
'title': `\`${guildConf.prefix}levelrole remove (level number)\``
}});

if(parseInt(args[1], 10) < 1 || parseInt(args[1], 10) > 50)
return msg.channel.send({'embed':{
'title': ':x: Please choose a valid level number between 1 and 50!'
}});

if(!levelrolesMap.has(parseInt(args[1], 10)))
return msg.channel.send({'embed':{
'title': ':x: Deletion impossible',
'description': "There's no Level Role set at this level"
}})

let removeRole = (levelrolesMap.get(parseInt(args[1], 10)))[0];
levelrolesMap.delete(parseInt(args[1], 10))

levelroles = JSON.stringify([...levelrolesMap]);

await Kwako.db.collection('settings').updateOne({ _id: msg.guild.id }, { $set: { levelroles: levelroles }}, { upsert: true })

let removeEmbed = new MessageEmbed()
.setTitle('🚮 Level Role Removed')
.addField('Role', `<@&${removeRole}>`, true)
.addField('at Level', args[1], true);

await msg.channel.send(removeEmbed);

Kwako.log.info({msg: 'levelrole remove', author: { id: msg.author.id, name: msg.author.tag }, guild: { id: msg.guild.id, name: msg.guild.name }, levelrole: args[1]})
return;

// List
case 'list':
let list = "";

for(const levelrole of levelrolesMap) {
let chan = await msg.guild.roles.fetch(levelrole[1][0]);
if (!chan || !chan.editable) return;
list = `${list}${levelrole[0]} > ${chan.name}\n`;
}

if(levelrolesMap.size === 0)
list = 'nothing!'

await msg.channel.send({ "embed": {
"title": "📃 Level Roles List",
"description": `\`\`\`${list}\`\`\``
}});
return;

default:
return msg.channel.send({'embed':{
'title': `\`${guildConf.prefix}levelrole (add|remove|list)\``
}});
}
};

module.exports.help = {
name: 'levelrole',
usage: "levelrole (add|remove|list)",
staff: true,
perms: ['EMBED_LINKS', 'ADD_REACTIONS', 'MANAGE_ROLES', 'MANAGE_MESSAGES'],
premium: true
};

async function giveRoleToUpper (msg: Message, role: string, level: number) {
let exp = utilities.expForLevel(level-1);
let guild = `exp.${msg.guild.id.toString()}`

if(level === 1) {
let list = msg.guild.members.cache.filter(m => !m.user.bot).values();
if(list) {
for(const member of list) {
if(member)
await member.roles.add(role).catch(() => {return});
}
}
} else {
let list = await Kwako.db.collection('user').find({ [guild]: { $gte: exp } }).toArray();
if(list) {
for(const user of list) {
let member = await msg.guild.members.fetch(user._id).catch(() => {return});
if(member)
await member.roles.add(role).catch(() => {return});
}
}
}
}
Loading

0 comments on commit aff16f0

Please sign in to comment.