diff --git a/node/boto.js b/node/boto.js index 43b1f47..03065f4 100644 --- a/node/boto.js +++ b/node/boto.js @@ -7,14 +7,12 @@ // TODO: // ================================== // + Add Cooldowns -// + Add Mod vs Streamer vs Viewer vs Sub control // + Turn BOTO into join userchannel_db & make botoff to rm_userchannel_db // + Timed // + B-Day Calc -// + -// + -const tmi = require('tmi.js'); +// + Track Emotes require('dotenv').config(); +const tmi = require('tmi.js'); console.log(process.env.API_HOST); @@ -35,29 +33,102 @@ client.connect(); client.on('message', (channel, tags, message, self) => { if(self) return; - const badges = tags.badges || {}; - const isBroadcaster = badges.broadcaster; - const isMod = badges.moderator; - const isModUp = isBroadcaster || isMod; - const botUserState = client.userstate[channel]; - const amMod = botUserState !== undefined && botUserState.mod === true; - const isSub = badges.subscriber || badges.founder; + const badges = tags.badges || {}; // Scan Badges + const isBroadcaster = badges.broadcaster; // Define Streamer + const isMod = badges.moderator; // Define Mod + const isModUp = isBroadcaster || isMod; // Permission Merge = Mod+Streamer + const isSub = badges.subscriber || badges.founder; // Define Subs + const botUserState = client.userstate[channel]; // MOD Status Check + const amMod = botUserState !== undefined && botUserState.mod === true; // Define Mod Status + + // Command Parser + if(self || !message.startsWith('!')) return; + // !COMMAND => command + const args = message.slice(1).split(' '); + const command = args.shift().toLowerCase(); + // !MODS - if(isModUp && message.toLowerCase().startsWith('!so')) { - console.log('MOD COMMAND | so | shoutout'); - client.say(channel, `bloop`); + if(isModUp) { + console.log('Captians Log: MOD used a command...'); // Log for ALL commands Mods use Mod/Sub/General + if(command === 'so' || + command === 'shoutout') { + client.say(channel, `/me Smash @${args.join(' ')}'s follow button at: https://twitch.tv/${args.join(' ')}`); + } + else if(command === 'mute' || + command === 'slap' || + command === 'timeout' || + command === 'warn') { + client.say(channel, `/timeout ${args.join(' ')} 33`); + client.say(channel, `/me Mods cast a 33sec Timeout Curse on @${args.join(' ')}, resistence to Bans is decreased!`); + client.say(channel, `!kappagen sarimoRAGE sarimoNERD`); + } } // !SUBS - if(isSub) { + else if(isSub) { + console.log('Captians Log: SUB used a command...'); // Log console.log(tags.username, 'is a subscriber'); } // General Commands - if(message.toLowerCase().startsWith('!mod')) { + else(message.toLowerCase().startsWith('!2pac')) { console.log('LOG: Non-Mod command used!'); } }); - \ No newline at end of file +// TTV Re-Active +// ================================== +client.on("anongiftpaidupgrade", (channel, username, userstate) => { + client.whisper(username, `BLEEP! BLOOP! Anon-Sub upgraded!!!`); +}); +client.on("ban", (channel, username, reason, userstate) => { + client.say(channel, `/me BYE FELICIA!!!`); + client.say(channel, `!kappagen BOP BOP BOP `); +}); +client.on("cheer", (channel, userstate, message) => { + client.say(channel, `/me BLEEP! BLOOP! O'SNAP! Bit hype!!! sarimoBANG`); + client.say(channel, `!kappagen sarimoHYPE sarimoBITS`); +}); +client.on("clearchat", (channel) => { + client.say(channel, `Chat Rule Reminder`); + client.say(channel, `/me 1. Do NOT feed the Trolls!`); + client.say(channel, `/me 2. Do NOT be a Troll!`); + client.say(channel, `/me 3. #NSFQ in cord.sarimoko.com ONLY!`); + client.say(channel, `/me 4. Do NOT be another brick in the wall!`); +}); +client.on("giftpaidupgrade", (channel, username, sender, userstate) => { + // Huh? Tier 1 => Tier2 +}); +client.on("hosting", (channel, target, viewers) => { + client.say(channel, `/me BLEEP! BLOOP! @Sarimoko got hosted! Do something entertaining!`); +}); +client.on("join", (channel, username, self) => { + // client.say(channel, `/me +1 Chatter! Viewer or Bot...? Time will tell!`); +}); +client.on("part", (channel, username, self) => { + // client.say(channel, `/me -1 Chatter! Where's my bounty hunters? Essemble the *air-qoutes* search-party *air-qoutes*`); +}); +client.on("raided", (channel, username, viewers) => { + client.say(channel, `/me Welcome raiders!!! We may take your viewership, but we'll never take your FREEDOM!!!`); + client.say(channel, `!kappagen sarimoRAID sarimoFREEDOM sarimoRAID sarimoFREEDOM sarimoRAID sarimoFREEDOM`); +}); +client.on("subgift", (channel, username, streakMonths, recipient, methods, userstate) => { + let senderCount = ~~userstate["msg-param-sender-count"]; + client.say(channel, `/me Thank you for supporting The Sarimoko Show with Gift-Subs!`); +}); +client.on("submysterygift", (channel, username, numbOfSubs, methods, userstate) => { + let senderCount = ~~userstate["msg-param-sender-count"]; + client.say(channel, `/me BLEEP! BLOOP! Am I getting hacked? Anon just Gift-Subbed! If I get erased... I love you all!`); +}); +client.on("resub", function (channel, username, months, message, userstate, methods) { + client.say(channel, `/me BLEEP! BLOOP! Thanks for the Re-Sub! We're just 2 lost souls, swimming in a fish bowl, sub after sub...`); +}); +client.on("subscription", function (channel, username, method, message, userstate) { + client.say(channel, `/me BLEEP! BLOOP! New subscriber! Spam your new emotes!!! Let's see you're fav!`); + client.say(channel, `!kappagen sarimoKO sarimoNERD`); +}); +client.on("whisper", (from, userstate, message, self) => { + if (self) return; + client.say(channel, `/me Bleep! Bloop! Sariboto's Inbox (+1): SEXT Message Recieved!`); +}); \ No newline at end of file