Compare commits

...

31 commits

Author SHA1 Message Date
Jan be37e998e5 h 2021-02-18 15:22:32 +01:00
Jan 216960f3e2 h 2021-02-13 15:50:55 +01:00
Jan 09bda53ece fix readme 2021-02-13 15:39:40 +01:00
Jan befc5dc8e6 oh no 2021-02-13 15:35:24 +01:00
Jan a4e568dec6 fix death 2021-02-10 14:21:09 +01:00
Jan 6720bee0e5 Merge branch 'master' of https://gitea.janderedev.xyz/Jan/obama-bot 2021-02-07 16:37:07 +01:00
Jan 35bbe61979 fix warning message timeout 2021-02-07 16:37:03 +01:00
Jan 8f463087ed fix dependencies 2021-01-21 12:18:50 +00:00
Jan c9d19e77ff magic 2021-01-07 02:40:57 +01:00
Jan 0af48d3f0b bruh 2021-01-07 02:08:52 +01:00
Jan 6cb0156106 add 'bruh' intent and random award multiplier 2020-12-30 16:24:31 +01:00
Jan bace97c0f0 process.exit() 2020-12-27 14:42:22 +01:00
Jan 955fe8c462 Set activity 2020-12-27 14:32:23 +01:00
Jan e3c471e390 Add credits 2020-12-27 14:32:05 +01:00
Jan 01c647d675 Add SIGINT handler 2020-12-27 14:31:47 +01:00
Jan f39c4a7ee1 delete useless info command 2020-12-27 14:02:39 +01:00
Jan 5149dab7c6 Add the jsdoc thingy to every command to fix intellisense 2020-12-27 13:59:54 +01:00
Jan 41fbaa84ce Add copypasta command 2020-12-27 13:57:35 +01:00
Jan c6a7ea023c renamed variables 2020-12-27 13:27:16 +01:00
Jan 2e077cfe1a Updated license
to the shitass who parked giant-penis-license.org, I hope your digestive system rips
2020-12-27 13:24:22 +01:00
Jan ee908585ae Fix logging 2020-12-27 13:04:08 +01:00
Jan 19b4583d2c Fixed bug 2020-12-27 12:57:38 +01:00
Jan 6b03ce8f7d moar coed 2020-12-23 14:12:45 +01:00
Jan a9e18d9750 add code 2020-12-23 14:08:41 +01:00
Jan c953f74e30 r 2020-12-23 14:03:07 +01:00
Jan 91693ce2ae testing in prod 2020-12-23 13:58:04 +01:00
Jan 1e1b78e24f aaaaaaaaaaaa 2020-12-23 13:50:02 +01:00
Jan a96e3cbd96 add code 2020-12-23 13:48:30 +01:00
Jan f50de3e481 h 2020-12-23 13:38:31 +01:00
Jan c15e5b4d01 burh 2020-11-28 23:51:35 +01:00
Jan 810b2b9236 Remade bot 2020-11-28 17:38:23 +01:00
34 changed files with 7253 additions and 706 deletions

View file

@ -1,5 +1,5 @@
The Giant Penis License (GPL)
Copyright (c) 2020 Im_Verum
Copyright (c) 2020 jan
▄▄██▄██▄▄
▄█ █ █▄

View file

@ -1,5 +1,8 @@
# Obama Bot
A small Discord bot with crappy code that I made for the r/Obamium Discord server. pls dont judge my code
# Hosting the bot
If you, for whatever reason, want to host this bot yourself, good luck getting it to work.
# Copyright
This project is licensed under the [Giant Penis License](http://giant-penis-license.org/) which is basically a deformed MIT license.

61
commands/copypasta.js Normal file
View file

@ -0,0 +1,61 @@
const Discord = require('discord.js');
const fs = require('fs').promises;
const events = require('events');
const shutEmitter = new events.EventEmitter();
module.exports.meta = {
name: 'copypasta',
aliases: ['pasta'],
staffOnly: false,
epicOnly: true
}
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
let copypastas = await fs.readdir(__dirname + '/copypastas');
let pasta = copypastas.find((p) => p.toLowerCase() == args[0]?.toLowerCase());
if (!pasta) {
message.channel.send(`Please choose one of: \`${copypastas.join('`, `')}\``);
return;
}
let lines = (await fs.readFile(__dirname + '/copypastas/' + pasta))
.toString('utf-8')
.split('\n')
.filter(line => line.trim() != '');
this.copypastaing[message.channel.id] = true;
sendLine();
const interval = setInterval(sendLine, 1500);
const listener = shutEmitter.once('shut', cid => {
if (cid == message.channel.id) {
clearInterval(interval);
this.copypastaing[message.channel.id] = false;
}
});
async function sendLine() {
if (lines.length == 0) {
this.copypastaing[message.channel.id] = false;
clearTimeout(interval);
shutEmitter.removeListener('shut', listener);
return;
}
const line = lines.shift();
await message.channel.send(line, { tts: true });
}
}
module.exports.shut = (channelID) => {
shutEmitter.emit('shut', channelID);
}
module.exports.copypastaing = {}

30
commands/copypastas/aaa Normal file
View file

@ -0,0 +1,30 @@
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

4565
commands/copypastas/beemovie Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
You know, let's just say, hypothetically speaking, that I were to have sex with your mom.
Now, hypothetically speaking, if this did happen, I mean, you must remember that all physical matter has a very thin layer of atoms surrounding it, so technically, you are never truly
touching anything or anyone, but instead, the atoms surrounding your body and this object or person are coming into contact with one another.
So, once again, hypothetically speaking, if I were to attempt to have sex with your mom, I would fail miserably, because, according to science, our bodies would never come into contact
with one another.

28
commands/copypastas/cum Normal file
View file

@ -0,0 +1,28 @@
**Infinite cum.**
You sit on the toilet to jack off, but you begin to cum uncontrollably.
After ten spurts you start to worry. Your hand is sticky and it reeks of semen.
You desperately shove your dick into a wad of toilet paper, but that only makes your balls hurt.
The cum accelerates. Its been three minutes. You cant stop cumming.
Your bathroom floor is covered in a thin layer of baby fluid. You try to cum into the shower drain but it builds up too fast.
You try the toilet. The cum is too thick to be flushed. You lock the bathroom door to prevent the cum from escaping.
The air grows hot and humid from the cum. The cum accelerates. You slip and fall in your own sperm.
The cum is now six inches deep, almost as long as your still-erect semen hose. Sprawled on your back, you begin to cum all over the ceiling.
Globs of the sticky white fluid begin to fall like raindrops, giving you a facial with your own cum. The cum accelerates.
You struggle to stand as the force of the cum begins to propel you backwards as if you were on a bukkake themed slip-and-slide.
Still on your knees, the cum is now at chin height. To avoid drowning you open the bathroom door.
The deluge of man juice reminds you of the Great Molasses Flood of 1919, only with cum instead of molasses.
The cum accelerates. Its been two hours. Your children and wife scream in terror as their bodies are engulfed by the snow-white sludge.
Your youngest child goes under, with viscous bubbles and muffled cries rising from the goop. You plead to God to end your suffering. The cum accelerates.
You squeeze your dick to stop the cum, but it begins to leak out of your asshole instead. You let go.
The force of the cum tears your urethra open, leaving only a gaping hole in your crotch that spews semen.
Your body picks up speed as it slides backwards along the cum. You smash through the wall, hurtling into the sky at thirty miles an hour.
From a birds eye view you see your house is completely white. Your neighbor calls the cops. The cum accelerates.
As you continue to ascend, you spot police cars racing towards your house.
The cops pull out their guns and take aim, but stray loads of cum hit them in the eyes, blinding them. The cum accelerates.
You are now at an altitude of 1000 feet. The SWAT team arrives. Military helicopters circle you. Hundreds of bullets pierce your body at once, yet you stay conscious.
Your testicles have now grown into a substitute brain. The cum accelerates. It has been two days. With your body now destroyed, the cum begins to spray in all directions.
You break the sound barrier. The government deploys fighter jets to chase you down, but the impact of your cum sends one plane crashing to the ground.
The government decides to let you leave the earth. You feel your gonads start to burn up as you reach the edges of the atmosphere.
You narrowly miss the ISS, giving it a new white paint job as you fly past. Physicists struggle to calculate your erratic trajectory.
The cum accelerates. The cum begins to gravitate towards itself, forming a comet trail of semen. Astronomers begin calling you the “Cummet.”
You are stuck in space forever, stripped of your body and senses, forced to endure an eternity of cumshots. Eventually, you stop thinking.

View file

