Bots Home
|
Create an App
BlondieBusty's Taste The Rainbow
Author:
roydz
Description
Source Code
Launch Bot
Current Users
Created by:
Roydz
// #################################################### // Blondiebusty - Skittles bot // 12 October 2015 // Kaypurrrs Multibot - Edited and maintainted by Roydz // // Added Rotating Notifier by badbadbubba // // Added coding by Kellynumberfan // // Thank you for the help by asdfghjkl28 // // #################################################### // CB app settings cb.settings_choices = [ { name: 'doColoring', type: 'choice', label: 'Change text and background coloring for members and heroes (choose colours below)?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, { name: 'doText', type: 'choice', label: 'Add text labels in front of members and heroes messages (choose text below)?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, // ################################################## // Skittle RED // ################################################## // {name: 'raText', // label: 'Text to put in front of Skittle RED messages', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Skittle RED'}, {name: 'raEmote', label: 'Emoticon to put in front of Skittle RED messages (e.g. Lo)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: ':bb_red'}, {name: 'raBGColor', label: 'Skittle RED background color - HTML colour code without starting \'#\' e.g. (000000 is black)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'd7dc42'}, {name: 'raMinTip', label: 'Minimum tip to become a Skittle RED', type: 'int', minValue: 1, defaultValue: 5555}, {name: 'raAnnounce', label: 'Text to show when someone tips to become a Skittle RED', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: 'MEMBERNAME just joined :bb_red'}, {name: 'raMemberList', label: 'List of current Skittle RED, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, {name: 'raRainText', label: 'Text to use for Skittle RED rain lines', type: 'str', minLength: 0, maxLength: 80, required: false, defaultValue: 'Taste the rainbow with Skittle :bb_red'}, {name: 'raRainCount', label: 'Number of lines of Skittle RED rain', type: 'int', minValue: 1, maxValue: 15, defaultValue: 15}, // ################################################## // Skittle GREEN // ################################################## // {name: 'rbText', // label: 'Text to put in front of Skittle GREEN messages (e.g. Ki)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Skittle GREEN'}, {name: 'rbEmote', label: 'Emoticon to put in front of Skittle GREEN messages (e.g. Lo)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: ':bb_gre'}, {name: 'rbBGColor', label: 'Skittle GREEN background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '8ce0ad'}, {name: 'rbMinTip', label: 'Minimum tip to become a Skittle GREEN', type: 'int', minValue: 1, defaultValue: 4444}, {name: 'rbAnnounce', label: 'Text to show when someone tips to become a Skittle GREEN', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: 'MEMBERNAME just joined :bb_gre'}, {name: 'rbMemberList', label: 'List of current Skittle GREEN, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, {name: 'rbRainText', label: 'Text to use for Skittle GREEN rain lines', type: 'str', minLength: 0, maxLength: 80, required: false, defaultValue: 'Taste the rainbow with Skittle :bb_gre'}, {name: 'rbRainCount', label: 'Number of lines of Skittle GREEN rain', type: 'int', minValue: 1, maxValue: 15, defaultValue: 15}, // ################################################## // Skittle YELLOW // ################################################## // {name: 'rcText', // label: 'Text to put in front of Skittle YELLOW messages (e.g. Lo)', type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Skittle YELLOW'}, {name: 'rcEmote', label: 'Emoticon to put in front of Skittle YELLOW messages (e.g. Lo)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: ':bb_yel'}, {name: 'rcBGColor', label: 'Skittle YELLOW background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'f26464'}, {name: 'rcMinTip', label: 'Minimum tip to become a Skittle YELLOW', type: 'int', minValue: 1, defaultValue: 3333}, {name: 'rcAnnounce', label: 'Text to show when someone tips to become a Skittle YELLOW', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: 'MEMBERNAME just joined :bb_yel'}, {name: 'rcMemberList', label: 'List of current Skittle YELLOW, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, {name: 'rcRainText', label: 'Text to use for Skittle YELLOW rain lines', type: 'str', minLength: 0, maxLength: 80, required: false, defaultValue: 'Taste the rainbow with Skittle :bb_yel'}, {name: 'rcRainCount', label: 'Number of lines of Skittle YELLOW rain', type: 'int', minValue: 1, maxValue: 15, defaultValue: 15}, // ################################################## // Skittle ORANGE // ################################################## // {name: 'rdText', // label: 'Text to put in front of Skittle ORANGE messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Skittle ORANGE'}, {name: 'rdEmote', label: 'Emoticon to put in front of Skittle ORANGE messages (e.g. Lo)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: ':bb_org'}, {name: 'rdBGColor', label: 'Skittle ORANGE background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'f26464'}, {name: 'rdMinTip', label: 'Minimum tip to become a Skittle ORANGE', type: 'int', minValue: 1, defaultValue: 3333}, {name: 'rdAnnounce', label: 'Text to show when someone tips to become a Skittle ORANGE', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: 'MEMBERNAME just joined :bb_org'}, {name: 'rdMemberList', label: 'List of current Skittle ORANGE, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, {name: 'rdRainText', label: 'Text to use for Skittle ORANGE rain lines', type: 'str', minLength: 0, maxLength: 80, required: false, defaultValue: 'Taste the rainbow with Skittle :bb_org'}, {name: 'rdRainCount', label: 'Number of lines of Skittle ORANGE rain', type: 'int', minValue: 1, maxValue: 15, defaultValue: 15}, // ################################################## // Skittle PURPLE // ################################################## // {name: 'reText', // label: 'Text to put in front of Skittle PURPLE messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Skittle PURPLE'}, {name: 'reEmote', label: 'Emoticon to put in front of Skittle PURPLE messages (e.g. Lo)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: ':bb_pur'}, {name: 'reBGColor', label: 'Skittle PURPLE background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'BDBBBB'}, {name: 'reMinTip', label: 'Minimum tip to become a Skittle PURPLE', type: 'int', minValue: 1, defaultValue: 1111}, {name: 'reAnnounce', label: 'Text to show when someone tips to become a Skittle PURPLE', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: 'MEMBERNAME just joined :bb_pur'}, {name: 'reMemberList', label: 'List of current Skittle PURPLE, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, {name: 'reRainText', label: 'Text to use for Skittle PURPLE rain lines', type: 'str', minLength: 0, maxLength: 80, required: false, defaultValue: 'Taste the rainbow with Skittle :bb_pur'}, {name: 'reRainCount', label: 'Number of lines of Skittle PURPLE rain', type: 'int', minValue: 1, maxValue: 15, defaultValue: 15}, //// ################################################## //// Group Six //// ################################################## // // {name: 'rfText', // label: 'Text to put in front of King messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'King'}, // {name: 'rfEmote', // label: 'Emoticon to put in front of King messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: ':yk_king'}, // {name: 'rfBGColor', // label: 'King background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', // type: 'str', // minLength: 0, // maxLength: 6, // required: false, // defaultValue: 'BDBBBB'}, // {name: 'rfMinTip', // label: 'Minimum tip to become a King', // type: 'int', // minValue: 1, // defaultValue: 50001}, // {name: 'rfAnnounce', // label: 'Text to show when someone tips to become a King', // type: 'str', // minLength: 0, // maxLength: 10240, // required: false, // defaultValue: 'MEMBERNAME became the new KING'}, // {name: 'rfMemberList', // label: 'List of current King, separated by commas (and they need to be the CB username exactly)', // type: 'str', // minLength: 0, // maxLength: 10240, // required: false, // defaultValue: ''}, // {name: 'rfEmoteEnter', // label: 'Emoticon King Enter room (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 20, // required: false, // defaultValue: ':yk_herald2'}, // {name: 'rfEnterRoom', // label: 'Enters the room as a King text (End part)', // type: 'str', // minLength: 0, // maxLength: 10240, // required: false, // defaultValue: 'has entered the palace!'}, // {name: 'rfBGEnter', // label: 'King Enter Room Background color - HTML color code ', // type: 'str', // minLength: 0, // maxLength: 7, // required: false, // defaultValue: '#BDBBBB'}, // //// ################################################## //// Group Seven //// ################################################## // // {name: 'rgText', // label: 'Text to put in front of Lords (Fan Club) messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Lord'}, // {name: 'rgEmote', // label: 'Emoticon to put in front of Lords (Fan Club) messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: ':yk_bb'}, // {name: 'rgBGColor', // label: 'Lords (Fan Club) background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', // type: 'str', // minLength: 0, // maxLength: 6, // required: false, // defaultValue: 'BDBBBB'}, // {name: 'rgMemberList', // label: 'List of current Lords (Fan Club), separated by commas (and they need to be the CB username exactly)', // type: 'str', // minLength: 0, // maxLength: 10240, // required: false, // defaultValue: ''}, // {name: 'rgEmoteEnter', // label: 'Emoticon Lord (Fan Club) Enter room (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 20, // required: false, // defaultValue: ':yk_herald2'}, // {name: 'rgEnterRoom', // label: 'Enters the room as a Lord (Fan Club) text (End part)', // type: 'str', // minLength: 0, // maxLength: 10240, // required: false, // defaultValue: 'has entered the palace!'}, // {name: 'rgBGEnter', // label: 'Lords (Fan Club) Enter Room Background color - HTML color code ', // type: 'str', // minLength: 0, // maxLength: 7, // required: false, // defaultValue: '#BDBBBB'}, // //// ################################################## //// Group Eight //// ################################################## // // {name: 'rhText', // label: 'Text to put in front of Jester messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 10, // required: false, // defaultValue: 'Jester'}, // {name: 'rhEmote', // label: 'Emoticon to put in front of Jester messages (e.g. Lo)', // type: 'str', // minLength: 0, // maxLength: 15, // required: false, // defaultValue: ':yk_jestcol'}, // {name: 'rhBGColor', // label: 'Jester background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', // type: 'str', // minLength: 0, // maxLength: 6, // required: false, // defaultValue: 'BDBBBB'}, // {name: 'rhMemberList', // label: 'List of current Jester, separated by commas (and they need to be the CB username exactly)', // type: 'str', // minLength: 0, // maxLength: 10240, // required: false, // defaultValue: ''}, // ################################################## // RULES // ################################################## {name:'rule1', type:'str', minLength:1, maxLength:255, label:'Rule #1'}, {name:'rule2', type:'str', minLength:1, maxLength:255, label:'Rule #2 (optional)', required:false}, {name:'rule3', type:'str', minLength:1, maxLength:255, label:'Rule #3 (optional)', required:false}, {name:'rule4', type:'str', minLength:1, maxLength:255, label:'Rule #4 (optional)', required:false}, {name:'rule5', type:'str', minLength:1, maxLength:255, label:'Rule #5 (optional)', required:false}, {name:'rule6', type:'str', minLength:1, maxLength:255, label:'Rule #6 (optional)', required:false}, {name:'rule7', type:'str', minLength:1, maxLength:255, label:'Rule #7 (optional)', required:false}, {name:'rule8', type:'str', minLength:1, maxLength:255, label:'Rule #8 (optional)', required:false}, {name:'rule9', type:'str', minLength:1, maxLength:255, label:'Rule #9 (optional)', required:false}, {name:'rule10', type:'str', minLength:1, maxLength:255, label:'Rule #10 (optional)', required:false}, {name:'advertisement_wait_time', type:'choice', label:'Notification Time (in minutes)', choice1:5, choice2:10, choice3:15, choice4:20, choice5:25, choice6:30, choice7:45, choice8:60, defaultValue:15}, // ################################################## // Blocker and Spam // ################################################## { name: 'blockMemberList', label: 'List of Blocked Users, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, { name: 'spamList', label: 'List of Spam words for the session', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: '' }, // ################################################## // Rotating Advertisements // ################################################## { name:'msg1', type:'str', required: true, label:'Message 1 (also displayed privately on room entry)', }, { name:'msg2', type:'str', required: false, label:'Message 2', }, { name:'msg3', type:'str', required: false, label:'Message 3', }, { name:'msg4', type:'str', required: false, label:'Message 4', }, { name:'msg5', type:'str', required: false, label:'Message 5', }, { name:'msg6', type:'str', required: false, label:'Message 6', }, { name:'msg7', type:'str', required: false, label:'Message 7', }, { name:'msgcolor', type:'str', label:'Notice color (html code default dark red #9F000F)', defaultValue: '#9F000F' }, { name:'msgbgcolor', type:'str', label:'Notice background color (html code default #F9EEFF)', defaultValue: '#F9EEFF' }, { name: 'chat_ad', type:'int', minValue: 1, maxValue: 999, defaultValue: 2, label: 'Delay in minutes between notices being displayed (minimum 1)' }, // ######################### // TIMER BOT // ######################### { name: 'GoalText', label: 'The text to use for the Timer ("5 minutes <text>")', type: 'str', minLength: 0, maxLength: 255, required: true, defaultValue: 'left to reach goal!' }, { name: 'TextColor', label: 'The text color to use for the Timer notices', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '483D8B' }, { name: 'BGColor', label: 'The background color to use for the Timer notices', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'FFD1FB' }, // ######################### // MODEL SETTINGS // ######################### {name: 'bbEmote', label: 'Emoticon to put in front of Model messages', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: ':bb_skitrb'}, {name: 'ymBGColor', label: 'Model Background Color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'FFDAF1'} ]; var raMembers = {}; var rbMembers = {}; var rcMembers = {}; var rdMembers = {}; var reMembers = {}; //var rfMembers = {}; //var rgMembers = {}; //var rhMembers = {}; var blockMembers = {}; var spamList = []; var i=1; // ######################### // Timer Vars // ######################### var timerActive = false; var timerID = 0; var timerSeconds = 0; var timerTokens = 0; var timerText = ''; var timerDate; var timerTextColor = ''; var timerBGColor = ''; // #D8BFD8 #D2B48C var alertTextColor = '#A0522D'; var alertBGColor = '#EEE8AA'; var cmdTextColor = '#483D8B'; var cmdBGColor = ''; var shy = '\u00ad'; // soft hyphen, ­ // For auto-silencing at least some of token_wh*re_c*nts usernames var twcRegex = /t.?k.?n.?wh.?r.?_c.?nt.?/i; // ######################### // Message settings // ######################### cb.onMessage(function (msg) { // vars for ease of use var u = msg['user']; var m = msg['m']; var isMod = msg['is_mod']; var isModel = (u == cb.room_slug); var modsAllowed = true; var exempt = (isModel || isMod); // ######################### // Timer Part // ######################### if (isModel || (isMod && modsAllowed) || (dash && rdz)) { // if this is a timer command if (msg['m'].search(/^ *!timer.*$/) > -1) { msg['X-Spam'] = true; var p; // !timer <mins> <tks> <text> if (msg['m'].search(/^ *!timer +(\d+)( +)?(\d+)?(.*)$/) > -1) { p = msg['m'].match(/^ *!timer +(\d+)( +)?(\d+)?(.*)$/); cb.log('params: ' + p); startTimer(p[1],p[3],p[4]); // !timer <command> } else if (msg['m'].search(/^ *!timer +(\S+) *$/) > -1) { p = msg['m'].match(/^ *!timer +(\S+) *$/); cb.log('params: ' + p); switch (p[1]) { case 'stop': cb.log('timer stop command'); // stop the timer stopTimer(); break; case 'notice': cb.log('timer notice command'); // show the timer notice showTimerNotice(); break; case 'info': cb.log('timer info command'); // show the timer info showTimerInfo(); break; default: cb.log('invalid command parameter'); break; } } else { cb.log('timer help'); // show the timer help showTimerHelp(); } } } if (msg['X-Spam']) { msg['background'] = '#F0F0F0'; msg['c'] = '#909090'; } // ######################### // End Timer Part // ######################### if(m[0] == '/'){ // Is a command msg['X-Spam'] = true; if(isModel || (isMod && modsAllowed) ){ // IsModel or Mod var actionArray = m.substr(1).split(' '); if( isModel ){ if( actionArray.length >= 2){ switch(actionArray[0]) { case "addred": cb.sendNotice('Adding Skittles Red '+actionArray[1]); setSkittleRed(actionArray[1]); break; case "removered": cb.sendNotice('Removing Skittles Red '+actionArray[1]); unsetSkittleRed(actionArray[1]); break; case "addgreen": cb.sendNotice('Adding Skittles Green '+actionArray[1]); setSkittleGreen(actionArray[1]); break; case "removegreen": cb.sendNotice('Removing Skittles Green '+actionArray[1]); unsetSkittleGreen(actionArray[1]); break; case "addyellow": cb.sendNotice('Adding Skittles Yellow '+actionArray[1]); setSkittleYellow(actionArray[1]); break; case "removeyellow": cb.sendNotice('Removing Skittles Yellow '+actionArray[1]); unsetSkittleYellow(actionArray[1]); break; case "addorange": cb.sendNotice('Adding Skittles Orange '+actionArray[1]); setSkittlePurple(actionArray[1]); break; case "removeorange": cb.sendNotice('Removing Skittles Orange '+actionArray[1]); unsetSkittleOrange(actionArray[1]); break; case "addpurple": cb.sendNotice('Adding Skittles Purple '+actionArray[1]); setSkittleOrange(actionArray[1]); break; case "removepurple": cb.sendNotice('Removing Skittles Purple '+actionArray[1]); unsetSkittlePurple(actionArray[1]); break; case "addspam": cb.sendNotice('Adding Spam Word '+actionArray[1], u); setSpamword(actionArray[1]); break; case "removespam": cb.sendNotice('Removing Spam Word '+actionArray[1], u); unsetSpamword(actionArray[1]); break; default: } }else if( actionArray.length == 1){ switch(actionArray[0].toLowerCase()) { case "help": var n = ""; n += "Multi Bot Actions\n"; n += "---------------------------\n"; n += "/addred <membername> : Add Skittles Red\n"; n += "/removered <membername> : Remove Skittles Red\n"; n += "\n"; n += "/addgreen <membername> : Add Skittles Green\n"; n += "/removegreen <membername> : Remove Skittles Green\n"; n += "\n"; n += "/addyellow <membername> : Add Skittles Yellow\n"; n += "/removeyellow <membername> : Remove Skittles Yellow\n"; n += "\n"; n += "/addorange <membername> : Add Skittles Orange\n"; n += "/removeorange <membername> : Remove Skittles Orange\n"; n += "\n"; n += "/addpurple <membername> : Add Skittles Purple\n"; n += "/removepurple <membername> : Remove Skittles Purple\n"; cb.sendNotice(n,u); break; default: } } }else{ // Is a mod if( actionArray.length >= 2){ switch(actionArray[0]) { case "addred": cb.sendNotice('Adding Skittles Red '+actionArray[1]); setSkittleRed(actionArray[1]); break; case "removered": cb.sendNotice('Removing Skittles Red '+actionArray[1]); unsetSkittleRed(actionArray[1]); break; case "addgreen": cb.sendNotice('Adding Skittles Green '+actionArray[1]); setSkittleGreen(actionArray[1]); break; case "removegreen": cb.sendNotice('Removing Skittles Green '+actionArray[1]); unsetSkittleGreen(actionArray[1]); break; case "addyellow": cb.sendNotice('Adding Skittles Yellow '+actionArray[1]); setSkittleYellow(actionArray[1]); break; case "removeyellow": cb.sendNotice('Removing Skittles Yellow '+actionArray[1]); unsetSkittleYellow(actionArray[1]); break; case "addorange": cb.sendNotice('Adding Skittles Orange '+actionArray[1]); setSkittleOrange(actionArray[1]); break; case "removeorange": cb.sendNotice('Removing Skittles Orange '+actionArray[1]); unsetSkittleOrange(actionArray[1]); break; case "addpurple": cb.sendNotice('Adding Skittles Purple '+actionArray[1]); setSkittlePurple(actionArray[1]); break; case "removepurple": cb.sendNotice('Removing Skittles Purple '+actionArray[1]); unsetSkittlePurple(actionArray[1]); break; case "addspam": cb.sendNotice('Adding Spam Word '+actionArray[1], u); setSpamword(actionArray[1]); break; case "removespam": cb.sendNotice('Removing Spam Word '+actionArray[1], u); unsetSpamword(actionArray[1]); break; default: } }else if( actionArray.length == 1 ){ switch(actionArray[0].toLowerCase()) { case "help": var n = ""; n += "Multi Bot Actions\n"; n += "---------------------------\n"; n += "/addred <membername> : Add Skittles Red\n"; n += "/removered <membername> : Remove Skittles Red\n"; n += "\n"; n += "/addgreen <membername> : Add Skittles Green\n"; n += "/removegreen <membername> : Remove Skittles Green\n"; n += "\n"; n += "/addyellow <membername> : Add Skittles Yellow\n"; n += "/removeyellow <membername> : Remove Skittles Yellow\n"; n += "\n"; n += "/addorange <membername> : Add Skittles Orange\n"; n += "/removeorange <membername> : Remove Skittles Orange\n"; n += "\n"; n += "/addpurple <membername> : Add Skittles Purple\n"; n += "/removepurple <membername> : Remove Skittles Purple\n"; cb.sendNotice(n,u); break; default: } } } } // No else, if its a command and not a model or a mod, do nothing }else{ // Isnt a command so treat is text chat if ( isRA(u) ) { msg['background'] = '#' + cb.settings.raBGColor; msg['m'] = cb.settings.raEmote+ " " +msg['m']; } else if ( isRB(u) ) { msg['background'] = '#' + cb.settings.rbBGColor; msg['m'] = cb.settings.rbEmote+ " " +msg['m']; } else if ( isRC(u) ) { msg['background'] = '#' + cb.settings.rcBGColor; msg['m'] = cb.settings.rcEmote + " " +msg['m']; } else if ( isRD(u) ) { msg['background'] = '#' + cb.settings.rdBGColor; msg['m'] = cb.settings.rdEmote+ " " +msg['m']; } else if ( isRE(u) ) { msg['background'] = '#' + cb.settings.reBGColor; msg['m'] = cb.settings.reEmote + " " +msg['m']; // } else if ( isRF(u) ) { // msg['background'] = '#' + cb.settings.rfBGColor; // msg['m'] = cb.settings.rfEmote +" "+ cb.settings.rfText + " "+cb.settings.rfEmote + " " +msg['m']; // } else if ( isRG(u) ) { // msg['background'] = '#' + cb.settings.rgBGColor; // msg['m'] = cb.settings.rgEmote +" "+ cb.settings.rgText + " "+cb.settings.rgEmote + " " +msg['m']; // } else if ( isRH(u) ) { // msg['background'] = '#' + cb.settings.rhBGColor; // msg['m'] = cb.settings.rhEmote +" "+ cb.settings.rhText + " "+cb.settings.rhEmote + " " +msg['m']; } else if (msg['user'] == cb.room_slug) { msg['background'] = '#' + cb.settings.bbBGColor; msg['m'] = cb.settings.bbEmote +" " +msg['m']; } else if (isBLOCK(u) && !exempt ) { msg['X-Spam'] = true; } else if (CheckBannedWords(m, spamList) && !exempt){ // Send Notice to ROOM_SLUG AND ALL MODS >>>> 'red' cb.sendNotice("Your message has NOT appeared in chat so now", u, '#FF6969', '#FFFFFF', 'bold'); cb.sendNotice("You can shove your spam where the sun don't shine!", u, '#FF6969', '#FFFFFF', 'bold'); cb.sendNotice("PRIVATE NOTICE: [ " + u + " ] tried spamming! [ " + m + " ]", 'roydz', '#FF6969', '#FFFFFF', 'bold'); msg['X-Spam'] = true; } if (twcRegex.test(u)){ // Auto-silencing at least some of token_wh*re_c*nts usernames msg['X-Spam'] = true; } } return msg; }); // ######################### // Entering the room // ######################### cb.onEnter(function(user){ var u = user['user']; cb.sendNotice('Welcome ' + u + '! ' + cb.settings.msg1, u,cb.settings.msgbgcolor ,cb.settings.msgcolor,'bold'); displayRules(user); }); // ######################### // Tip Settings // ######################### cb.onTip(function (tip) { var amountTipped = parseInt(tip['amount']); // ######################### // Timer Part // ######################### if (timerActive && (timerTokens > 0)) { timerTokens = Math.max(0,timerTokens - amountTipped); if (timerTokens == 0) { // tokens goal was reached timerNotice('The goal was reached!'); stopTimer(); } } // ######################### // End Timer Part // ######################### if (amountTipped == cb.settings.raMinTip) { // Make Skittle RED and announce it var announcement = cb.settings.raAnnounce.replace("MEMBERNAME", tip['from_user']); makeRA(tip['from_user']); for (var i = 0; i < cb.settings.raRainCount; i++) { cb.sendNotice(cb.settings.raRainText); } cb.sendNotice(announcement); } if (amountTipped == cb.settings.rbMinTip) { // Make Skittle GREEN and announce it var announcement = cb.settings.rbAnnounce.replace("MEMBERNAME", tip['from_user']); makeRB(tip['from_user']); for (var i = 0; i < cb.settings.rbRainCount; i++) { cb.sendNotice(cb.settings.rbRainText); } cb.sendNotice(announcement); } if (amountTipped == cb.settings.rcMinTip) { // Make Skittle YELLOW and announce it var announcement = cb.settings.rcAnnounce.replace("MEMBERNAME", tip['from_user']); makeRC(tip['from_user']); for (var i = 0; i < cb.settings.rcRainCount; i++) { cb.sendNotice(cb.settings.rcRainText); } cb.sendNotice(announcement); } if (amountTipped == cb.settings.rdMinTip) { // Make Skittle ORANGE and announce it var announcement = cb.settings.rdAnnounce.replace("MEMBERNAME", tip['from_user']); makeRD(tip['from_user']); for (var i = 0; i < cb.settings.rdRainCount; i++) { cb.sendNotice(cb.settings.rdRainText); } cb.sendNotice(announcement); } if (amountTipped == cb.settings.reMinTip) { // Make Skittle PURPLE and announce it var announcement = cb.settings.reAnnounce.replace("MEMBERNAME", tip['from_user']); makeRE(tip['from_user']); for (var i = 0; i < cb.settings.reRainCount; i++) { cb.sendNotice(cb.settings.reRainText); } cb.sendNotice(announcement); } // if (amountTipped > cb.settings.rfMinTip) { // // Make Skittle PURPLE and announce it // var announcement = cb.settings.rfAnnounce.replace("MEMBERNAME", tip['from_user']); // makeRF(tip['from_user']); // for (var i = 0; i < cb.settings.rfRainCount; i++) { // cb.sendNotice(cb.settings.rfRainText); // } // cb.sendNotice(announcement); // } }); // ################################################## // RULES // ################################################## function displayRules(user) { var username = ''; if(user) username = user['user']; var notices = '###### ROOM RULES ######'; for(var i=1; i<=10;i++) { if(cb.settings['rule' + i]) notices += '\nRule #'+ i +': ' + cb.settings['rule'+i]; } notices += '\n######################'; cb.sendNotice(notices, username, '#E6FFFF', '#003399', 'bold'); if(!user || user == null) cb.setTimeout(displayRules, cb.settings.advertisement_wait_time * 60000); } // ######################### // Generic function to compare an array to an array // ######################### function CheckBannedWords(inWords, inArray) { if(inArray.length===0){ return false; } return reduce(inWords, inArray); } // ######################### // Generic function to compare an array to an array // ######################### function reduce(text, badwords) { var wordPattern = '(' + badwords.join('|') + ')'; var re = new RegExp('(\\s|\\b)' + wordPattern + '(\\s|\\b)', 'ig'); var match; if (match = re.exec(text)) { return true; } else { return false; } } // ######################### // Function for Ad // ######################### function chatAd() { var msg; while (cb.settings['msg' + i] == 0) { //skip empty messages i++; if (i > 7) { //loop back to first message i=1; } } msg = cb.settings['msg' + i]; i++; if (i > 7) { //loop back to first message i=1; } cb.sendNotice(msg,'','',cb.settings['msgcolor'],'bold'); cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); } // ######################### // Timer // ######################### function timerNotice(msg,user) { if (user) { cb.sendNotice(msg,user,alertBGColor,alertTextColor,''); } else { cb.sendNotice(msg,'',timerBGColor,timerTextColor,'bold'); } } function startTimer(mins,tokens,text) { if (timerActive) { cb.log('active timer: ' + timerID); // there is an active timer timerNotice('There is an active timer, use "!timer stop" to stop the current timer.'); return false; } timerID++; timerActive = true; timerSeconds = (mins*60); timerTokens = (tokens)?tokens:0; timerText = (text)?text:cb.settings.GoalText; timerFunc(timerID,0); } function stopTimer() { cb.log('stopTimer()'); if (timerActive) { timerActive = false; timerSeconds = 0; timerTokens = 0; timerNotice('The timer has been stopped.'); } else { timerNotice('There is no active timer.',cb.room_slug); } } function showTimerNotice() { cb.log('showTimerNotice()'); if (timerActive) { var l = getTimeLeft(); timerNotice(l + ' ' + timerText); } else { timerNotice('There is no active timer.',cb.room_slug); } } function showTimerInfo() { cb.log('showTimerInfo()'); if (timerActive) { var l = getTimeLeft(); var txt = 'Time left: ' + l; if (timerTokens > 0) { txt += '\nTokens remaining: ' + timerTokens; } txt += '\nNotice text: "... ' + timerText + '"'; timerNotice(txt,cb.room_slug); } else { timerNotice('There is no active timer.',cb.room_slug); } } function getTimeLeft() { var ms = Math.max(1,new Date() - timerDate); var t = timerSeconds - Math.round(ms/1000); var m = Math.floor(t/60); var s = t - (m*60); cb.log('ms: ' + ms); var l = (m>0)?m+' minute'+((m>1)?'s':''):''; l += (s>0)?((m>0)?', ':'')+s+' second'+((s>1)?'s':''):''; return l; } function showTimerHelp() { cb.log('showTimerHelp()'); var txt = '' + 'use "!timer <minutes> [tokens] [text]" to start the timer' + '\n<minutes> = the number of minutes for the timer' + '\n[tokens] = optional, the number of tokens needed to reach the goal' + '\n[text] = optional, the display text for the time left notification' + '\n' + '\nuse "!timer stop" to stop the current timer' + '\nuse "!timer info" to show information about the current timer (model)' + '\nuse "!timer notice" to manually show how much time is left (public)' + '\n' + '\nExamples:' + '\n"!timer 5" - starts a 5 minute timer' + '\n"!timer 15 1500" - starts a 15 minute timer with a goal of 1500 tokens' + '\n"!timer 10 left to decide for topic!" - starts a 10 minute timer displaying "10 minutes left to decide for topic!" notices to the public'; timerNotice(txt, cb.room_slug); } function timerFunc(tID,sec) { cb.log('timerFunc(' + tID + ',' + sec + ')'); if ((!timerActive) || (timerID != tID)) { cb.log('timerActive: ' + timerActive); cb.log('timerID: ' + timerID + ' (' + tID + ')'); return false; } var m,s,r,t; timerSeconds = timerSeconds - sec; if (timerSeconds <= 0) { cb.log('timer done..'); timerNotice('The timer is done!'); timerActive = false; return false; } m = Math.floor(timerSeconds/60); if (m >= 30) { r = m%10; cb.log('r (>=30): ' + r); if (r==0) { r = 10; } s = r*60; } else if (m >= 10) { r = m%5; cb.log('r (>=10): ' + r); if (r==0) { r = 5; } s = r*60; } else if (m > 1) { s = 60; } else if (m == 1) { s = 30; } else { if (timerSeconds == 30) { s = 20; } else { s = 10; } } var timestr = ''; if (m>0) { timestr = m + ' minute'+((m>1)?'s':''); } else { timestr = timerSeconds + ' second'+((s>1)?'s':''); } timerNotice(timestr + ' ' + timerText); t = s*1000; cb.log('timeout: ' + t + 'ms (' + tID + ')'); timerDate = new Date(); cb.setTimeout(timerFunc.bind(this,tID,s),t); } // ######################### // End Timer // ######################### // ######################### // Function for Groups // ######################### function isRA(username) { return (username in raMembers); } function isRB(username) { return (username in rbMembers); } function isRC(username) { return (username in rcMembers); } function isRD(username) { return (username in rdMembers); } function isRE(username) { return (username in reMembers); } function isRF(username) { return (username in rfMembers); } function isRG(username) { return (username in rgMembers); } function isRH(username) { return (username in rhMembers); } function isBLOCK(username) { return (username in blockMembers); } function isSPAMWORD(msg) { return (spamList.contains(msg)); } // ######################### // Set Functions // ######################### function setSkittleRed(username) { raMembers[username] = {'u': 1}; } function unsetSkittleRed(username) { delete raMembers[username]; } function setSkittleGreen(username) { rbMembers[username] = {'u': 1}; } function unsetSkittleGreen(username) { delete rbMembers[username]; } function setSkittleYellow(username) { rcMembers[username] = {'u': 1}; } function unsetSkittleYellow(username) { delete rcMembers[username]; } function setSkittleOrange(username) { rdMembers[username] = {'u': 1}; } function unsetSkittleOrange(username) { delete rdMembers[username]; } function setSkittlePurple(username) { reMembers[username] = {'u': 1}; } function unsetSkittlePurple(username) { delete reMembers[username]; } // Spam Words function setSpamword(msg) { spamList.push(msg); } function unsetSpamword(msg) { spamList.removeItem(msg); } // ######################### // Make Functions // ######################### function makeRA(username) { raMembers[username] = {'u': 1}; } function makeRB(username) { rbMembers[username] = {'u': 1}; } function makeRC(username) { rcMembers[username] = {'u': 1}; } function makeRD(username) { rdMembers[username] = {'u': 1}; } function makeRE(username) { reMembers[username] = {'u': 1}; } function makeRF(username) { rfMembers[username] = {'u': 1}; } function makeRG(username) { rgMembers[username] = {'u': 1}; } // ######################### // Settings // ######################### function grabSettings() { cb.log("starting grabbing settings"); // Get Skittle RED if (cb.settings.raMemberList) { var raMemberSettings = cb.settings.raMemberList.split(','); for (var ii = 0; ii < raMemberSettings.length; ii++) { var clean = raMemberSettings[ii].toLowerCase().replace(/ /g,""); raMembers[clean] = {'u': 1}; } } // Get Skittle GREEN if (cb.settings.rbMemberList) { var rbMemberSettings = cb.settings.rbMemberList.split(','); for (var ii = 0; ii < rbMemberSettings.length; ii++) { var clean = rbMemberSettings[ii].toLowerCase().replace(/ /g,""); rbMembers[clean] = {'u': 1}; } } // Get Skittle YELLOW if (cb.settings.rcMemberList) { var rcMemberSettings = cb.settings.rcMemberList.split(','); for (var ii = 0; ii < rcMemberSettings.length; ii++) { var clean = rcMemberSettings[ii].toLowerCase().replace(/ /g,""); rcMembers[clean] = {'u': 1}; } } // Get Skittle ORANGE if (cb.settings.rdMemberList) { var rdMemberSettings = cb.settings.rdMemberList.split(','); for (var ii = 0; ii < rdMemberSettings.length; ii++) { var clean = rdMemberSettings[ii].toLowerCase().replace(/ /g,""); rdMembers[clean] = {'u': 1}; } } // Get Skittle PURPLE if (cb.settings.reMemberList) { var reMemberSettings = cb.settings.reMemberList.split(','); for (var ii = 0; ii < reMemberSettings.length; ii++) { var clean = reMemberSettings[ii].toLowerCase().replace(/ /g,""); reMembers[clean] = {'u': 1}; } } // // Get Group 6 // if (cb.settings.rfMemberList) { // var rfMemberSettings = cb.settings.rfMemberList.split(','); // for (var ii = 0; ii < rfMemberSettings.length; ii++) { // var clean = rfMemberSettings[ii].toLowerCase().replace(/ /g,""); // rfMembers[clean] = {'u': 1}; // } // } // // // Get Group 7 // if (cb.settings.rgMemberList) { // var rgMemberSettings = cb.settings.rgMemberList.split(','); // for (var ii = 0; ii < rgMemberSettings.length; ii++) { // var clean = rgMemberSettings[ii].toLowerCase().replace(/ /g,""); // rgMembers[clean] = {'u': 1}; // } // } // // // Get Group 8 // if (cb.settings.rhMemberList) { // var rhMemberSettings = cb.settings.rhMemberList.split(','); // for (var ii = 0; ii < rhMemberSettings.length; ii++) { // var clean = rhMemberSettings[ii].toLowerCase().replace(/ /g,""); // rhMembers[clean] = {'u': 1}; // } // } // Get Blocked members if (cb.settings.blockMemberList) { var blockMemberSettings = cb.settings.blockMemberList.split(','); for (var ii = 0; ii < blockMemberSettings.length; ii++) { var clean = blockMemberSettings[ii].toLowerCase().replace(/ /g, ""); blockMembers[clean] = {'u': 1}; } } // Get Spam Words if (cb.settings.spamList) { var spamListSettings = cb.settings.spamList.split(','); for (var ii = 0; ii < spamListSettings.length; ii++) { var clean = spamListSettings[ii].toLowerCase().replace(/ /g, ""); spamList[clean] = {'u': 1}; } } cb.log("finished grabbing settings"); } grabSettings(); // ######################### // Init Function // ######################### function init() { cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); grabSettings(); if (cb.settings.TextColor != '') { timerTextColor = '#' + cb.settings.TextColor; } if (cb.settings.BGColor != '') { timerBGColor = '#' + cb.settings.BGColor; } timerNotice('type "!timer" for options',cb.room_slug); } init();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.