mirror of
https://github.com/Ratstail91/SANCTUM.git
synced 2025-11-29 02:24:27 +11:00
185 lines
7.2 KiB
JavaScript
185 lines
7.2 KiB
JavaScript
// .env Variables
|
|
require('dotenv').config({path: '../.env'});
|
|
|
|
// Node Modules
|
|
const Discord = require('discord.js');
|
|
const client = new Discord.Client();
|
|
const cron = require('node-cron');
|
|
|
|
// Bot Modules (stores http requests & random functions respectively)
|
|
const dataRequest = require('../modules/dataRequest');
|
|
const calcRandom = require('../modules/calcRandom');
|
|
const channelProcessor = require('../modules/channelProcessor');
|
|
|
|
// State Machine (Uncomment if needed)
|
|
/*
|
|
var BotEnumState = {
|
|
WAITING: 0,
|
|
ACTIVE: 1
|
|
}
|
|
var botState = BotEnumState.ACTIVE;
|
|
*/
|
|
|
|
// The ready event is vital, it means that your bot will only start reacting to information
|
|
// from Discord _after_ ready is emitted
|
|
client.on('ready', async () => {
|
|
// Generates invite link
|
|
try {
|
|
let link = await client.generateInvite(["ADMINISTRATOR"]);
|
|
console.log("Invite Link: " + link);
|
|
} catch(e) {
|
|
console.log(e.stack);
|
|
}
|
|
|
|
// You can set status to 'online', 'invisible', 'away', or 'dnd' (do not disturb)
|
|
client.user.setStatus('online');
|
|
// Sets your "Playing"
|
|
client.user.setActivity('!upgrade | Nanotech Upgrades.');
|
|
console.log(`Connected! \
|
|
\nLogged in as: ${client.user.username} - (${client.user.id})`);
|
|
});
|
|
|
|
// Error handler
|
|
client.on('error', console.error);
|
|
|
|
// Create an event listener for messages
|
|
client.on('message', async message => {
|
|
// Ignores ALL bot messages
|
|
if (message.author.bot) return;
|
|
// Message has to be a bot channel (should be edited later)
|
|
if (!channelProcessor.isBotChannel(message.channel.id)) return;
|
|
// Has to be (prefix)command
|
|
if (message.content.indexOf(process.env.PREFIX) !== 0) return;
|
|
|
|
// "This is the best way to define args. Trust me."
|
|
// - Some tutorial dude on the internet
|
|
const args = message.content.slice(process.env.PREFIX.length).trim().split(/ +/g);
|
|
const command = args.shift().toLowerCase();
|
|
|
|
//handle the command
|
|
switch(command) {
|
|
case "upgrade":
|
|
if (!args[0]) {
|
|
//shows upgrade menu
|
|
var intro = `${message.author} Hey buddy! Here's what we can upgrade ASAP!`;
|
|
var newMessage = "STR - <:cannister:462046687058198530> **1**\n```Permanently upgrades your Strength by 1, so you can hit them Ravagers harder.```\n"
|
|
newMessage += "SPD - <:cannister:462046687058198530> **1**\n```Permanently upgrades your Speed by 1, so you can get hit less in battle.```\n"
|
|
newMessage += "STAM - <:cannister:462046687058198530> **1**\n```Permanently upgrades your Max Stamina by 1, so you can hit more Ravagers.```\n"
|
|
newMessage += "HP - <:cannister:462046687058198530> **1**\n```Permanently upgrades your Max HP by 10, so you can can take those beatings like a champ.```"
|
|
//sendMessage(message.channel.id, newMessage);
|
|
|
|
// Grabs all parameters from server
|
|
var attacker = String(dataRequest.loadServerData("userStats",message.author.id));
|
|
var attackerStatPoints = parseFloat(attacker.split(",")[10]); // Cannisters
|
|
const keepersOfTheCityColor = client.guilds.get(process.env.SANCTUM_ID).roles.find(role => role.name === "Keepers of the City").color;
|
|
const embed = new Discord.RichEmbed()
|
|
.setAuthor("Graze", client.user.avatarURL)
|
|
.setColor(keepersOfTheCityColor)
|
|
.setTitle("Nanotech Upgrades")
|
|
.setDescription(newMessage)
|
|
.setFooter(`${message.member.displayName}, you have ${attackerStatPoints} cannisters! Use !upgrade [OPTION] to upgrade that stat!`)
|
|
|
|
message.channel.send(intro, embed);
|
|
} else {
|
|
console.log(args[0]);
|
|
//Upgrades stats
|
|
var statToUpgrade = String(args[0]);
|
|
var numberOfPointsToUpgrade = 1;
|
|
var canUpgrade = 0;
|
|
var suffix = "point.";
|
|
//var statToUpgrade = String(args.split(" ")[0]);
|
|
//var numberOfPointsToUpgrade = parseFloat(args.split(" ")[1]);
|
|
switch (statToUpgrade.toUpperCase()) {
|
|
case "STRENGTH":
|
|
statToUpgrade = "STR";
|
|
break;
|
|
case "HEALTH":
|
|
statToUpgrade = "HP";
|
|
break;
|
|
case "STAMINA":
|
|
statToUpgrade = "STAM";
|
|
break;
|
|
case "SPEED":
|
|
statToUpgrade = "SPD";
|
|
break;
|
|
}
|
|
|
|
switch (statToUpgrade.toUpperCase()) {
|
|
case "STR":
|
|
numberOfPointsToUpgrade = 1;
|
|
canUpgrade = 1;
|
|
suffix = "point.";
|
|
break;
|
|
case "HP":
|
|
numberOfPointsToUpgrade = 10;
|
|
canUpgrade = 1;
|
|
suffix = "points.";
|
|
break;
|
|
case "SPD":
|
|
numberOfPointsToUpgrade = 1;
|
|
canUpgrade = 1;
|
|
suffix = "point.";
|
|
break;
|
|
case "STAM":
|
|
numberOfPointsToUpgrade = 1;
|
|
canUpgrade = 1;
|
|
suffix = "point.";
|
|
break;
|
|
}
|
|
if (canUpgrade == 0) {
|
|
sendMessage(message.channel.id, ":x: <@" + message.author.id + "> Believe me, I wish I could upgrade things like that.");
|
|
return;
|
|
}
|
|
|
|
var upgradeResponse = dataRequest.sendServerData("upgradeStats", statToUpgrade, message.author.id);
|
|
if (String(upgradeResponse) == "notEnoughPoints") {
|
|
sendMessage(message.channel.id, ":x: <@" + message.author.id + "> Hey now, you don't have that many cannisters.");
|
|
return;
|
|
}
|
|
if (String(upgradeResponse) == "failure") {
|
|
sendMessage(message.channel.id, ":x: <@" + message.author.id + "> Sorry, no can do right now. Come back later though, ok?");
|
|
return;
|
|
}
|
|
if (String(upgradeResponse) == "success") {
|
|
var skillName = "";
|
|
switch (statToUpgrade.toUpperCase()) {
|
|
case "STR":
|
|
skillName = "strength";
|
|
break;
|
|
case "HP":
|
|
skillName = "health";
|
|
break;
|
|
case "SPD":
|
|
skillName = "speed";
|
|
break;
|
|
case "STAM":
|
|
skillName = "stamina";
|
|
break;
|
|
}
|
|
sendMessage(message.channel.id, "<@" + message.author.id + "> Sweet! I used your Nanotech Cannister to upgrade your **" + skillName + "** by " + numberOfPointsToUpgrade + " " + suffix);
|
|
}
|
|
}
|
|
break;
|
|
};
|
|
});
|
|
|
|
// Send message handler
|
|
function sendMessage(userID, channelID, message) {
|
|
// Handle optional first argument (so much for default arugments in node)
|
|
if (message === undefined) {
|
|
message = channelID;
|
|
channelID = userID;
|
|
userID = null;
|
|
}
|
|
|
|
// Utility trick (@userID with an optional argument)
|
|
if (userID != null) {
|
|
message = "<@" + userID + "> " + message;
|
|
}
|
|
|
|
// Sends message (needs client var, therefore I think external script won't work)
|
|
client.channels.get(channelID).send(message);
|
|
}
|
|
|
|
// Log our bot in (change the token by looking into the .env file)
|
|
client.login(process.env.GRAZE_TOKEN); |