@ -0,0 +1,12 @@
What the fuck did you just fucking say about me, you little bitch?
Ill have you know I graduated top of my class in the Navy Seals, and Ive been involved in numerous secret raids on Al-Quaeda, and I have over 300 confirmed kills.
I am trained in gorilla warfare and Im the top sniper in the entire US armed forces. You are nothing to me but just another target.
I will wipe you the fuck out with precision the likes of which has never been seen before on this Earth, mark my fucking words.
You think you can get away with saying that shit to me over the Internet? Think again, fucker.
As we speak I am contacting my secret network of spies across the USA and your IP is being traced right now so you better prepare for the storm, maggot.
The storm that wipes out the pathetic little thing you call your life.
Youre fucking dead, kid. I can be anywhere, anytime, and I can kill you in over seven hundred ways, and thats just with my bare hands.
Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the United States Marine Corps
and I will use it to its full extent to wipe your miserable ass off the face of the continent, you little shit.
If only you could have known what unholy retribution your little “clever” comment was about to bring down upon you, maybe you would have held your fucking tongue.
But you couldnt, you didnt, and now youre paying the price, you goddamn idiot. I will shit fury all over you and you will drown in it. Youre fucking dead, kiddo.

View file

@ -0,0 +1,10 @@
**AITA For Dropkicking an Toddler off a cliff because he used my Dead Name**
The title speaks for itself. So me (20F transitioning) was going on a hike with my cousin and his parents.
Theres this really large cliff that looms over my house. I recently told my family I was trans.
I thought my toddler cousin had realize me new name is Jenny. Instead he said Max.
I instantly flew into a mentally unstable rage and my eyes turned red. I began to drool and have a mini-seizure.
I ran toward my cousin at the speed of light. I picked him up by the back of his shirt.
His parents ran toward him but with my tranny-powers I managed to use my telekineses and freeze them in mid-air.
I threw my toddler cousin up in the air and using my tranny in the 40% powers kicked him at the speed of light.
He went fucking flying and I heard his little screams which made my gaping hole which used to be my dick until I forcefully castrated myself began to drip with precum.
I saw him fall to the ground and splatter by then I was so horny I came all over the place.

52
commands/eval.js Normal file
View file

@ -0,0 +1,52 @@
const Discord = require('discord.js');
const { inspect } = require('util');
const { logger, client } = require('../');
module.exports.meta = {
name: 'eval',
aliases: ['e']
}
/**
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
const ownerID = process.env.OWNER_ID;
if (!ownerID) return message.channel.send('Error: Bot owner is not configured. Set `OWNER_ID` env var.');
if (ownerID != message.author.id) {
logger.warn(`${message.author.tag} ${message.author.id} => Not bot owner`);
return;
}
try {
const exec = args.join(' ');
if (!exec) return message.channel.send('What do you want me to do, dumbass');
eval(
`(async () => {` +
`${exec.replace(/(```\w*\n)|\n```$/g, '')}\n` +
`})()`
)
.then(res => {
if (res == undefined)
message.react('✅')
.catch(() => message.channel.send('```js\nundefined\n```'));
else
message.channel.send(
`\`\`\`js\n${
inspect(res)
.replace(new RegExp(client.token, 'g'), '[Token removed]')
.slice(0, 1989)
}\n\`\`\``
);
})
.catch(e => {
message.channel.send(`\`\`\`js\n${(e && e.name && e.message ? `${e.name}: ${e.message}` : `Error: ${e}`).slice(0, 1989)}\n\`\`\``)
.catch(a => message.channel.send(a));
});
} catch(e) {
message.channel.send(`\`\`\`js\n${(e && e.name && e.message ? `${e.name}: ${e.message}` : `Error: ${e}`).slice(0, 1989)}\n\`\`\``)
.catch(a => message.channel.send(a));
}
}

41
commands/help.js Normal file
View file

@ -0,0 +1,41 @@
const { MessageEmbed } = require("discord.js");
const { client } = require("..");
const prefix = process.env.BOT_PREFIX || '-';
module.exports.meta = {
name: 'help',
aliases: ['info'],
staffOnly: false
}
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
let embed = new MessageEmbed()
.setTitle('Obama bot')
.setDescription(`Epic obama bot help`)
addCmd(embed, 'obamium', 'Spawn obamium');
addCmd(embed, 'vbucks', 'Get free vbucks');
addCmd(embed, 'ping', 'Show the bot\'s ping');
addCmd(embed, 'coins', 'See how much karma/coins you have');
addCmd(embed, 'top', 'Karma leaderboard');
addCmd(embed, 'setcoins', '[Staff command] Manage a user\'s coins')
embed.addField('\u200b', `This bot was made by \`${client.users.cache.get('284323826165350400')?.tag}\`.\nCheck out the source code [here](https://gitea.janderedev.xyz/Jan/obama-bot "Click me!").`, false);
message.channel.send(embed);
}
/**
*
* @param {MessageEmbed} embed
* @param {string} cmd
* @param {string} text
*/
function addCmd(embed, cmd, text) {
embed.addField(`${prefix}${cmd}`, text, true);
}

38
commands/karma.js Normal file
View file

@ -0,0 +1,38 @@
const Discord = require('discord.js');
module.exports.meta = {
name: 'karma',
aliases: ['coins'],
staffOnly: false
}
const karma = require('../util/karma').karma;
const coins = require('../util/karma').coins;
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
const karmaID = '733339045463064607';
const coinsID = '733339908273602662';
const karmaEmote = message.guild.emojis.cache.get(karmaID).toString();
const coinsEmote = message.guild.emojis.cache.get(coinsID).toString();
let targetID = message.mentions.members.first() || message.author;
targetID = targetID.id;
let karmaembed = new Discord.MessageEmbed()
.setTitle(message.mentions.members.first() ? 'Balance of ' + message.mentions.members.first().user.username : 'Your balance')
.setDescription(`${karmaEmote} Karma: \`${karma.get(targetID) || '0'}\`\n${coinsEmote} Coins: \`${coins.get(targetID) || '0'}\``);
let kCount = karma.get(targetID);
if (kCount) {
if (kCount > 0) karmaembed.setColor('f36916');
if (kCount < 0) karmaembed.setColor('9494ff');
}
message.channel.send(karmaembed);
}

37
commands/obamium.js Normal file
View file

