Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var tmi = require('tmi.js');
- var mysql = require("mysql");
- var colors = require("colors");
- var config = {
- host: "localhost",
- user: "root",
- password: "",
- database: "bot"
- };
- var con;
- function log(text, color) {
- var d = new Date();
- var h = d.getHours();
- var m = d.getMinutes();
- var ap = "AM";
- if (h > 12) {
- h -= 12;
- var ap = "PM";
- }
- if (m < 10) {
- m = "0" + m;
- }
- time = h + ":" + m + " " + ap;
- if (typeof(color) == "undefined") {
- display = colors.grey(time) + ": " + text;
- console.log(display);
- } else {
- console.log(colors.grey(time) + ": " + colors[color](text));
- }
- }
- function handleConnection() {
- con = mysql.createConnection(config);
- con.connect(function(err) {
- if (err) {
- log("An error has occurred while connection: " + err, "red");
- setTimeout(handleConnection, 2000);
- } else {
- log("Connection successful.", "green");
- }
- });
- con.on("error", function(err) {
- console.log("Error: " + err);
- if (err.code === "PROTOCOL_CONNECTION_LOST") {
- handleConnection();
- } else {
- throw err;
- }
- });
- }
- handleConnection();
- var options = {
- options: {
- debug: true
- },
- connection: {
- cluster: "aws",
- reconnect: true
- },
- identity: {
- username: "RBMBot",
- password: "oauth:0ahbn85l3jzor2kj95wwyamt19gop2"
- },
- channels: ["rootbeermelon"]
- };
- var client = new tmi.client(options);
- client.connect();
- var channel = options.channels[0];
- var points;
- /*
- setInterval(function() {
- var edit = con.query('SELECT * FROM users',
- function(err, res) {
- if (err) log(err, "yellow");
- for (var i = 0; i < res.length; i++) {
- var edit = con.query('UPDATE users SET isActive = 0 WHERE username = ?', res[i].username,
- function(err, res) {
- if (err) log(err, "yellow");
- client.say(channel, "The 15-minute activity wipe has occurred, chat again to be considered.");
- });
- }
- });
- }, 10000 * 60);
- */
- client.on('chat', function(channel, user, message, self) {
- if (!(user['display-name'] == "RBMBot" || user['display-name'] == "Nightbot")) {
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (res.length == 0) {
- var post = {username: user['display-name'], points: 1};
- var add = con.query('INSERT INTO users SET ?', post,
- function(err, res) {
- log("A new user has been added!", "green");
- });
- } else if (res.length == 1) {
- var edit = con.query('UPDATE users SET isActive = 1 WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- }
- });
- }
- con.escape();
- switch (message.toLowerCase().split(" ")[0]) {
- case "!points": // !points +username (+ = optional)
- var split = message.split(" ");
- if (split.length == 2) {
- sayPoints(split[1]);
- } else {
- sayPoints(user['display-name']);
- }
- break;
- case "!editpoints": // !editpoints username add/remove/set amount
- if (user['display-name'] == "rootbeermelon") {
- var split = message.split(" ");
- if (split.length == 1) {
- client.say(channel, "How to use the command: !editpoints username add/remove/set amount");
- } else {
- switch (split[2]) {
- case "add":
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [split[3], split[1]],
- function(err, res) {
- if (err) log(err, "yellow");
- client.say(channel, "Added " + split[3] + " points to " + split[1] + "'s balance.");
- });
- break;
- case "remove":
- var edit = con.query('UPDATE users SET points = points - ? WHERE username = ?', [split[3], split[1]],
- function(err, res) {
- if (err) log(err, "yellow");
- client.say(channel, "Removed " + split[3] + " points to " + split[1] + "'s balance.");
- });
- break;
- case "set":
- var edit = con.query('UPDATE users SET points = ? WHERE username = ?', [split[3], split[1]],
- function(err, res) {
- if (err) log(err, "yellow");
- client.say(channel, "Set " + split[1] + "'s points to " + split[3] + ".");
- });
- break;
- default:
- client.say(channel, "Not sure what you mean? Try doing just !editpoints.");
- break;
- }
- }
- } else {
- client.say(channel, "Sorry, only the broadcaster can do this.");
- }
- con.escape();
- break;
- case "!mining":
- var split = message.split(" ");
- if (split.length == 1) {
- client.say(channel, "Mining is the viewers' way of gaining points to use on stream. To start mining use: !mining start. To view your stats: !mining stats. To open a mystery box: !mining box. Good luck!");
- } else if (split.length >= 2) {
- switch (split[1]) {
- case "start":
- mine(user['display-name']);
- break;
- case "stats":
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- var split = res[0].miningPickaxe.split("/");
- var pickaxe = {name: split[0], output: split[1], delay: split[2]};
- client.say(channel, "[" + res[0].miningXP + " XP] " + user['display-name'] + "'s pickaxe: " + pickaxe.name + " (up to " + pickaxe.output + " points, delay of " + pickaxe.delay + "s)");
- }
- });
- break;
- case "box":
- if (split.length == 3) {
- if (split[2] == "open") {
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- var points = res[0].points;
- if (points >= 100) {
- var edit = con.query('UPDATE users SET points = points - ? WHERE username = ?', [100, user['display-name']],
- function(err, res) {
- if (err) log(err, "yellow");
- var pickaxe = getPickaxe();
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- var oldPick = res[0].miningPickaxe.split("/")[1];
- var newPick = pickaxe.split("/")[1];
- log(newPick + " > " + oldPick, "cyan");
- //client.say(channel, "new pick (" + newPick + ") / old pick (" + oldPick + ")");
- if (newPick > oldPick) {
- var edit = con.query('UPDATE users SET miningPickaxe = ? WHERE username = ?', [pickaxe, user['display-name']],
- function(err, res) {
- if (err) log(err, "yellow");
- var split = pickaxe.split("/");
- client.say(channel, user['display-name'] + " got a new " + split[3].toUpperCase() + " pickaxe: " + split[0] + " (up to " + split[1] + " points, delay of " + split[2] + "s)");
- });
- } else {
- client.say(channel, user['display-name'] + " opens a mystery box but gets a worse pickaxe. They toss out the new one.");
- }
- }
- });
- });
- } else {
- client.say(channel, user['display-name'] + ", sorry you don't have enough points.");
- }
- }
- });
- }
- } else {
- client.say(channel, "Opening a mystery box will give you a random pickaxe, this costs 100 points. Doing so will destroy your previous pickaxe. To start do !mining box open.");
- }
- break;
- default:
- client.say(channel, "Hey there, use the !mining command to check out how this command works.");
- break;
- }
- } else {
- client.say(channel, "Hey there, use the !mining command to check out how this command works.");
- }
- con.escape();
- break;
- case "!gamble":
- var split = message.split(" ");
- if (split.length == 2) {
- var wager = split[1];
- gamble(wager, user['display-name']);
- } else {
- client.say(channel, "You can risk your points by using !gamble. A roll above 55 is a win. If you land a 100, you will get a random multiplier. Try it out!");
- }
- break;
- case "!rain": // !rain points
- if (user['display-name'] == "rootbeermelon") {
- var split = message.split(" ");
- if (split.length == 2) {
- var people = [];
- var edit = con.query('SELECT * FROM users',
- function(err, res) {
- var points = split[1];
- if (err) log(err, "yellow");
- while (points > 0) {
- for (var i = 0; i < res.length; i++) {
- if (Math.random() > 0.9 && res[i].isActive == 1) {
- points -= 1;
- people.push({username: res[i].username});
- }
- }
- }
- for (var i = 0; i < people.length; i++) {
- var edit = con.query('UPDATE users SET points = points + 1 WHERE username = ?', people[i].username,
- function(err, res) {
- });
- }
- client.say(channel, "Rain clouds roll in and rain points down onto the viewers, check your points to see your reward!");
- });
- } else {
- client.say(channel, "To rain do !rain points.");
- }
- } else {
- client.say(channel, "Sorry, only the broadcaster can do this.");
- }
- con.escape();
- break;
- case "!dealoftheday":
- var split = message.split(" ");
- if (split.length == 2) {
- if (split[1] == "buy") {
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res[0].points >= 800) {
- var edit = con.query('UPDATE users SET points = points - 800 WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- var edit = con.query('UPDATE users SET miningPickaxe = ? WHERE username = ?', ["Silver Pickaxe/9/180/dotd", user['display-name']],
- function(err, res) {
- if (err) log(err, "yellow");
- client.say(channel, user['display-name'] + " has bought the deal of the day pickaxe!");
- });
- });
- } else {
- client.say(channel, user['display-name'] + ", you don't have enough points.");
- }
- });
- }
- } else {
- client.say(channel, "Deal of the day: Silver Pickaxe (up to 9 points, delay of 180s) - Cost: 800 points - !dealoftheday buy");
- }
- con.escape();
- break;
- case "!leaderboard":
- var edit = con.query('SELECT * FROM users ORDER BY points DESC',
- function(err, res) {
- if (err) log(err, "yellow");
- var board = "";
- if (res.length < 10) {
- for (var i = 0; i < res.length; i++) {
- board += "#" + (i + 1) + " " + res[i].username + " (" + res[i].points + " pts), ";
- }
- } else {
- for (var i = 0; i < 10; i++) {
- board += "#" + (i + 1) + " " + res[i].username + " (" + res[i].points + " pts), ";
- }
- }
- client.say(channel, "Leaderboard: " + board);
- });
- con.escape();
- break;
- case "!stake": // !stake join/create (username/amount)
- var split = message.split(" ");
- if (split.length == 3) {
- switch (split[1]) {
- case "join":
- var edit = con.query('SELECT * FROM stakes WHERE username = ?', split[2],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- var staker = res[0].username;
- var wager = res[0].wager;
- if (staker == user['display-name']) {
- client.say(channel, user['display-name'] + ", you can't join your own stake.");
- } else {
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- if (res[0].points >= wager) {
- var edit = con.query('UPDATE users SET points = points - ? WHERE username = ?', [wager, user['display-name']],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- var stakerRoll = Math.round(Math.random() * 100);
- var callerRoll = Math.round(Math.random() * 100);
- if (stakerRoll >= callerRoll) {
- client.say(channel, staker + ": " + stakerRoll + " vs. " + user['display-name'] + ": " + callerRoll + " - " + staker + " wins " + (wager * 2) + " points.");
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [(wager * 2), staker],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- } else {
- client.say(channel, staker + ": " + stakerRoll + " vs. " + user['display-name'] + ": " + callerRoll + " - " + user['display-name'] + " wins " + (wager * 2) + " points.");
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [(wager * 2), user['display-name']],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- }
- var edit = con.query('DELETE FROM stakes WHERE username = ?', staker,
- function(err, res) {
- if (err) log(err, "yellow");
- });
- var edit = con.query('UPDATE users SET hasStake = 0 WHERE username = ?', staker,
- function(err, res) {
- if (err) log(err, "yellow");
- });
- } else {
- client.say(channel, user['display-name'] + ", you don't have enough points.");
- }
- }
- });
- }
- } else {
- client.say(channel, split[2] + " doesn't have an active stake.");
- }
- });
- break;
- case "create":
- var edit = con.query('SELECT * FROM users WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- if (res[0].points >= split[2]) {
- if (res[0].hasStake == 0) {
- var edit = con.query('UPDATE users SET points = points - ? WHERE username = ?', [split[2], user['display-name']],
- function(err, res) {
- if (err) log(err, "yellow");
- var post = {username: user['display-name'], wager: split[2]};
- var edit = con.query('INSERT INTO stakes SET ?', post,
- function(err, res) {
- if (err) log(err, "yellow");
- log(user['display-name'] + " posted wager of " + split[2] + ".", "cyan");
- client.say(channel, user['display-name'] + " has placed opened a stake for " + split[2] + " points.");
- });
- var edit = con.query('UPDATE users SET hasStake = 1 WHERE username = ?', user['display-name'],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- });
- } else {
- client.say(channel, user['display-name'] + ", you already have an active stake.");
- }
- } else {
- client.say(channel, user['display-name'] + ", you do not have enough points.");
- }
- }
- });
- break;
- }
- } else if (split.length == 2) {
- if (split[1] == "list") {
- var edit = con.query('SELECT * FROM stakes',
- function(err, res) {
- if (err) log(err, "yellow");
- var result = "";
- for (var i = 0; i < res.length; i++) {
- result += res[0].username + " (" + res[0].wager + " pts), ";
- }
- if (result == "") {
- client.say(channel, "There are no active stakes.");
- } else {
- client.say(channel, result);
- }
- });
- }
- } else {
- client.say(channel, "To stake, use !stake create amount. To join a stake, use !stake join username. To view all stakes, use !stake list.");
- }
- con.escape();
- break;
- case "!active":
- var active = "Active viewers: ";
- var edit = con.query('SELECT * FROM users',
- function(err, res) {
- if (err) log(err, "yellow");
- for (var i = 0; i < res.length; i++) {
- if (res[i].isActive == 1) {
- active += res[i].username + ", ";
- }
- }
- client.say(channel, active);
- });
- break;
- case "!melons":
- client.say(channel, "I currently have a growing collection of over 40,000 watermelons. If you wish to donate, ask for my location in chat. Every 20 watermelons donated will earn you 1 point.");
- break;
- case "!coins":
- client.say(channel, "Want some GP for your points? You can ask to trade from 50,000 to 200,000 points for an equal amount in GP! You can only do this once per week.");
- break;
- case "!welcome":
- client.say(channel, "Welcome to my channel. There isn't a clear schedule as to what I do so expect something different every once in a while. Consider dropping a follow if you enjoy the stream!");
- break;
- case "!today":
- client.say(channel, "Todays drops: Long Bone (Troll)");
- break;
- case "!goals":
- client.say(channel, "My current goals for the account are: all stats to level 60, base 75 combat stats, 70 slayer.");
- break;
- case "!yesterday":
- client.say(channel, "Yesterdays drops: None");
- break;
- }
- });
- function getPickaxe() { // trash, common, uncommon, rare, epic, mythical, legendary
- var pickaxe = {name: "", output: 0, delay: 0, rarity: "common"};
- var materials = ["Bronze", "Copper", "Tin", "Ghostly", "Invisible", "Runite", "Adamant", "Mithril", "Steel", "Dragon", "Mystical", "Iron", "Haunted", "Mossy", "Robotic", "Crystal", "Flame", "Ice", "Corrupted", "Blessed", "Ancient"];
- pickaxe.name = materials[Math.floor(Math.random() * materials.length)] + " Pickaxe";
- var rand = Math.random();
- if (rand >= 0 && rand < 0.5) {
- pickaxe.output = Math.round(Math.random() * 5) + 3;
- pickaxe.delay = Math.round(Math.random() * 30) + 110;
- pickaxe.rarity = "common";
- } else if (rand >= 0.5 && rand < 0.8) {
- pickaxe.output = Math.round(Math.random() * 8) + 3;
- pickaxe.delay = Math.round(Math.random() * 16) + 85;
- pickaxe.rarity = "uncommon";
- } else if (rand >= 0.8 && rand < 0.95) {
- pickaxe.output = Math.round(Math.random() * 11) + 3;
- pickaxe.delay = Math.round(Math.random() * 10) + 60;
- pickaxe.rarity = "rare";
- } else if (rand >= 0.95 && rand < 0.98) {
- pickaxe.output = Math.round(Math.random() * 15) + 5;
- pickaxe.delay = Math.round(Math.random() * 7) + 40;
- pickaxe.rarity = "epic";
- } else if (rand >= 0.98 && rand < 0.999) {
- pickaxe.output = Math.round(Math.random() * 23) + 5;
- pickaxe.delay = Math.round(Math.random() * 5) + 25;
- pickaxe.rarity = "mythical";
- } else if (rand >= 0.999 && rand < 0.9999) {
- pickaxe.output = Math.round(Math.random() * 30) + 7;
- pickaxe.delay = Math.round(Math.random() * 3) + 10;
- pickaxe.rarity = "legendary";
- } else if (rand >= 0.9999 && rand <= 1) {
- pickaxe.output = Math.round(Math.random() * 45) + 7;
- pickaxe.delay = Math.round(Math.random() * 2) + 5;
- pickaxe.rarity = "impossible";
- }
- return pickaxe.name + "/" + pickaxe.output + "/" + pickaxe.delay + "/" + pickaxe.rarity;
- }
- function mine(username) {
- var edit = con.query('SELECT * FROM users WHERE username = ?', username,
- function(err, res) {
- if (err) log(err, "yellow");
- if (res.length == 1) {
- if (res[0].isMining == 0) {
- client.say(channel, username + " sets out on a mining trip, you will return with points soon.");
- var split = res[0].miningPickaxe.split("/");
- var pickaxe = {name: split[0], output: split[1], delay: split[2]};
- var edit = con.query('UPDATE users SET isMining = 1 WHERE username = ?', username,
- function(err, res) {
- if (err) log(err, "yellow");
- timeout = setTimeout(function() {
- var reward = Math.floor(Math.random() * pickaxe.output) + 1;
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [reward, username],
- function(err, res) {
- if (err) log(err, "yellow");
- client.say(channel, username + " returns from a mining adventure with a bag filled with points. (+" + reward + " points, +" + reward + " XP)");
- var edit = con.query('UPDATE users SET isMining = 0 WHERE username = ?', username,
- function(err, res) {
- if (err) log(err, "yellow");
- var edit = con.query('UPDATE users SET miningXP = miningXP + ? WHERE username = ?', [reward, username],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- });
- });
- var event = Math.random();
- }, pickaxe.delay * 1000);
- });
- } else {
- client.say(channel, "You are already on a mining trip, " + username + " please wait.");
- }
- }
- });
- con.escape();
- }
- function gamble(amount, username) {
- var check = con.query('SELECT * FROM users WHERE username LIKE ?', username,
- function(err, res) {
- if (res.length == 1) {
- var all = res[0].points;
- if (amount == "all") {
- var edit = con.query('UPDATE users SET points = 0 WHERE username = ?', [all, username],
- function(err, res) {
- if (err) log(err, "yellow");
- var roll = Math.round(Math.random() * 100);
- if (roll > 55 && roll != 100) {
- client.say(channel, username + " rolled a " + roll + ", winning " + (all * 2) + " points.");
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [(all * 2), username],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- } else if (roll == 100) {
- var multiplier = Math.round(Math.random() * 4) + 1;
- client.say(channel, username + " rolled a 100, multiplier win x" + multiplier + " totaling " + (all * multiplier) + " points!");
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [(all * multiplier), username],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- } else {
- client.say(channel, username + " rolled a " + roll + ", losing " + all + " points.");
- }
- });
- } else if (res[0].points >= amount) {
- var edit = con.query('UPDATE users SET points = points - ? WHERE username = ?', [amount, username],
- function(err, res) {
- if (err) log(err, "yellow");
- var roll = Math.round(Math.random() * 100);
- if (roll > 55 && roll != 100) {
- client.say(channel, username + " rolled a " + roll + ", winning " + (amount * 2) + " points.");
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [(amount * 2), username],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- } else if (roll == 100) {
- var multiplier = Math.round(Math.random() * 4) + 1;
- client.say(channel, username + " rolled a 100, multiplier win x" + multiplier + " totaling " + (amount * multiplier) + " points!");
- var edit = con.query('UPDATE users SET points = points + ? WHERE username = ?', [(amount * multiplier), username],
- function(err, res) {
- if (err) log(err, "yellow");
- });
- } else {
- client.say(channel, username + " rolled a " + roll + ", losing " + amount + " points.");
- }
- });
- } else {
- client.say(channel, "You don't have enough points, try !mining.");
- }
- }
- });
- con.escape();
- }
- function sayPoints(username) {
- var check = con.query('SELECT * FROM users WHERE username = ?', username,
- function(err, res) {
- if (res.length == 1) {
- client.say(channel, username + "'s points: " + res[0].points);
- }
- });
- con.escape();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement