Osselbot/src/index.js

294 lines
11 KiB
JavaScript
Executable File

#!/usr/bin/env node
/* eslint-disable no-mixed-spaces-and-tabs */
/* eslint-disable no-inner-declarations */
// Load up the libraries
const Discord = require("discord.js");
const prettyMilliseconds = require('pretty-ms');
const fs = require('fs');
const homedir = require('os').homedir;
const info = require("../package.json");
// const fetch = require('node-fetch');
//importing files
const config = require("./config.json");
// This is making clients
const client = new Discord.Client();
function activity() {
client.user.setActivity(`${client.users.cache.size} of you horrible people`,{ type: 'LISTENING' });
}
client.on("ready", () => {
// This event will run if the bot starts, and logs in, successfully.
console.log(`Bot has started, with ${client.users.cache.size} users, in ${client.channels.cache.size} channels of ${client.guilds.cache.size} guilds.`);
// Example of changing the bot's playing game to something useful. `client.user` is what the
// docs refer to as the "ClientUser".
activity();
});
//Updates people count
client.on('guildMemberAdd', member => {
console.log(`New member joined: ${member.name} (id: ${member.id}).`);
activity();
});
client.on('guildMemberRemove', member => {
console.log(` member left: ${member.name} (id: ${member.id}).`);
activity();
});
setInterval(activity, 300000);
////// ACTUAL MESSAGE PROCESSING
client.on("message", async message => {
//stops bots from activating the Osselbot
//Message processing
if(message.content.toLowerCase().includes('nigg',"niglet","negro","fag","f4g","n1gg","gg3r")) {
message.delete();
return message.reply(`Listen here cum-sock we dont appeciate that here ${message.member}. If you gonna be like that you may just well end up in the JAR and we all know how that ends...`)
}
if(message.author.bot) return;
if(message.content.indexOf(config.prefix) !== 0) return;
// Here we separate our "command" name, and our "arguments" for the command.
// e.g. if we have the message "+say Is this the real life?" , we'll get the following:
// command = say
// args = ["Is", "this", "the", "real", "life?"]
const args = message.content.slice(config.prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
//////////////////////////////////////////////////////////////////////////////
//COMMAND TIME
//////////////////////////////////////////////////////////////////////////////
if (command === "reboot"){
function shutdown(){
client.destroy();
process.exit(69);
}
if (message.author.id === '216042720047661057') {
message.reply("**Authenticated**, Restarting now.");
client.user.setActivity(`Itself die`,{ type: 'WATCHING' });
setTimeout(shutdown, 5000, 'shutdown');
}
else {
return message.reply("No");
}
}
//////////////////////////////////////////////////////////////////////////////
if (command === "stats") {
let embed = new Discord.MessageEmbed()
.setTitle('Stats')
.setAuthor("Osselbot", "https://cdn.discordapp.com/attachments/597814181084921866/711843993914310656/animated-beach-balls-29.gif")
.setColor(0x195080)
.setDescription(`\
**Stats for 0SSELB0T** \n \
**Uptime:** ${prettyMilliseconds(client.uptime)} \n \
**Started at:** ${client.readyAt} \n \
**People:** ${client.users.cache.size}`)
.setFooter(`osselbot v${info.version} run version for full info`);
return message.channel.send(embed);
}
//////////////////////////////////////////////////////////////////////////////
if(command === "ping") {
// Calculates ping between sending a message and editing it, giving a nice round-trip latency.
const m = await message.channel.send("Ping?");
m.edit(`Pong! Latency is ${m.createdTimestamp - message.createdTimestamp}ms`);
}
//////////////////////////////////////////////////////////////////////////////
//HOW QUOTEABLE
if(command === "psych") {
return message.channel.send("Rules for finding a psychopath: \n1. Favorite color is orange \n2. Likes the left burners, worse if its top left\n3. Calls pizza sauce/tomato sauce gravy\n4. Doesnt like salad\n5. Likes country music\n6. Makes hot chocolate with water\n7. Likes black licorice")
}
if(command === "ask") {
return message.channel.send("Dont Ask, Just ask!\n https://iki.fi/sol/dontask.html")
}
if(command === "simp") {
if(!message.member.roles.cache.some(r=>["Admin", "Moderator","Member of the Order of the b l u e","Botmeister"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
let embed = new Discord.MessageEmbed()
.setTitle("SIMP Alert")
.setURL("https://www.youtube.com/watch?v=c3m4Q07TkMk")
.setColor(0x195080)
.setDescription("__**ALERT**__ SIMP detected!")
.setImage("https://vignette.wikia.nocookie.net/disney/images/6/64/Kronk_.jpg/revision/latest?cb=20160720194635")
.setTimestamp()
message.channel.send({embed})
}
if(command === "squad") {
let min = Math.ceil(0);
let max = Math.floor(11);
let rate = Math.floor(Math.random() * (max - min) + min); //The maximum is exclusive and the minimum is inclusive
return message.reply(`The squad rates this ${rate} out of 10`);
}
if(command === "magic") {
return message.channel.send("Do you believe in magic in a young girl's heart\nHow the music can free her, whenever it starts\nAnd it's magic, if the music is groovy\nIt makes you feel happy like an old-time movie\nI'll tell you about the magic, and it'll free your soul\nBut it's like trying to tell a stranger bout 'rock and roll'");
}
if(command === 'help') {
return message.reply('https://technicolor.2a03.party/bot/');
}
if(command === "fix") {
if(message.member.roles.cache.some(r=>["Botmeister"].includes(r.name))) {
return message.channel.send("I guess it's my fault will fix.");
}
return;
}
if(command === "va"){
let msg = ""
let num = Math.floor(Math.random() * (3 - 1) + 1); //The maximum is exclusive and the minimum is inclusive
switch(num){
case 1:
msg = "its simple, mind over matter. i dont mind, and you dont fucking matter";
break;
case 2:
msg = "I can eat alphabet soup and shit out a more coherent sentence than you";
break;
case 3:
msg = "you are living proof darwinism is dead, hell, even reversing.";
break;
}
return message.reply(`${msg}`)
}
////////////////////////////////////////////////////////////////////////////////
if(command === "say") {
// makes the bot say something and delete the message. As an example, it's open to anyone to use.
// To get the "message" itself we join the `args` back into a string with spaces:
const sayMessage = args.join(" ");
if (message.member.roles.cache.some(r=>["Admin","Mods","Member of the Order","Botmeister","Ally of the Order","say"].includes(r.name)) ){
if(message.content.includes("@")){
return message.reply("haha no")
}
// Then we delete the command message (sneaky, right?). The catch just ignores the error with a cute smiley thing.
// eslint-disable-next-line no-unused-vars
message.delete().catch(O_o=>{});
// And we get the bot to say the thing:
return message.channel.send(sayMessage);
}
}
////////////////////////////////////////////////////////////////////////////////
if(command === "quote") {
let quotes = require(`${homedir}/quotes.json`);
var quoteadd = "";
var selector;
try{
selector = args[0].toLowerCase();
} catch (err) {
var number = quotes.quotes.length + 1;
let quotesend = Math.floor(Math.random() * (number - 0) + 0);
return message.channel.send(`${quotes.quotes[quotesend]}`);
}
if(selector === "add") {
if (!(message.member.roles.cache.some(r => ["Admin","Mods","Member of the Order","Botmeister","Ally of the Order","say"].includes(r.name)))) return message.reply("Ask someone with the quote role to add that.")
args.shift();
//This does logic to make it from an array to a nice string.
quoteadd = args.join(' ');
quotes.quotes.push(quoteadd)
fs.writeFile(`${homedir}/quotes.json`, JSON.stringify(quotes, null, 2), (err) => {
if (err) return message.reply("Something went wrong");``
client.channels.cache.get('712084662033580064').send(`${message.member} has submitted \`${quoteadd}\` to the quote repository`);
return message.reply("Quote added to repository");
});
}
else {
return message.reply("you can add quotes by running `?quote add <person> Quote goes here`");
}
}
////////////////////////////////////////////////////////////////////////////////
if (command === "version") {
return message.channel.send(`\`\`\`\
________________________________________\n \
< @technicolor-creamsicle/osselbot@v${info.version}>\n \
----------------------------------------\n \
\\ ^__^\n \
\\ (oo)\\_______\n \
(__)\\ )\\/\\\n \
||----w |\n \
|| ||\n \
\`\`\``)
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////DEFCON//////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
if(command === "defcon") {
//5 levels till ban
if(!message.member.roles.cache.some(r=>["Admin","Member of the Order of the b l u e","Botmeister"].includes(r.name)) )
return message.reply("Sorry, you don't have permissions to use this!");
else {
let member = message.mentions.members.first();
var role = "";
switch(parseInt(args[1],10)) {
case 5:
role = message.guild.roles.cache.find(role => role.name === `DEFCON 5`);
member.roles.add(role);
break;
case 4:
role = message.guild.roles.cache.find(role => role.name === `DEFCON 4`);
member.roles.add(role);
break;
case 3:
role = message.guild.roles.cache.find(role => role.name === `DEFCON 3`);
member.roles.add(role);
break;
case 2:
role = message.guild.roles.cache.find(role => role.name === `DEFCON 2`);
member.roles.add(role);
break;
case 1:
role = message.guild.roles.cache.find(role => role.name === `DEFCON 1`);
member.roles.add(role);
break;
default:
return message.reply(`DEFCON not set is ${args[1]} a number between 1-5?`);
}
return message.reply(`\n**DEFCON** level set to DEFCON ${args[1]}\nGod Bless their souls`);
}
}
//////////////////////////////////////
/////////Funny DHS is funny///////////
//////////////////////////////////////
// if (command == "xkcd") {
// async function getcomic(args) {
// var comic
// try {
// var response = await fetch(`https://xkcd.com/${args[0]}/info.0.json`);
// comic = await response.text();
// return comic
// } catch (e) {
// console.error(e);
// return message.reply("Something went wrong... Check your number and try again later.")
// }
// }
// getcomic();
// let embed = new Discord.MessageEmbed()
// .setTitle(`xkcd #${comic.num}`)
// .setAuthor("Randel Munroe")
// .setColor(0xffffff)
// .image(`${comic.img}`);
// return message.channel.send(embed);
// }
});
if(process.argv.slice(2).includes("--TEST")) {
console.log("Test Pass!");
process.exit(0);
}
//Logging in the bot
client.login(config.token);