@ -0,0 +1,37 @@
const { Message } = require("discord.js");
const { client } = require("..");
module.exports.meta = {
name: 'obamium',
aliases: ['obab'],
staffOnly: false
}
const gID = '653568812578373643';
const IDs = [
['715931208135213087', '715931208281882666', '715931208936325141', '715931208332345366'],
['715931208269168812', '715931208432746537', '715931208491597924', '715931208357249044'],
['715931208361574421', '782261410876751943', '715931208290140172', '715931208374026332'],
['715931208378220666', '715931208319500310', '715931208898445402', '715931208550318170']
];
/**
*
* @param {Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
try {
const guild = client.guilds.cache.get(gID);
let msg = '';
IDs.forEach(row => {
row.forEach(eID => {
msg += guild.emojis.cache.get(eID).toString();
});
msg += '\n'
});
message.channel.send(msg);
} catch(e) {
console.error(e);
}
}

34
commands/ping.js Normal file
View file

@ -0,0 +1,34 @@
const Discord = require('discord.js');
const { client } = require('..');
module.exports.meta = {
name: 'ping',
aliases: [],
staffOnly: false
}
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
try {
let embed = new Discord.MessageEmbed()
.setTitle('Pong?')
.setDescription('Measuring...')
.setColor('#2F62CA');
message.channel.send(embed).then(msg => {
embed.setTitle('Pong!');
embed.description = undefined;
embed.addField(':robot: Bot Ping', `\`${Date.now() - message.createdTimestamp}ms\``, true);
embed.addField(':robot: API Ping', `\`${client.ws.ping}ms\``, true);
embed.addField(':speech_balloon: Message delay', `\`${msg.createdTimestamp - message.createdTimestamp}ms\``, true);
msg.edit(embed);
});
} catch(e) {
console.error(e);
message.channel.send(e);
}
}

33
commands/setcoins.js Normal file
View file

@ -0,0 +1,33 @@
const Discord = require('discord.js');
module.exports.meta = {
name: 'setcoins',
aliases: ['setcoin'],
staffOnly: true
}
const karma = require('../util/karma').karma;
const coins = require('../util/karma').coins;
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
let member = message.mentions.members.first();
if (!member) return message.channel.send('You need to @mention a member!')
if (!coins.get(member.id)) coins.set(member.id, 0);
let old = coins.get(member.id);
if (isNaN(args[1])) return message.channel.send('Invalid number');
coins.set(member.id, Number(args[1]));
message.channel.send(
new Discord.MessageEmbed()
.setTitle('Coins updated')
.setDescription(`Coins for \`${member.user.tag}\` set to \`${coins.get(member.id)}\` (old: \`${old}\`)`)
.setColor('ddbd37')
)
}

17
commands/stop.js Normal file
View file

@ -0,0 +1,17 @@
const Discord = require('discord.js');
module.exports.meta = {
name: 'stop',
aliases: ['stfu', 'shut'],
staffOnly: false,
epicOnly: true
}
/**
* Kills -copypasta
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
require('./copypasta').shut(message.channel.id);
}

14
commands/test.js Normal file
View file

@ -0,0 +1,14 @@
module.exports.meta = {
name: 'test',
aliases: ['t'],
staffOnly: false
}
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
message.channel.send('cool, your test worked. i hope you\'re happy now');
}

39
commands/top.js Normal file
View file

@ -0,0 +1,39 @@
const Discord = require('discord.js');
module.exports.meta = {
name: 'top',
aliases: ['leaderboard'],
staffOnly: false
}
const karma = require('../util/karma').karma;
const coins = require('../util/karma').coins;
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
const karmaID = '733339045463064607';
const karmaEmote = message.guild.emojis.cache.get(karmaID).toString();
let karmaboard = [];
karma.keyArray().forEach(uid => {
karmaboard.push({id: uid, karma: karma.get(uid)});
});
karmaboard.sort((a, b) => a.karma - b.karma);
karmaboard.reverse();
let embed = new Discord.MessageEmbed()
.setTitle('Karma Leaderboard')
.setDescription(karmaEmote + ' Karma leaderboard - Top 12 for ' + message.guild.name);
for (let x=0; x < 12; x += 1) {
if (!karmaboard[x]) break;
let u = message.guild.members.cache.get(karmaboard[x].id);
if (!u) embed.addField(`${x+1}. [Unknown user]`, `${karmaEmote} ${karmaboard[x].karma} Karma`, true); else embed.addField(`${x+1}. ${u.user.username}#${u.user.discriminator} ${u.user.bot ? '(Bot)' : ''}`, `${karmaEmote} ${karmaboard[x].karma} Karma`, true);
}
message.channel.send(embed);
}

41
commands/truefan.js Normal file
View file

@ -0,0 +1,41 @@
const Discord = require('discord.js');
module.exports.meta = {
name: 'truefan',
aliases: [],
staffOnly: true
}
const roleID = '718862546395988078';
const channelID = '718908301555007518';
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
let target = message.mentions.members.first();
let role = message.guild.roles.cache.get(roleID);
let channel = message.guild.channels.cache.get(channelID);
if (!role) return message.channel.send('Error: Could not find role');
if (!channel) return message.channel.send('Error: Could not find channel');
if (!target) return message.channel.send('You need to @mention someone for this to work!');
if (target.user.bot) return message.channel.send('You can\'t do this with bots.');
if (!target.roles.cache.has(roleID)) {
// Give the role
target.roles.add(role);
channel.send(`${target.user} is now able to access this channel.`);
let msg = new Discord.MessageEmbed()
.setTitle('Congratulations!')
.setDescription(`The r/Obamium Discord Staff has decided to give you access to a secret text channel: <#${channelID}>`)
.setThumbnail('https://discordemoji.com/assets/emoji/ClapClap.gif');
target.send(msg);
message.channel.send(`${target.user.username} is now a true obama fan.`);
} else {
// Take the role
target.roles.remove(role);
channel.send(`${target.user} is no longer able to access this channel.`);
message.channel.send(`${target.user.username} is no longer a true obama fan.`);
}
}

20
commands/vbucks.js Normal file
View file

@ -0,0 +1,20 @@
const Discord = require('discord.js');
module.exports.meta = {
name: 'vbucks',
aliases: ['vbuck'],
staffOnly: false
}
/**
*
* @param {Discord.Message} message
* @param {Array<string>} args
*/
module.exports.run = async (message, args) => {
let embed = new Discord.MessageEmbed()
.setAuthor('Free Vbucks 100% legit no virus', 'https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fdiscordemoji.com%2Fassets%2Femoji%2FVBuck.png&f=1&nofb=1')
.setDescription('Click here to download free Vbucks: [https://vbuck-free-generator.com](https://bit.ly/freevbucks2020legitworking)')
.setColor('88ccdb');
message.channel.send(embed);
}

View file

@ -1,6 +0,0 @@
{
"token": "Put the bot token here",
"prefix": "-",
"wit-token": "Put the token you get from Wit.ai here"
}

504
index.js
View file

@ -1,484 +1,44 @@
require('dotenv').config(); // Require and run dotenv
// Import modules
const Discord = require('discord.js');
const client = new Discord.Client({partials: ["REACTION", "MESSAGE"]});
const config = require('./config.json');
const Enmap = require('enmap');
client.login(config.token);
const client = new Discord.Client({partials: ["REACTION", "MESSAGE"]});
const karma = new Enmap({name: "karma"});
const coins = new Enmap({name: "coins"});
// Use log75 for logging
const { default: Log75, LogLevel } = require('log75')
const logger = new Log75(process.env.NODE_ENV == 'production' ? LogLevel.Standard : LogLevel.Debug, true);
module.exports.karma = karma;
module.exports.coins = coins;
module.exports.client = client;
const witmodule = require('./wit');
function random(low, high) {
low = Math.ceil(low);
high = Math.floor(high);
high = high + 1;
rndm = Math.random();
return Math.floor(rndm * (high - low) + low);
module.exports = {
client: client,
logger: logger
}
client.once('ready', () => {
console.log('Logged in as ' + client.user.username);
client.user.setActivity(`hamborger`, {type: "STREAMING", url: "https://www.youtube.com/watch?v=sHwvUFjaNdU"});
// Start the module thingys
require('./karma');
require('./vibechat');
require('./shitposts');
});
client.on('guildCreate', g => {
if (g.id != '653568812578373643') {
g.leave();
// Execute modules in util folder in order
async function runModules() {
for (const file of ['commandLoader', 'login', 'eventHandler', 'karma', 'carloscounter']) {
logger.debug(`Running module ${file}`);
await require(`./util/${file}`).run();
}
})
}
runModules();
let allowEval = false;
client.on('message', message => {
addToDatabase(message.author.id);
function checkMod(silent) {
if (!message.member.permissions.has('ADMINISTRATOR')) {
let erEmbed = new Discord.MessageEmbed()
.setTitle('You are not allowed to use this.')
.setDescription('Only the mod team can use this command.')
.setImage('https://media1.tenor.com/images/1056e92668594b262d3338c897ce9bd3/tenor.gif?itemid=7706023');
if (silent !== true) message.channel.send(erEmbed);
return true;
}
return false;
// Destroy client when SIGINT
process.on('SIGINT', async () => {
process.stdin.resume(); // Don't exit immediately
console.log('');
logger.info('SIGINT received.');
try {
await client.destroy();
} catch(e) {
logger.warn('Failed to destroy client');
process.exit();
}
function checkPremium(silent) {
if (!message.member.permissions.has('ADMINISTRATOR') && !message.member.roles.cache.has('718862546395988078' /* True ObamaFan */) && !message.member.roles.cache.has('653569849888473145' /* Obama sphere */) && !message.member.roles.cache.has('733394201957498901' /* Obama circle */)) {
let erEmbed = new Discord.MessageEmbed()
.setTitle('You are not allowed to use this.')
.setDescription('Only approved users can use this command.');
if (silent !== true) message.channel.send(erEmbed);
return true;
}
return false;
}
try {
if (message.author.bot) return;
if (!message.guild) return message.channel.send('You can only use me on the r/Obamium Discord right now.');
if (message.guild.id != '653568812578373643') message.guild.leave();
console.log(`Message by ${message.author.username}: ${message.content}`);
witmodule.execute(message);
// 69 nice haha le funny number
if (message.content.toLowerCase().indexOf('69') > -1) {
let replies = [
'You said the funny number nice',
'Haha funny 69',
'You did a funny right here:\n> 69',
'lmao funny number',
'69 is funny haha',
'you have achieved comedy by saying 69',
'https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.kym-cdn.com%2Fentries%2Ficons%2Foriginal%2F000%2F016%2F588%2Fsixtynine.jpg&f=1&nofb=1',
'Obama signed that your funny lmao',
'haha funny sex number',
'sex',
'69 nice'
];
let curIndex = 0;
let continueSearch = true;
let found = [];
while (continueSearch) {
if (message.content.toLowerCase().indexOf('69', curIndex) == -1) {
continueSearch = false;
break;
}
let f = message.content.toLowerCase().indexOf('69', curIndex);
curIndex = f + 1;
found.push(f);
}
delete continueSearch;
delete curIndex;
let send = false;
found.forEach(index => {
let charL = message.content.charAt(index - 1);
let charR = message.content.charAt(index + 2);
if ((isNaN(charL) || charL == '' || charL == ' ') && (isNaN(charR) || charR == '' || charR == ' ')) send = true;
});
if (send) message.channel.send(replies[random(0, replies.length - 1)]);
}
// Actual command stuff
if (message.content.startsWith(`<@!${client.user.id}> help`) || message.content.startsWith(`<@!${client.user.id}>help`)) return message.channel.send(`My prefix is \`${config.prefix}\`, type ${config.prefix}help for help.`);
if (!message.content.startsWith(config.prefix)) return;
const args = message.content.slice(config.prefix.length).split(' ');
const command = args.shift().toLowerCase();
switch(command) {
case 'help':
let owner = client.users.cache.get('284323826165350400');
let embed = new Discord.MessageEmbed()
.setTitle('Commands')
.addField('­', '**----- Public commands -----**')
.setDescription(`Kneel down, mortals, for the command list, signed by Obama himself.\nEvery command starts with the prefix '**${config.prefix}**', for example ${config.prefix}help.`)
.addField('-obamium', 'Send a Obamid in all its beauty')
.addField('-vbucks', 'Totally working V-Bucks generator')
.addField('-copypasta', 'oh shit oh fuck')
.addField('-karma', 'Shows your karma and coins on this server')
.addField('-top', 'Shows the users with the highest karma!')
.addField('-ping', 'Shows the bot\'s latency')
.addField('-brother', 'RGBRoachGang brothers, use this command to get access to a special channel!')
.addField('­', '**----- Admin commands -----**')
.addField('-truefan @Member', 'Give someone access to the top secret text channel™')
.addField('-coins @Member [give/set] [value]', 'Manage the coins of an user')
.setFooter(`© Obamium Research | Developed by ${owner.username}#${owner.discriminator}`, 'https://cdn.discordapp.com/emojis/716021350883393566.gif')
.setColor('9c6341');
message.channel.send(embed);
break;
case 'obama':
case 'obamid':
case 'obamium':
let msg = '';
msg += message.guild.emojis.cache.get('715931208135213087').toString();
msg += message.guild.emojis.cache.get('715931208281882666').toString();
msg += message.guild.emojis.cache.get('715931208936325141').toString();
msg += message.guild.emojis.cache.get('715931208332345366').toString();
msg += '\n';
msg += message.guild.emojis.cache.get('715931208269168812').toString();
msg += message.guild.emojis.cache.get('715931208432746537').toString();
msg += message.guild.emojis.cache.get('715931208491597924').toString();
msg += message.guild.emojis.cache.get('715931208357249044').toString();
msg += '\n';
msg += message.guild.emojis.cache.get('715931208361574421').toString();
msg += message.guild.emojis.cache.get('715931208134950963').toString();
msg += message.guild.emojis.cache.get('715931208290140172').toString();
msg += message.guild.emojis.cache.get('715931208374026332').toString();
msg += '\n';
msg += message.guild.emojis.cache.get('715931208378220666').toString();
msg += message.guild.emojis.cache.get('715931208319500310').toString();
msg += message.guild.emojis.cache.get('715931208898445402').toString();
msg += message.guild.emojis.cache.get('715931208550318170').toString();
message.channel.send(msg);
break;
case 'vbuck':
case 'vbucks':
message.delete();
let embed2 = new Discord.MessageEmbed()
.setAuthor('Free Vbucks 100% legit no virus', 'https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fdiscordemoji.com%2Fassets%2Femoji%2FVBuck.png&f=1&nofb=1')
.setDescription('Click here to download free Vbucks: [https://vbuck-free-generator.com](https://bit.ly/freevbucks2020legitworking)')
.setColor('88ccdb');
message.channel.send(embed2);
break;
case 'amitheowner':
if (message.author.id == '284323826165350400') {
message.channel.send(`Yes, ${message.author}, you definitely are my owner.`)
} else {
message.channel.send(`No, ${message.author}, you are not my owner.`)
}
break;
case 'ping':
let pingEmbed = new Discord.MessageEmbed()
.setTitle('Pong?')
.setDescription('Measuring...')
.setColor('#2F62CA');
message.channel.send(pingEmbed).then(msg => {
pingEmbed.setTitle('Pong!');
pingEmbed.description = undefined;
pingEmbed.addField(':speech_balloon: Message delay', `\`${msg.createdTimestamp - message.createdTimestamp}ms\``, true);
pingEmbed.addField(':robot: Bot Ping', `\`${Date.now() - message.createdTimestamp}ms\``, true);
msg.edit(pingEmbed);
});
break;
case 'brother':
let vibecheckembed = new Discord.MessageEmbed()
.setTitle('Are you a brother?')
.setDescription('If you are a r/rgbroachgang member, you can get acces to a secret rgbroachgang channel! I need to vibe check your reddit and Discord account first. You need to link a reddit account to your Discord account, and then [click here](https://obamium-subreddit.herokuapp.com/) to start the vibe check.');
message.channel.send(vibecheckembed);
break;
case 'truefan':
if (checkMod()) return;
let target = message.mentions.members.first();
let roleid = '718862546395988078';
let role = message.guild.roles.cache.get(roleid);
let cid = '718908301555007518';
let channel = message.guild.channels.cache.get(cid);
if (!role) return message.channel.send('Error: Could not find role');
if (!channel) return message.channel.send('Error: Could not find channel');
if (!target) return message.channel.send('You need to @mention someone for this to work!');
if (target.user.bot) return message.channel.send('You can\'t do this with bots.');
if (!target.roles.cache.has(roleid)) {
// Give the role
target.roles.add(role);
channel.send(`${target.user} is now able to access this channel.`);
let msg = new Discord.MessageEmbed()
.setTitle('Congratulations!')
.setDescription(`The r/Obamium Discord Staff has decided to give you access to a secret text channel: <#${cid}>`)
.setThumbnail('https://discordemoji.com/assets/emoji/ClapClap.gif');
target.send(msg);
message.channel.send(`${target.user.username} is now a true obama fan.`);
} else {
// Take the role
target.roles.remove(role);
channel.send(`${target.user} is no longer able to access this channel.`);
message.channel.send(`${target.user.username} is no longer a true obama fan.`);
}
break;
case 'toggleeval':
if (message.author.id != '284323826165350400') return console.log('Toggle Eval attemped by unauthorized user: ' + message.author.id);
if (allowEval == true) allowEval = false; else allowEval = true;
message.channel.send('Toggled ' + (allowEval ? 'on' : 'off'));
break;
case 'eval':
if (message.author.id != '284323826165350400') return console.log('Eval attemped by unauthorized user: ' + message.author.id);
if (!allowEval) return message.channel.send('Eval is disabled.');
message.suppressEmbeds(true);
var res = eval(args.join(' '));
if (typeof res == 'object') res = JSON.stringify(res);
else if (typeof res == 'function') res = '`(Function)`';
else if (typeof res == 'undefined') res = '`undefined`';
if (res == "{}") return;
message.channel.send(res);
break;
case 'copypasta':
if (checkPremium()) return;
if (!args[0]) args[0] = '';
switch(args[0].toLowerCase()) {
case 'toddler':
message.channel.send('**AITA For Dropkicking an Toddler off a cliff because he used my Dead Name**', {tts: true});
message.channel.send('The title speaks for itself. So me (20F transitioning) was going on a hike with my cousin and his parents.', {tts: true});
message.channel.send('Theres this really large cliff that looms over my house. I recently told my family I was trans.', {tts: true});
message.channel.send('I thought my toddler cousin had realize me new name is Jenny. Instead he said Max.', {tts: true});
message.channel.send('I instantly flew into a mentally unstable rage and my eyes turned red. I began to drool and have a mini-seizure.', {tts: true});
message.channel.send('I ran toward my cousin at the speed of light. I picked him up by the back of his shirt.', {tts: true});
message.channel.send('His parents ran toward him but with my tranny-powers I managed to use my telekineses and freeze them in mid-air.', {tts: true});
message.channel.send('I threw my toddler cousin up in the air and using my tranny in the 40% powers kicked him at the speed of light.', {tts: true});
message.channel.send('He went fucking flying and I heard his little screams which made my gaping hole which used to be my dick until I forcefully castrated myself began to drip with precum.', {tts: true});
message.channel.send('I saw him fall to the ground and splatter by then I was so horny I came all over the place.', {tts: true});
break;
case 'cum':
message.channel.send('**Infinite cum.**', {tts: true});
message.channel.send('You sit on the toilet to jack off, but you begin to cum uncontrollably.', {tts: true});
message.channel.send('After ten spurts you start to worry. Your hand is sticky and it reeks of semen.', {tts: true});
message.channel.send('You desperately shove your dick into a wad of toilet paper, but that only makes your balls hurt.', {tts: true});
message.channel.send('The cum accelerates. Its been three minutes. You cant stop cumming.', {tts: true});
message.channel.send('Your bathroom floor is covered in a thin layer of baby fluid. You try to cum into the shower drain but it builds up too fast.', {tts: true});
message.channel.send('You try the toilet. The cum is too thick to be flushed. You lock the bathroom door to prevent the cum from escaping.', {tts: true});
message.channel.send('The air grows hot and humid from the cum. The cum accelerates. You slip and fall in your own sperm.', {tts: true});
message.channel.send('The cum is now six inches deep, almost as long as your still-erect semen hose. Sprawled on your back, you begin to cum all over the ceiling.', {tts: true});
message.channel.send('Globs of the sticky white fluid begin to fall like raindrops, giving you a facial with your own cum. The cum accelerates.', {tts: true});
message.channel.send('You struggle to stand as the force of the cum begins to propel you backwards as if you were on a bukkake themed slip-and-slide.', {tts: true});
message.channel.send('Still on your knees, the cum is now at chin height. To avoid drowning you open the bathroom door.', {tts: true});
message.channel.send('The deluge of man juice reminds you of the Great Molasses Flood of 1919, only with cum instead of molasses.', {tts: true});
message.channel.send('The cum accelerates. Its been two hours. Your children and wife scream in terror as their bodies are engulfed by the snow-white sludge.', {tts: true});
message.channel.send('Your youngest child goes under, with viscous bubbles and muffled cries rising from the goop. You plead to God to end your suffering. The cum accelerates.', {tts: true});
message.channel.send('You squeeze your dick to stop the cum, but it begins to leak out of your asshole instead. You let go.', {tts: true});
message.channel.send('The force of the cum tears your urethra open, leaving only a gaping hole in your crotch that spews semen.', {tts: true});
message.channel.send('Your body picks up speed as it slides backwards along the cum. You smash through the wall, hurtling into the sky at thirty miles an hour.', {tts: true});
message.channel.send('From a birds eye view you see your house is completely white. Your neighbor calls the cops. The cum accelerates.', {tts: true});
message.channel.send('As you continue to ascend, you spot police cars racing towards your house.', {tts: true});
message.channel.send('The cops pull out their guns and take aim, but stray loads of cum hit them in the eyes, blinding them. The cum accelerates.', {tts: true});
message.channel.send('You are now at an altitude of 1000 feet. The SWAT team arrives. Military helicopters circle you. Hundreds of bullets pierce your body at once, yet you stay conscious.', {tts: true});
message.channel.send('Your testicles have now grown into a substitute brain. The cum accelerates. It has been two days. With your body now destroyed, the cum begins to spray in all directions.', {tts: true});
message.channel.send('You break the sound barrier. The government deploys fighter jets to chase you down, but the impact of your cum sends one plane crashing to the ground.', {tts: true});
message.channel.send('The government decides to let you leave the earth. You feel your gonads start to burn up as you reach the edges of the atmosphere.', {tts: true});
message.channel.send('You narrowly miss the ISS, giving it a new white paint job as you fly past. Physicists struggle to calculate your erratic trajectory.', {tts: true});
message.channel.send('The cum accelerates. The cum begins to gravitate towards itself, forming a comet trail of semen. Astronomers begin calling you the “Cummet.”', {tts: true});
message.channel.send('You are stuck in space forever, stripped of your body and senses, forced to endure an eternity of cumshots. Eventually, you stop thinking.', {tts: true});
break;
case 'navyseal':
case 'navy':
message.channel.send('What the fuck did you just fucking say about me, you little bitch?', {tts: true});
message.channel.send('Ill have you know I graduated top of my class in the Navy Seals, and Ive been involved in numerous secret raids on Al-Quaeda, and I have over 300 confirmed kills.', {tts: true});
message.channel.send('I am trained in gorilla warfare and Im the top sniper in the entire US armed forces. You are nothing to me but just another target.', {tts: true});
message.channel.send('I will wipe you the fuck out with precision the likes of which has never been seen before on this Earth, mark my fucking words.', {tts: true});
message.channel.send('You think you can get away with saying that shit to me over the Internet? Think again, fucker.', {tts: true});
message.channel.send('As we speak I am contacting my secret network of spies across the USA and your IP is being traced right now so you better prepare for the storm, maggot.', {tts: true});
message.channel.send('The storm that wipes out the pathetic little thing you call your life.', {tts: true});
message.channel.send('Youre fucking dead, kid. I can be anywhere, anytime, and I can kill you in over seven hundred ways, and thats just with my bare hands.', {tts: true});
message.channel.send('Not only am I extensively trained in unarmed combat, but I have access to the entire arsenal of the United States Marine Corps', {tts: true});
message.channel.send('and I will use it to its full extent to wipe your miserable ass off the face of the continent, you little shit.', {tts: true});
message.channel.send('If only you could have known what unholy retribution your little “clever” comment was about to bring down upon you, maybe you would have held your fucking tongue.', {tts: true});
message.channel.send('But you couldnt, you didnt, and now youre paying the price, you goddamn idiot. I will shit fury all over you and you will drown in it. Youre fucking dead, kiddo.', {tts: true});
break;
case 'ben-shapiro':
message.channel.send('You know, let\'s just say, hypothetically speaking, that I were to have sex with your mom.', {tts: true});
message.channel.send('Now, hypothetically speaking, if this did happen, I mean, you must remember that all physical matter has a very thin layer of atoms surrounding it, so technically, you are never truly', {tts: true});
message.channel.send('touching anything or anyone, but instead, the atoms surrounding your body and this object or person are coming into contact with one another.', {tts: true});
message.channel.send('So, once again, hypothetically speaking, if I were to attempt to have sex with your mom, I would fail miserably, because, according to science, our bodies would never come into contact', {tts: true});
message.channel.send(' with one another.', {tts: true});
break;
case 'a':
case 'aa':
case 'aaa':
case 'aaaa':
case 'aaaaa':
case 'aaaaaa':
case 'aaaaaaa':
case 'aaaaaaaa':
case 'aaaaaaaaa':
case 'aaaaaaaaaa':
case 'aaaaaaaaaaa':
case 'aaaaaaaaaaaa':
case 'aaaaaaaaaaaaa':
case 'aaaaaaaaaaaaaa':
case 'aaaaaaaaaaaaaaa':
case 'aaaaaaaaaaaaaaaa':
// i want to die
const oldName = message.guild.members.cache.get(client.user.id).nickname;
message.guild.members.cache.get(client.user.id).setNickname('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA').then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true}).then(() => {
message.channel.send('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA', {tts: true})
.then(() => message.guild.members.cache.get(client.user.id).setNickname(oldName));
})})})})})})})})})})})})})})})})})})})})})})})})})})})})});
});
break;
default:
message.channel.send('cum', {tts: true}).then(m => m.edit('Choose a copypasta:\n- toddler (10 lines, 1:15 minutes)\n- cum (28 lines, 4:10 minutes)\n- navyseal (12 lines, 1:45 minutes)\n- aaaaaaaaaa (30 lines, *forever*)\n- ben-shapiro (5 lines, 50.59 seconds)'));
break;
}
break;
case 'karma':
case 'coins':
case 'coin':
case 'gold':
const karmaID = '733339045463064607';
const coinsID = '733339908273602662';
const karmaEmote = message.guild.emojis.cache.get(karmaID).toString();
const coinsEmote = message.guild.emojis.cache.get(coinsID).toString();
let targetID = message.mentions.members.first() || message.author;
targetID = targetID.id;
let karmaembed = new Discord.MessageEmbed()
.setTitle(message.mentions.members.first() ? 'Balance of ' + message.mentions.members.first().user.username : 'Your balance')
.setDescription(`${karmaEmote} Karma: \`${karma.get(targetID) || '0'}\`\n${coinsEmote} Coins: \`${coins.get(targetID) || '0'}\``);
let kCount = karma.get(targetID);
if (kCount) {
if (kCount > 0) karmaembed.setColor('f36916');
if (kCount < 0) karmaembed.setColor('9494ff');
}
message.channel.send(karmaembed);
break;
case 'top':
const karmaID1 = '733339045463064607';
const karmaEmote1 = message.guild.emojis.cache.get(karmaID1).toString();
let karmaboard = [];
karma.keyArray().forEach(uid => {
karmaboard.push({id: uid, karma: karma.get(uid)});
});
karmaboard.sort((a, b) => a.karma - b.karma);
karmaboard.reverse();
let karmaboardembed = new Discord.MessageEmbed()
.setTitle('Karma Leaderboard')
.setDescription(karmaEmote1 + ' Karma leaderboard - Top 12 for ' + message.guild.name);
for (let x=0; x < 12; x += 1) {
if (!karmaboard[x]) break;
let u = message.guild.members.cache.get(karmaboard[x].id);
if (!u) karmaboardembed.addField(`${x+1}. [Unknown user]`, `${karmaEmote1} ${karmaboard[x].karma} Karma`, true); else karmaboardembed.addField(`${x+1}. ${u.user.username}#${u.user.discriminator} ${u.user.bot ? '(Bot)' : ''}`, `${karmaEmote1} ${karmaboard[x].karma} Karma`, true);
}
message.channel.send(karmaboardembed);
break;
case 'managecoins':
case 'setcoins':
case 'usercoins':
if (checkMod()) return;
let member = message.mentions.members.first();
if (!member) return message.channel.send('You need to @mention a member!')
if (!coins.get(member.id)) coins.set(member.id, 0);
let pass = false;
let amount = 0;
if (args[1] == 'set') {
if (isNaN(args[2])) return message.channel.send('You gotta put in a number!');
pass = true;
amount = args[2];
}
else if (args[1] == 'give' ||args[1] == 'add') {
if (isNaN(args[2])) return message.channel.send('You gotta put in a number!');
pass = true;
amount = coins.get(member.id) + Number(args[2]);
}
else if (isNaN(args[1])) return message.channel.send('You gotta put in a number!');
else {
pass = true;
amount = coins.get(member.id) + Number(args[1]);
}
if (!pass) return;
let old = coins.get(member.id);
let coinsSetEmbed = new Discord.MessageEmbed()
.setTitle('Coins updated for '+ member.user.username)
.setDescription(`Coins set to ${amount} (Old amount: ${old})`)
.setColor('ddbd37');
message.channel.send(coinsSetEmbed)
.then(() => {
coins.set(member.id, amount);
});
break;
}
} catch (e) {
message.channel.send(new Discord.MessageEmbed()
.setTitle('An error has occurred.')
.setDescription(`\`\`\`js\n${e}\`\`\``)
.setColor('ff0000'));
console.error(e);
}
});
function addToDatabase(id) {
if (!id) return;
if (typeof karma.get(id) != 'number') karma.set(id, 0);
if (typeof coins.get(id) != 'number') coins.set(id, 0);
return;
}
logger.done('Logged out client, exiting.');
process.exit();
});

137
karma.js
View file

@ -1,137 +0,0 @@
const Enmap = require('enmap');
const { ReactionUserManager } = require('discord.js');
const client = require('./index').client;
// Stores the karma and coins of users
const karma = require('./index').karma;
const coins = require('./index').coins;
const upvoteID = '719181283393142786';
const downvoteID = '719181283774955540';
// Awards
const awards = {
"731192828415443116": {
name: "Silver",
cost: 100,
give: 0,
role: "733407208536277113"
},
"731192829262692372": {
name: "Gold",
cost: 500,
give: 100,
role: "733407216199008416"
},
"731192942080950333":{
name: "Platinum",
cost: 1800,
give: 700,
role: "733407213900660807"
},
"731508866273247252": {
name: "Argentium",
cost: 20000,
give: 2500,
role: "733407211178557583"
},
"739266335128944683": {
name: "Argentobamium",
cost: 100000,
give: 69420,
role: "739266563038904421"
}
}
client.on('messageReactionAdd', async function(reaction, user) {
// Fetch reaction and user if they are partial
if (reaction.partial) reaction = await reaction.fetch();
if (user.partial) reaction = await user.fetch();
if (reaction.message.author.bot) return; // Dont give karma to bots
await addToDatabase(reaction.message.author.id); // Add the user to the database
if (!reaction.emoji.id) return; // Return when emoji has no ID (is a "default" emoji)
if (user.bot) return; // Don't accept reactions from bots.
if (!reaction.message.guild) return; // Don't accept reactions from DMs
const message = reaction.message; // The message object the reaction was added to
if (reaction.emoji.id == upvoteID) {
karma.inc(message.author.id);
return;
}
else if (reaction.emoji.id == downvoteID) {
karma.dec(message.author.id);
return;
} else if (awards[reaction.emoji.id]) {
let award = awards[reaction.emoji.id];
if (coins.get(user.id) < award.cost) {
message.channel.send(`${user}, you don't have sufficient coins to use this award.`);
reaction.users.remove(user.id);
return;
}
if (message.author.id == user.id) {
//reaction.remove();
reaction.users.remove(user.id);
return message.channel.send(`${user}, why would you give an award to yourself? smh my head`);
}
coins.set(user.id, (coins.get(user.id) - award.cost));
coins.set(message.author.id, (coins.get(message.author.id) + award.give));
message.channel.send(`${user} just gave the ${client.emojis.cache.get(reaction.emoji.id).toString()} ${award.name} award (Price: ${award.cost} coins) to ${message.author}${award.give > 0 ? `. ${message.author.username} has received ${award.give} coins` : ''}!`);
require('./karma').updateRoles(user.id);
require('./karma').updateRoles(message.author.id);
}
});
client.on('messageReactionRemove', async function(reaction, user) {
// Fetch reaction and user if they are partial
if (reaction.partial) reaction = await reaction.fetch();
if (user.partial) reaction = await user.fetch();
await addToDatabase(reaction.message.author.id); // Add the user to the database
if (!reaction.emoji.id) return; // Return when emoji has no ID (is a "default" emoji)
if (user.bot) return; // Don't accept reactions from bots.
if (!reaction.message.guild) return; // Don't accept reactions from DMs
const message = reaction.message; // The message object the reaction was added to
if (reaction.emoji.id == upvoteID) {
karma.dec(message.author.id);
return;
}
else if (reaction.emoji.id == downvoteID) {
karma.dec(message.author.id);
return;
}
});
// Milestones for reaching certain karma values
function milestone(id) {
}
// Reset a user's coin/karma count when its not of type number
async function addToDatabase(id) {
if (!id) return;
if (typeof karma.get(id) != 'number') karma.set(id, 0);
if (typeof coins.get(id) != 'number') coins.set(id, 100);
return;
}
module.exports.updateRoles = function(id) {
let member = client.guilds.cache.get('653568812578373643').members.cache.get(id);
let membercoins = coins.get(member.id);
Object.keys(awards).forEach(awardid => {
let award = awards[awardid];
if (member.roles.cache.has(award.role)) {
if (membercoins < award.cost) member.roles.remove(award.role);
} else {
if (membercoins >= award.cost) member.roles.add(award.role);
}
});
}

1701
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -11,7 +11,9 @@
"dependencies": {
"better-sqlite3": "^7.1.0",
"discord.js": "^12.2.0",
"dotenv": "^8.2.0",
"enmap": "^5.3.2",
"log75": "^1.0.2",
"node-wit": "^6.0.0"
}
}

View file

@ -1,37 +0,0 @@
const Discord = require('discord.js');
const client = require('./index').client;
const tChannelID = '740207856288268289';
const emoji = '719181283393142786';
client.on('messageReactionAdd', async function(reaction, user) {
// Some people abused this "feature", to it is temporarily disabled.
return;
let publish = false;
// Fetch partials
if (reaction.partial) reaction = await reaction.fetch();
if (user.partial) user = await user.fetch();
if (user.bot && user.id != client.user.id) return;
if (reaction.message.channel.id != tChannelID) return;
if (reaction.message.channel.type != 'news') return;
if (reaction.emoji.id != emoji) return;
const count = reaction.message.reactions.cache.filter(e => e.emoji.id == emoji).array()[0].count;
if (count == 3) publish = true; // When the message has an attachment, publish it at 3 upvotes, else at 5
// This publishes the message using a direct API call. (Copied from https://github.com/Forcellrus/Discord-Auto-Publisher/blob/master/bot.js)
if (!publish) return;
reaction.message.react(client.emojis.cache.get('730053273561727063')).catch();
await fetch(`https://discord.com/api/v6/channels/${reaction.message.channel.id}/messages/${reaction.message.id}/crosspost`, {
method: 'POST',
headers: {
Authorization: `Bot ${require('./config.json').token}`,
},
});
});

54
util/69Reply.js Normal file
View file

@ -0,0 +1,54 @@
const Discord = require('discord.js');
function random(low, high) {
low = Math.ceil(low);
high = Math.floor(high);
high = high + 1;
rndm = Math.random();
return Math.floor(rndm * (high - low) + low);
}
/**
*
* @param {Discord.Message} message
*/
module.exports.execute = (message) => {
// 69 nice haha le funny number
if (message.content.toLowerCase().indexOf('69') > -1) {
let replies = [
'You said the funny number nice',
'Haha funny 69',
'You did a funny right here:\n> 69',
'lmao funny number',
'https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fi.kym-cdn.com%2Fentries%2Ficons%2Foriginal%2F000%2F016%2F588%2Fsixtynine.jpg&f=1&nofb=1',
'youre\'r funny lmao',
'haha funny sex number',
'sex',
'69 nice'
];
let curIndex = 0;
let continueSearch = true;
let found = [];
while (continueSearch) {
if (message.content.toLowerCase().indexOf('69', curIndex) == -1) {
continueSearch = false;
break;
}
let f = message.content.toLowerCase().indexOf('69', curIndex);
curIndex = f + 1;
found.push(f);
}
delete continueSearch;
delete curIndex;
let send = false;
found.forEach(index => {
let charL = message.content.charAt(index - 1);
let charR = message.content.charAt(index + 2);
if ((isNaN(charL) || charL == '' || charL == ' ') && (isNaN(charR) || charR == '' || charR == ' ')) send = true;
});
if (send) message.channel.send(replies[random(0, replies.length - 1)]);
}
}

59
util/carloscounter.js Normal file
View file

@ -0,0 +1,59 @@
const Discord = require('discord.js');
const { client, logger } = require('../index');
const Enmap = require('enmap');
const { updateRoles } = require('./karma');
const stats = new Enmap({name: 'carlos_stats'});
let uID = '566239971309256704';
let guildID = '653568812578373643';
let muteRoleID = '751522580300693608';
let statusRoleID = '795371115513249862';
module.exports.run = () => {
}
/**
* This counts how often a specific user got banned/muted.
*/
if (stats.get('bans') == undefined) stats.set('bans', 0);
if (stats.get('mutes') == undefined) stats.set('mutes', 0);
try {
let role = client.guilds.cache.get(guildID).roles.cache.get(statusRoleID), roleName = role.name;
let [bans, mutes] = roleName.split(' bans, ');
mutes = Number(mutes.split(' mutes')[0]);
bans = Number(bans);
if (mutes != undefined && bans != undefined) {
stats.set('bans', bans);
stats.set('mutes', mutes);
}
} catch(e) {
logger.warn('Failed to parse role name: ' + e);
}
client.on('guildBanAdd', (guild, user) => {
if (user.id != uID) return;
stats.set('bans', Number(stats.get('bans')) + 1);
updateRole();
});
client.on('guildMemberUpdate', (oldMember, newMember) => {
if (newMember.id != uID) return;
if (!oldMember.roles.cache.get(muteRoleID) && newMember.roles.cache.get(muteRoleID)) {
stats.set('mutes', Number(stats.get('mutes')) + 1);
updateRole();
}
});
client.on('guildMemberAdd', (member) => {
if (member.id == uID) member.roles.add(statusRoleID).catch(e => logger.warn(`Failed to assign role ${muteRoleID}: ${e}`));
});
let updateRole = () => {
let role = client.guilds.cache.get(guildID).roles.cache.get(statusRoleID);
if (!role) return;
if (role.editable) role.setName(`${stats.get('bans')} bans, ${stats.get('mutes')} mutes`, 'Carlos is a dipfuck');
else logger.warn('Can\'t manage role ' + statusRoleID);
}

25
util/commandLoader.js Normal file
View file

@ -0,0 +1,25 @@
const { client, logger } = require('../index');
const fs = require('fs');
const Discord = require('discord.js');
module.exports.commands = new Discord.Collection();
module.exports.run = () => {
for (const file of fs.readdirSync('commands/')) {
if (file.endsWith('.js')) {
try {
const command = require(`../commands/${file}`);
if (!command.meta?.name)
logger.warn(`Command ${file} does not have a 'name' attribute; skipping.`);
else
this.commands.set(command.meta.name, command);
} catch(e) {
logger.error(`Failed to load command '${file}'`);
console.error(e);
process.exit(1);
}
}
}
logger.info(`${this.commands.size} command${this.commands.size != 1 ? 's' : ''} loaded`);
}

88
util/eventHandler.js Normal file
View file

@ -0,0 +1,88 @@
const Discord = require('discord.js');
const { client, logger } = require('../index');
const prefix = process.env.BOT_PREFIX || '-';
module.exports.run = () => {
}
const { commands } = require('./commandLoader');
client.on('message', message => {
if (message.author?.bot) return;
addToDatabase(message.author.id);
require('./wit').execute(message);
try {
logger.debug(`${message.author.tag} => ${message.content}`);
let msgContent = message.content;
let usedPrefix;
if (msgContent.startsWith(prefix)) usedPrefix = prefix;
else if (msgContent.startsWith(`<@${client.user.id}>`)) usedPrefix = `<@${client.user.id}>`;
else if (msgContent.startsWith(`<@!${client.user.id}>`)) usedPrefix = `<@!${client.user.id}>`;
if (!usedPrefix) return require('./69Reply').execute(message);
msgContent = msgContent.substr(msgContent.indexOf(usedPrefix) + 1, msgContent.length);
if (msgContent.startsWith(' ') && usedPrefix != prefix) msgContent = msgContent.substr(1, msgContent.length);
const args = msgContent.split(' ');
const cmdName = args.shift()?.toLowerCase();
const cmd = commands.find(cmd => cmd.meta?.name == cmdName || cmd.meta?.aliases?.indexOf(cmdName) > -1);
if (!cmd) return require('./69Reply').execute(message);
logger.info(`[CMD] ${message.author.id} ${message.author.tag} => ${cmdName} ${args.join(' ')}`);
if (cmd.meta?.name != 'stop' && require('../commands/copypasta').copypastaing[message.channel?.id])
return message.react('810153990733561876').catch(console.warn);
if (cmd.meta?.staffOnly && !message.member.permissions.has('ADMINISTRATOR')) {
logger.warn(`${message.author.tag} => Refusing to run staff command`);
message.channel.send(
new Discord.MessageEmbed()
.setTitle('You are unworthy')
.setDescription('This command can only be used by this server\'s staff.')
.setImage('https://media1.tenor.com/images/1056e92668594b262d3338c897ce9bd3/tenor.gif?itemid=7706023')
.setColor('ff0000')
)
return;
}
else if (cmd.meta?.epicOnly && !message.member?.roles.cache.get('718862546395988078')) {
logger.warn(`${message.author.tag} => Refusing to run epic only command`);
message.channel.send(
new Discord.MessageEmbed()
.setTitle('You are unworthy')
.setDescription('Only epic people can use this command. You are not epic.')
.setImage('https://media1.tenor.com/images/1056e92668594b262d3338c897ce9bd3/tenor.gif?itemid=7706023')
.setColor('ff0000')
)
return;
}
try {
cmd.run(message, args);
} catch(e) {
console.error(e);
message.channel.send(
new Discord.MessageEmbed()
.setTitle('You broke Obama')
.setDescription(`Good job, you broke Obama. Debug info: \`\`\`js\n${e}\`\`\``)
.setColor('ff0000')
)
return;
}
} catch(e) {
console.error(e);
message.channel.send('An error has occurred. fuck');
return;
}
});
const karma = require('./karma').karma;
const coins = require('./karma').coins;
function addToDatabase(id) {
if (!id) return;
if (typeof karma.get(id) != 'number') karma.set(id, 0);
if (typeof coins.get(id) != 'number') coins.set(id, 0);
return;
}

153
util/karma.js Normal file
View file

@ -0,0 +1,153 @@
const { client, logger } = require('../index');
const Enmap = require('enmap');
// Stores the karma and coins of users
const karma = new Enmap({name: "karma"});
const coins = new Enmap({name: "coins"});
module.exports.karma = karma;
module.exports.coins = coins;
const upvoteID = '719181283393142786';
const downvoteID = '719181283774955540';
// Awards
const awards = {
"731192828415443116": {
name: "Silver",
cost: 100,
give: 0,
role: "733407208536277113"
},
"731192829262692372": {
name: "Gold",
cost: 500,
give: 100,
role: "733407216199008416"
},
"731192942080950333":{
name: "Platinum",
cost: 1800,
give: 700,
role: "733407213900660807"
},
"731508866273247252": {
name: "Argentium",
cost: 20000,
give: 2500,
role: "733407211178557583"
},
"739266335128944683": {
name: "Argentobamium",
cost: 100000,
give: 69420,
role: "739266563038904421"
}
}
let timeouts = {}
module.exports.run = () => {
client.on('messageReactionAdd', async function(reaction, user) {
// Fetch reaction and user if they are partial
if (reaction.partial) reaction = await reaction.fetch();
if (user.partial) reaction = await user.fetch();
if (reaction.message.author.bot) return; // Dont give karma to bots
await addToDatabase(reaction.message.author.id); // Add the user to the database
if (!reaction.emoji.id) return; // Return when emoji has no ID (is a "default" emoji)
if (user.bot) return; // Don't accept reactions from bots.
if (!reaction.message.guild) return; // Don't accept reactions from DMs
const message = reaction.message; // The message object the reaction was added to
if (reaction.emoji.id == upvoteID) {
karma.inc(message.author.id);
return;
}
else if (reaction.emoji.id == downvoteID) {
karma.dec(message.author.id);
return;
} else if (awards[reaction.emoji.id]) {
let award = awards[reaction.emoji.id];
let noTimeout = (!timeouts[user.id] || timeouts[user.id] < Date.now());
let perms = message.channel.permissionsFor(user.id);
if (!perms.has('SEND_MESSAGES') || !perms.has('ADD_REACTIONS')) {
logger.warn(`${user.tag} => Ignoring reaction in #${message.channel.name}: User is missing permission`);
reaction.users.remove(user.id);
return;
}
if (coins.get(user.id) < award.cost) {
if (noTimeout) message.channel.send(`${user}, you don't have sufficient coins to use this award.`);
reaction.users.remove(user.id);
timeouts[user.id] = Date.now() + 5000;
return;
}
if (message.author.id == user.id) {
reaction.users.remove(user.id);
if (noTimeout) message.channel.send(`${user}, why would you give an award to yourself? smh my head`);
timeouts[user.id] = Date.now() + 5000;
return;
}
coins.set(user.id, (coins.get(user.id) - award.cost));
coins.set(message.author.id, (coins.get(message.author.id) + award.give));
message.channel.send(`${user} just gave the ${client.emojis.cache.get(reaction.emoji.id).toString()} ${award.name} award (Price: ${award.cost} coins) to ${message.author}${award.give > 0 ? `. ${message.author.username} has received ${award.give} coins` : ''}!`);
require('./karma').updateRoles(user.id);
require('./karma').updateRoles(message.author.id);
}
});
client.on('messageReactionRemove', async function(reaction, user) {
// Fetch reaction and user if they are partial
if (reaction.partial) reaction = await reaction.fetch();
if (user.partial) reaction = await user.fetch();
await addToDatabase(reaction.message.author.id); // Add the user to the database
if (!reaction.emoji.id) return; // Return when emoji has no ID (is a "default" emoji)
if (user.bot) return; // Don't accept reactions from bots.
if (!reaction.message.guild) return; // Don't accept reactions from DMs
const message = reaction.message; // The message object the reaction was added to
if (reaction.emoji.id == upvoteID) {
karma.dec(message.author.id);
return;
}
else if (reaction.emoji.id == downvoteID) {
karma.dec(message.author.id);
return;
}
});
}
// Milestones for reaching certain karma values
function milestone(id) {
}
// Reset a user's coin/karma count when its not of type number
async function addToDatabase(id) {
if (!id) return;
if (typeof karma.get(id) != 'number') karma.set(id, 0);
if (typeof coins.get(id) != 'number') coins.set(id, 100);
return;
}
module.exports.updateRoles = function(id) {
let member = client.guilds.cache.get('653568812578373643').members.cache.get(id);
let membercoins = coins.get(member.id);
Object.keys(awards).forEach(awardid => {
let award = awards[awardid];
if (member.roles.cache.has(award.role)) {
if (membercoins < award.cost) member.roles.remove(award.role);
} else {
if (membercoins >= award.cost) member.roles.add(award.role);
}
});
}

45
util/login.js Normal file
View file

@ -0,0 +1,45 @@
const { client, logger } = require('../index');
module.exports.run = () => {
return new Promise((resolve, reject) => {
const token = process.env.BOT_TOKEN;
if (!token) {
logger.error('No bot token provided. Please provide the bot token as environment variable \'BOT_TOKEN\'.');
process.exit(1);
}
logger.info('Logging in');
const loginStartTime = Date.now();
client.login(token)
.catch(error => {
logger.error(`Failed to log in\n${error}`);
process.exit(1);
});
client.on('ready', () => {
logger.done(
`Logged in as ${client.user.tag}\n` +
logger.createBox([
`Login took ${Date.now() - loginStartTime}ms`,
`${client.guilds.cache.size} cached guilds`,
`${client.users.cache.size} cached users`
])
);
resolve();
// Set the bot's activity and update it every 60 seconds in case it gets reset
let setActivity = () => {
try {
// Activity type 5 corresponds to 'Competing in': https://discord.com/developers/docs/game-sdk/activities#data-models-activitytype-enum
client.user.setPresence({ activity: { type: 5, name: 'being Obama' }, status: 'dnd' })
.then(() => logger.debug('Updated activity'));
} catch(e) {
console.error(e);
}
}
setActivity();
setInterval(setActivity, (1000 * 60));
});
});
}

View file

@ -1,7 +1,8 @@
const config = require('./config.json');
const { Wit } = require('node-wit');
const { Message } = require('discord.js');
const client = new Wit({accessToken: config["wit-token"]});
const { logger } = require('..');
if (!process.env.WIT_TOKEN) return logger.warn(`No wit.ai token found, disabling AI features`);
const client = new Wit({accessToken: process.env.WIT_TOKEN});
function random(low, high) {
low = Math.ceil(low);
@ -11,21 +12,21 @@ function random(low, high) {
return Math.floor(rndm * (high - low) + low);
}
// The database karma sets stored in
const karmaDB = require('./index').karma;
const coinsDB = require('./index').coins;
// The database karma is stored in
const karmaDB = require('./karma').karma;
const coinsDB = require('./karma').coins;
/**
* @param {Message} message
*/
module.exports.execute = function(message) {
module.exports.execute = async (message) => {
if (!message.content) return;
if (message.content.length > 280) return randomAward();
// Send the message to wit.ai
client.message(message.content)
.then(response => {
if (message.deleted) return;
let action = response.intents[0];
// "Execute" the intent.
@ -33,18 +34,12 @@ module.exports.execute = function(message) {
switch(action.name) {
case 'awardspam':
// Disabled for "karma balancing reasons"
randomAward();
randomAward(1.1);
return;
// Spam a fuckton of awards
message.react('731564182079799306').then(() => {
message.react('719181283393142786').catch().then(() => {
message.react('731192828415443116').catch().then(() => {
message.react('731192829262692372').catch().then(() => {
message.react('731192942080950333').catch().then(() => {
message.react('731508866273247252').catch().then(() => {
message.react('716021350883393566').catch();
})})})})})});
['731564182079799306', '719181283393142786', '731192828415443116', '731192829262692372', '731192942080950333', '731508866273247252', '716021350883393566']
.forEach(async id => await message.react(id));
break;
case 'upvote':
message.react('719181283393142786');
@ -54,25 +49,29 @@ module.exports.execute = function(message) {
message.react('719181283774955540');
karmaDB.dec(message.author.id);
break;
case 'bruh':
message.react('730882526259707997');
break;
default:
randomAward();
randomAward(1);
break;
}
})
.catch(error => {
console.error(error);
message.channel.send('Wit.ai error:\n' + error);
message.channel.send(`Wit.ai error:\n\`\`\`js\n${error}\`\`\``);
});
function randomAward() {
function randomAward(multiplier) {
if (!multiplier) multiplier = 1;
// Randomly decide if the message should get a random "award" or yeet an obamium on it
if (message.content.toLowerCase().indexOf('obamium') > -1 || message.content.toLowerCase().indexOf('obama') > -1) {
return message.react('716021350883393566').catch();
}
const randomNum = random(0, 10000) / 100;
if (randomNum > 99.9) {message.react('731508866273247252').catch(); coinsDB.set(message.author.id, (coinsDB.get(message.author.id) + 2500))} // Argentinum
const randomNum = (random(0, 10000) / 100) * multiplier;
if (randomNum > 99.9) {message.react('731508866273247252').catch(); coinsDB.set(message.author.id, (coinsDB.get(message.author.id) + 2500))} // Argentinum
else if (randomNum > 99.5) {message.react('731192942080950333').catch(); coinsDB.set(message.author.id, (coinsDB.get(message.author.id) + 700)) } // Platinum
else if (randomNum > 99) {message.react('731192829262692372').catch(); coinsDB.set(message.author.id, (coinsDB.get(message.author.id) + 100)) } // Gold
else if (randomNum > 99) {message.react('731192829262692372').catch(); coinsDB.set(message.author.id, (coinsDB.get(message.author.id) + 100)) } // Gold
else if (randomNum > 98) {message.react('731192828415443116').catch(); coinsDB.set(message.author.id, (coinsDB.get(message.author.id) + 0)) } // Silver
require('./karma').updateRoles(message.author.id);
}
}
}

View file

@ -1,21 +0,0 @@
const Discord = require('discord.js');
const client = require('./index').client;
const TCID = '737698514209079377';
const VCID = '700734003174703265';
const TC = client.channels.cache.get(TCID);
const VC = client.channels.cache.get(VCID);
client.on('voiceStateUpdate', (oldMember, newMember) => {
if (oldMember.channelID == newMember.channelID) return;
if (newMember.member.hasPermission('ADMINISTRATOR')) return;
if (newMember.channelID == VCID) {
TC.createOverwrite(newMember.member, {
VIEW_CHANNEL: true
}
, 'Does anyone even read this?');
} else if (newMember.channelID != VCID && oldMember.channelID == VCID) {
TC.permissionOverwrites.get(oldMember.id).delete('Does anyone even read this?').catch();
}
});