Bots Home
|
Create an App
Loona bot
Author:
test111000
Description
Source Code
Launch Bot
Current Users
Created by:
Test111000
// JavaScript Document /** based on: Name: Ultra Bot Author: britney_and_justin Creation Date: 3/17/14 Date Last Edited: 8/6/15 Live Verson: 1.10 Test Version: 1.10 the bot Name : Ultra Bot tweaked for Loona tweaked by : MasterofDisaster433 First Tweak date : 14.08.2015 Last tweak edit : 10.10.2016 Tweak Test Version: 1.10tv16 Tweak Live Version: 1.10tv16 **/ /** Purpose Room Control King Tip Leader Board Notifier Private Messages in Chat The Chaturbate Dick(less) List The Nice List Tweak purpose (by MasterofDisaster433) : added silence- and graphic level bot launch settings (since 1.10t1v11) /bondage command, /ssi command (since 1.10t1v10) /call command, 2 sets of rotating notifiers (since 1.10t1v9) /squirt command (since 1.10t1v8) /mod command (since 1.10t1v7) /supersalelist command (since 1.10t1v5) /loonatic_package command (since 1.10t1v5) /supersale command (since 1.10t1v5) /loonatics command (since 1.10t1v4) 3-20 top tipper on leaderboard (since 1.10t1v3) /alltipper command (since 1.10t1v3) Loonatics (since 1.10t1v2) Tweaked Room Control (since 1.10t1) **/ /** Change Log 1.10 Change made as a result of a suggestion by rz Added a setting to change the background highlight color 1.09 Changes made as a result of bugs pointed out by DeHaan Fixed typos in the help section. Changed silencelevel and graphiclevel to avoid potential flooding 1.08 Change made as a result of a bug pointed out by Dionne Added a check to make sure that a message consisting entirely of numbers does not trigger the "caps lock" feedback 1.07 Change made as a result of a request from Lewis Goddard and wodinsday Added a setting for the host to toggle the automatic changing of "caps lock" messages to lower case 1.06 Change made as a result of a suggestion from bate_n_switch and mnpugdog Changing the silence or graphic level will no longer send a message to the entire room; it will only send a message to mods and casters. 1.05 Once again, thanks to acrazyguy for suggesting this change. Tip titles will no longer accidentally stop commands from going through 1.04 Changes made as a result of suggestions from acrazyguy. Thank you! Lightened the purple highlight to increase text contrast Added a toggle for "invalid command" warnings 1.03 Fixed bugs with leaderboard, king tipper, and ultra app command support 1.02 Added Level Up command support Added Ultra App command support Added a check to stop the bot from yelling about all caps if the message is all symbols 1.01 Fixed a bug with leaderboard Fixed a bug with king tipper 1.00 Initial release version **/ //user settings { /** setting ==> result capsToggle ==> toggles the automatic toLower funciton for all caps messages invalidToggle ==> toggles the invalid command message tipTitles ==> toggles displaying the users' tips at the beginning of their messages kingTipper ==> toggle the King Tipper feature kingTipperSpam ==> toggles spamming "tip x to become king" every 5 minutes kingMin ==> minimum tip level for a user to be King kingTimer ==> interval for kingTipperSpam leaderBoard ==> toggles the Leader Board feature leaderBoardSpam ==> toggles spamming the top 3 tippers every 5 minutes leaderTimer ==> interval for leaderBoardSpam leaderNumber ==> number of the high tipper on the leader board // added by MasterofDisater433 Loonatic ==> toggle the Loonatic feature // added by MasterofDisater433 notiferEnter ==> toggle for message on enter enterMessage ==> message on enter notifierSpam ==> toggle for message on interval spamMessage ==> message on interval spamTimer ==> length of interval notifierTip ==> toggle for message on tip tipMessage ==> message on tip tipMessageMin ==> min tip for message dickList ==> toggle for auto-silencing users on the Chaturbate Dick(less) List niceList ==> list of users the host wants to guarantee voice and graphic privileges **/ cb.settings_choices = [ {name: 'color', label: 'Enter the six digit hex color code you would like to use for the background highlight.', type: 'str', minLength: 6, maxLength: 6, defaultValue: 'C287C2'}, {name: 'capsToggle', label: 'Would you like the bot to convert all capital messages to all lowercase messages?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'invalidToggle', label: 'Would you like the bot to send the user a message when an invalid command is entered?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'start_silencelevel', label: 'Which starting silencelevel do you prefer?', type: 'int', minValue: 0, maxValue: 4, defaultValue: 0}, {name: 'start_graphiclevel', label: 'Which starting graphiclevel do you prefer?', type: 'int', minValue: 0, maxValue: 4, defaultValue: 1}, {name: 'ShowTimer', label: 'Do you want to periodically show the online time of you?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'ShowTimerSpam', label: 'Change this value if you would like the Show time announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 30}, {name: 'tipTitles', label: 'Do you want to display users\' tip totals as titles?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'kingTipper', label: 'Do you want to use the "King Tipper" feature?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'kingTipperSpam', label: 'Do you want to periodically announce the tip required to become King?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'kingMin', label: 'Enter the minimum tip level for a user to become King:', type: 'int', minValue: 1, maxValue: 1000000, defaultValue: 25}, {name: 'kingTimer', label: 'Change this value if you would like the King announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 5}, {name: 'leaderBoard', label: 'Would you like to use the Leader Board feature?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'leaderBoardSpam', label: 'Do you want to periodically announce the top x tippers?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, // added by MasterofDisater433 {name: 'leaderTimer', label: 'Change this value if you would like the Leaderboard announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 5}, {name: 'leaderNumber', label: 'Change this value if you would like a certain number of tipper on the Leaderboard:', type: 'int', minValue: 3, maxValue: 20, defaultValue: 3}, {name: 'loonatics', label: 'Do you want to use the "Loonatics" feature?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, // added by MasterofDisater433 {name: 'loonaticsTimer', label: 'Change this value if you would like the loonatics messages to loonatics to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 5}, // added by MasterofDisater433 {name: 'supersale', label: 'Do you want to use the "Supersale" feature?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'No'}, // added by MasterofDisater433 {name: 'supersaleTimer', label: 'Change this value if you would like the supersale messages to people who have tipped over 100 tokens to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 5}, // added by MasterofDisater433 {name: 'notifierEnter', label: 'Would you like to display a message for users when they enter the room?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'enterMessage', label: 'Enter the message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Welcome to my room!'}, {name: 'notifierSpam', label: 'Would you like to periodically send a message to the room?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'spamMessage1', label: 'Enter the room message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Follow me on twitter @LoonaVision ! Twitter has the big amount of photos of me. twitter.com/LoonaVision '}, {name: 'spamMessage2', label: 'Enter the room message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'SUPER SALE!: Tip 100 tks & get 10 videos (4 solo, 4 boy girl, 2 girl girl). 200tks=20 videos, 500tks=50 videos. 1000 tks=100 videos! To send me your email for videos type /ss youremailaddress in chatroom.'}, {name: 'spamMessage3', label: 'Enter the room message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'You will help me big time if you join website using this link http://tinyurl.com/loonalive!'}, {name: 'spamMessage4', label: 'Enter the room message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: '1000 tokens to become a LOONAtic! Read here! http://myloonavision.blogspot.com/p/loonatic.html'}, {name: 'spamMessage5', label: 'Enter the room message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'To send me your email for videos, type /ss youremailaddress. Only I will be able to see your email.'}, {name: 'spamMessage6', label: 'Enter the room message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Follow me at twitter.com/LoonaVision !'}, {name: 'spamcolor', label: 'Enter the six digit hex color code you would like to use for room announments colour.', type: 'str', minLength: 6, maxLength: 6, defaultValue: 'A5001A'}, {name: 'spamTimer', label: 'Change this value if you would like the room announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 5}, {name: 'notifier2Spam', label: 'Would you like to periodically send a tip hint message to the room?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'spam2Message1', label: 'Enter the tip hint message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: ':shoot'}, {name: 'spam2Message2', label: 'Enter the tip hint message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'GUYS...It works best this way.....Yellow wall of 1tkn tips....interspersed with larger tips.'}, {name: 'spam2Message3', label: 'Enter the tip hint message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: ':real-rapidtip2'}, {name: 'spam2Message4', label: 'Enter the tip hint message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'VIEWERS....Fast Tipping...Enter TIP AMOUNT (1tkn or more)...Hold down ENTER...Rapid click SEND TIP'}, {name: 'spam2Message5', label: 'Enter the tip hint message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: ':biggun'}, {name: 'spam2Message6', label: 'Enter the tip hint message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Secret to really fast tipping: Click on send tip, put in token amount and than hold down the enter button while really fast clicking on send tip OR try this: hold down CTRL+S and repeatedly hit enter key! :real-rapidfire2'}, {name: 'spam2Timer', label: 'Change this value if you would like the room announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 5}, {name: 'spam2color', label: 'Enter the six digit hex color code you would like to use for tip hints colour.', type: 'str', minLength: 6, maxLength: 6, defaultValue: '100A78'}, {name: 'squirtSpam', label: 'Would you like to periodically send a Squirt Show message to the room?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'squirtspamMessage1', label: 'Enter the squirt show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: "Every tip get's me closer to a huge squirt! :Loona_Falls"}, {name: 'squirtspamMessage2', label: 'Enter the squirt show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: "Loona's squirts are legend... wait for it ... dary!"}, {name: 'squirtspamMessage3', label: 'Enter the squirt show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'GENTLEMEN-LADIES....Loona is now in her squirting position.....Yellow wall of 1 tkn tips, interspersed with larger tips....and watch what happens :)))))'}, {name: 'squirtspamMessage4', label: 'Enter the squirt show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Tip controlled toy makes me squirt huge! Fire the token away until I squirt! :biggun '}, {name: 'squirtspamMessage5', label: 'Enter the squirt show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Squirt time !!!! I will squirt all over your face!'}, {name: 'squirtspamMessage6', label: 'Enter the squirt show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: '1000 tokens are a instant squirt - in 99% of the cases!'}, {name: 'squirtspamTimer', label: 'Change this value if you would like the squirt show announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 2}, {name: 'squirtspamcolor', label: 'Enter the six digit hex color code you would like to use for squirt show message colour.', type: 'str', minLength: 6, maxLength: 6, defaultValue: 'FF69b4'}, {name: 'callSpam', label: 'Would you like to periodically send a Phone Call Show message to the room?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'callspamMessage1', label: 'Enter the phone call show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'on phone :phone ! :buzz her now!'}, {name: 'callspamMessage2', label: 'Enter the phone call show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Live phone call! Now is the time to tip her!'}, {name: 'callspamMessage3', label: 'Enter the phone call show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Call to'}, {name: 'callspamMessage4', label: 'Enter the phone call show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Every Tip is risky! Make her moan on phone! :phone'}, {name: 'callspamMessage5', label: 'Enter the phone call show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'on phone! :phone :shoot '}, {name: 'callspamMessage6', label: 'Enter the phone call show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Does she get busted when she cums on phone? :phone Tip high (500 tokens or 1000 tokens) to find out! :devil3 '}, {name: 'callspamTimer', label: 'Change this value if you would like the call show announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 2}, {name: 'callspamcolor', label: 'Enter the six digit hex color code you would like to use for call show message colour.', type: 'str', minLength: 6, maxLength: 6, defaultValue: 'FF49d4'}, {name: 'bondageSpam', label: 'Would you like to periodically send a Bondage Show message to the room?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'bondagespamMessage1', label: 'Enter the Bondage show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: "I'm handcuffed and helpless! :buzz me now!"}, {name: 'bondagespamMessage2', label: 'Enter the Bondage show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: "I'm your bitch now ! Now is the time to tip her! :biggun "}, {name: 'bondagespamMessage3', label: 'Enter the Bondage show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: "I can't run and flee from getting :buzz ed hard right now! "}, {name: 'bondagespamMessage4', label: 'Enter the Bondage show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Every Tip is crazy! Make me moan loud while I am handcuffed to the pole! :handcuff '}, {name: 'bondagespamMessage5', label: 'Enter the Bondage show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: "I'm your total slut now! :shoot "}, {name: 'bondagespamMessage6', label: 'Enter the Bondage show message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'I am bound to cum now! :devil3 '}, {name: 'bondagespamTimer', label: 'Change this value if you would like the bondage show announcement to happen at a different interval:', type: 'int', minValue: 1, maxValue: 60, defaultValue: 2}, {name: 'bondagespamcolor', label: 'Enter the six digit hex color code you would like to use for bondage show message colour.', type: 'str', minLength: 6, maxLength: 6, defaultValue: 'C639d4'}, {name: 'notifierTip', label: 'Would you like to display a message when a user tips?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'tipMessage', label: 'Enter the message you would like to display.', type: 'str', minLength: 1, maxLength: 1000, defaultValue: 'Thank you!'}, {name: 'tipMessageMin', label: 'Enter the minimum tip amount that you would like to trigger the message', type: 'int', minValue: 1, maxValue: 1000000, defaultValue: 10}, {name: 'dickList', label: 'Would you like to take advantage of the Chaturbate Dick(less) List?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'niceList', label: 'Enter the names of any users you would like to guarantee voice and graphic usage privileges, regardless of the silence and graphic levels, separated by commas and without spaces:', type: 'str', minLength: 1, maxLength: 1000, defaultValue: '', required: false} ] } //variables { /** Variable ==> Purpose tipperArray ==> [i][0] = User's name [i][1] = User's total tips this session numTippers ==> number of users who have given tips this session modArray ==> array of mods eModArray ==> [i] = User's name, list of users who have been given emergency mod powers numMods ==> number of moderators this session numEMods ==> number of users who have been given emergency mod powers this session niceArray ==> [i] = user's name, list of users who have been added to the nice list numNice ==> number of users who have been added to the nice list silenceArray ==> [i] = User's name, list of users who have been silenced numSilenced ==> number of users who have been added to the silence list ignoreArray ==> [i][0] = user's name, [i][1] = user's ignore level, [i][j>1] = person on the user's ignore list numIgnorers ==> number of users who have added people to their ignore lists whisperArray ==> [i][0] = user's name, [i][1] = user who most recently whispered user [i][0] numWhispers ==> number of users stored in whisperArray silenceLevel ==> 0 = anyone can talk 1 = users with tips can talk, 2 users who have tipped can talk, 3 = users who have tipped >=10 can talk, 4 users who have tokens or have tipped can talk graphicLevel ==> 0 = anyone can use graphics 1 = users with tips can use graphics, 2 users who have tipped can use graphics, 3 = users who have tipped >=10 can use graphics, 4 users who have tokens or have tipped can use graphics startTime ==> the time the timer was started. it is used to calculate time left timerDuration ==> length of the timer in minutes timeAdded ==> amount of time being added to a currently running timer currentKing ==> holds the user name of the current king kingTip ==> holds the value of the king tipper's tip total kingTimer ==> user defined interval for king spam leaderTimer ==> user defined interval for leader spam leaderNumber ==> number of top x tipper; x chosen by cb.settings_choices = 'leaderNumber' initialize ==> runs init() once only kingTipperSpam ==> facilitates command to toggle king tipper spam leaderboardSpam ==> facilitates command to toggle leaderboard spam callperson ==> person/location/callee of the phone call spam messages objList ==> {i} i is the user object which is created for each new tipper **/ { var tipperArray = new Array; var numTippers = 0; var modArray = new Array; modArray[0] = cb.room_slug; var eModArray = new Array; var numMods = 1; var numEMods = 0; var dickArray = ['']; var niceArray = new Array; var numNice = 0; var silenceArray = new Array; var numSilenced = 0; var ignoreArray = new Array; var numIgnorers = 0; var whisperArray = new Array; var numWhispers = 0; var silenceLevel = cb.settings.start_silencelevel; var graphicLevel = cb.settings.start_graphiclevel; var startTime = 0; var timerDuration = 0; var timeAdded = 0; var currentKing = ''; var kingTip = 0; var kingTimer = parseInt(cb.settings.kingTimer); var leaderTimer = parseInt(cb.settings.leaderTimer); var leaderNumber = parseInt(cb.settings.leaderNumber); //added by MasterofDisaster433 var initialize = 0; var kingTipperSpam = 0; var leaderboardSpam = 0; var showtimerSpam = 0; var callperson = 'Someone'; //added by MasterofDisaster433 var showtime = 0; //added by MasterofDisaster433 objList = {}; //added by MasterofDisaster433 var cumcountmessage = ""; //added by MasterofDisaster433 var squirtcountmessage = ""; //added by MasterofDisaster433 var cumcount = 0 ; //added by MasterofDisaster433 var squirtcount = 0 ; //added by MasterofDisaster433 //color codes { var purple = "#C287C2";//original color: #B369B3 } } } //functions { /** Function ==> Purpose tipperArrayPopulate ==> adds tippers to the tipperArray findTipper ==> finds and returns the index of a user eModArrayPopulate ==> adds users to the eModArray niceArrayPopulate ==> adds users to the niceArray setSilenceLevel ==> called when /silencelevel is used. sets silenceLevel setGraphicLevel ==> called when /graphiclevel is used. sets graphiclevel silence ==> called when /silence is used. adds a user to the silenceArray unsilence ==> called when /unsilence is used. removes a user from the silenceArray startTimer ==> called when /starttimer is used. starts a timer for t minutes timer ==> called from startTimer. it's the actual timer fiveMinuteWarning ==> called from startTimer. if t > 5, sounds a warning at 5 minutes remaining oneMinuteWarning ==> called from startTimer. if t > 2, sounds a warning at 1 minute remaining timeLeft ==> called when /timeleft is used. sends the user a notice with the time remaining addTime ==> called when /addtime is used. adds t minutes to the timer, if one is running sendWhisper ==> called when /whisper or an alias of /whisper is used. sends a private message to a user in chat ignoreUser ==> called when /ignore is used. adds a member to the user's ignore list unignoreUser ==> called when /unignore is used. removes a member from the user's ignore list setIgnoreLevel ==> called when /ignorelevel is used. sets ignoreLevel for the user setTipTitles ==> called from onMessage. appends the user's tips to the beginning of the message eMod ==> called when /emod is used. adds or removes a user from the eModArray kingSpam ==> spams "tip x to be king" every 5 minutes if the user setting allows it kingSpamTimer ==> the actual timer for kingSpam leaderSpam ==> spams the leaderboard every 5 minutes leaderSpamTimer ==> the actual timer for leaderSpam showLeaderBoard ==> called when /leaderboard is used. shows the leaderboard notifierSpam ==> called from init, starts the timer for notifer spam notiferSpamTimer ==> the actual timer for notifierSpam nice ==> called from /addnice and /removenice. adds and removes users from the niceArray kingSpamToggle ==> called when /kingspam is used. toggles the spam notifierSpamToggle ==> called when /notifierspam is used. toggles the spam colorChecker ==> verifies the color code is valid swap ==> called by partiton for swaping array entries added by MasterofDisaster433 partition ==> called by quicksort for array partiton // quicksort ==> sorts an array from low to high // **/ // creation of User Object function User() //added by MasterofDisaster433 { this.name = ''; //user name gets stored here this.loonatic = false; //Is user loonatic this.supersale = false; //Has user tipped 100 tokens for supersale this.loonaticSpam = false; //Does loonatic message stop this.supersaleSpam = false; //Does supersale message stop } User.prototype.GetLoonaticEmail = function(message, user) // added by MasterofDisaster433 { if(tipperArray[findTipper(user)][2] == '') { tipperArray[findTipper(user)][2] = message; this.loonaticSpam = true; this.supersaleSpam = true; cb.sendNotice('Thank you, Loona has your email address (' + message + ') now!',this.name,"#FF69B4"); cb.sendNotice('If you need to change your email address type /change_email_address newemail (shortcut /cea)!',this.name,"#FF69B4"); cb.sendNotice(this.name + ' has send you his/her email address now!',cb.room_slug,"#FF69B4"); } else if(tipperArray[findTipper(user)][2] != '') { if(this.supersaleSpam === true) { this.loonaticSpam = true; } cb.sendNotice('Loona has your email address already!',this.name,"#FF69B4"); } }; User.prototype.GetSupersaleEmail = function(message, user) // added by MasterofDisaster433 { if(tipperArray[findTipper(user)][2] == '') { var m = ''; //build the message for(var i = 2; i < message.length; i++) { if (m.length > 30) { cb.sendNotice('comment to long! Please retry with /cea!',this.name,"#00ffff"); break; } else if(i == 2) { m += message[2]; } else { m += ' ' + message[i]; } } tipperArray[findTipper(user)][2] = message[1] + ' ' + m; this.supersaleSpam = true; cb.sendNotice('Thank you, Loona has your email address (' + message[1] + ') now!',this.name,"#00ffff"); cb.sendNotice('If you need to change your email address type /change_email_address newemail (shortcut /cea)!',this.name,"#00ffff"); cb.sendNotice(this.name + ' has send you his/her email address now!',cb.room_slug,"#00ffff"); } else if(tipperArray[findTipper(user)][2] != '') { if(this.loonaticSpam === true) { this.supersaleSpam = true; } cb.sendNotice('Loona has your email address already!',this.name,"#00ffff"); } }; User.prototype.LoonaticSpam = function() //added by MasterofDisaster433 { var those = this; cb.setTimeout(function(){those.LoonaticSpamTimer()},cb.settings.loonaticsTimer*60000); }; User.prototype.LoonaticSpamTimer = function() //added by MasterofDisaster433 { if(cb.settings.loonatics == 'Yes' && this.loonaticSpam === false && this.supersaleSpam === false) { cb.sendNotice('You are now a LOONAtic',this.name,"#FF69B4"); cb.sendNotice('Send Loona your email address by typing "/loonatic_package youremail" in normal chat to get the legendary LOONAtic package!',this.name,"#FF69B4"); cb.sendNotice('e.g. /loonatic_package myemail@mail.com (short /lp my@mail.com)',this.name,"#FF69B4"); cb.sendNotice('If you need to change your email address type /change_email_address newemail (shortcut /cea)!',this.name,"#FF69B4"); cb.sendNotice('For more information about the LOONAtic package read the room notifications and her bio!',this.name,"#FF69B4"); cb.sendNotice('The LOONAtic package will be send to your email at the end of the show or directly after the show!',this.name,"#FF69B4"); cb.sendNotice(this.name + ' is LOONAtic now!',cb.room_slug,"#FF69B4"); this.LoonaticSpam(); } else if(cb.settings.loonatics == 'Yes' && this.loonaticSpam === false && this.supersaleSpam === true) { cb.sendNotice('You are now a LOONAtic',this.name,"#FF69B4"); cb.sendNotice('Loona will send you the legendary LOONAtic package!',this.name,"#FF69B4"); cb.sendNotice('For more information about the LOONAtic package read the room notifications and her bio!',this.name,"#FF69B4"); cb.sendNotice(this.name + ' is LOONAtic now!',cb.room_slug,"#FF69B4"); this.loonaticSpam = true; } }; User.prototype.SupersaleSpam = function() //added by MasterofDisaster433 { var that = this; cb.setTimeout(function(){that.SupersaleSpamTimer()},cb.settings.supersaleTimer*60000); }; User.prototype.SupersaleSpamTimer = function() //added by MasterofDisaster433 { if(cb.settings.supersale == 'Yes' && this.supersaleSpam === false) { cb.sendNotice('You tipped 100 or more tokens today!' + '\nTo get my videos, please, type in public chat /supersale youremail.' + '\nFor example, /supersale bobsmith@email.com (short /ss bobsmith@email.com)',this.name,"#00ffff",'bold'); cb.sendNotice('\nThe email address is only seen by Loona and no one else!' + '\nYou can leave a short comment behind your email address!' + '\nIf you need to change your email address type /change_email_address newemail (shortcut /cea)!' + '\nFor more information about the Supersale read the room notifications and her bio!' + '\nThe Supersale videos will be send to your email address at the end of the show or directly after the show!',this.name,"#00ffff"); this.SupersaleSpam(); } }; // creation of Notifier Object function Notifier() { this.mi = 0; //message index this.mc = ''; //message colour this.spamTimer = 0; //meassage spam time interval this.Message = []; //message array this.SpamTGL = false; //notifier on (true) or off (false) this.name = ''; //notifier name } Notifier.prototype.notifierSpam = function() { var these = this; cb.setTimeout(function(){these.notifierSpamTimer()},this.spamTimer*60000); } Notifier.prototype.notifierSpamTimer = function() { if(this.SpamTGL == true) { if(this.mi > 5) { this.mi = 0; } cb.sendNotice(this.Message[this.mi],'','#ffffff',this.mc,'bold'); this.mi += 1; this.notifierSpam(); } } Notifier.prototype.SpamToggle = function(option, mod) //added by masteroddisaster433 { var modus = this.name; if(option == 'on') { if(this.SpamTGL == true) { cb.sendNotice('The '+ modus +' spam is already turned on.',mod,purple); } else { this.SpamTGL = true; this.mi = 0; // mi message index cb.sendNotice('You have turned on '+modus+' spam.',mod,purple); this.notifierSpam(); switch(modus) { case 'squirt': cb.sendNotice("My Squirt Show starts now! Every tip get's me closer to a huge squirt! ",'','#ffffff',this.mc,'bold'); break; case 'call': cb.sendNotice("My Phone Call Show starts now! Every tip get's me closer to a risky orgasm on the Phone! ",'','#ffffff',this.mc,'bold'); break; case 'bondage': cb.sendNotice("My Bondage Show starts now! Every tip get's me closer to an orgasm I can't flee from! ",'','#ffffff',this.mc,'bold'); break; } } } else if(option == 'off') { if(this.SpamTGL == false) { cb.sendNotice('The '+modus+' spam is already turned off.',mod,purple); } else { this.SpamTGL = false; this.mi = 0; cb.sendNotice('You have turned off the '+modus+' spam.',mod,purple); switch(modus) { case 'squirt': cb.sendNotice("My Squirt Show is over now! ",'','#ffffff',this.mc,'bold'); break; case 'call': cb.sendNotice("My Phone Call Show is over now! ",'','#ffffff',this.mc,'bold'); break; case 'bondage': cb.sendNotice("My Bondage Show is over now! ",'','#ffffff',this.mc,'bold'); break; } } } else if(option != null) { cb.sendNotice(option + ' is not a valid option for /'+modus+'spam.\nType /ubhelp '+modus+'spam to see how to use /'+modus+'spam.',mod,purple); } else if(option == null) { cb.sendNotice('You did not enter a valid option for /'+modus+'spam.\nType /ubhelp '+modus+'spam to see how to use /'+modus+'spam.',mod,purple); } } { function messagebuilder(message) { //build the message var m = ''; for(var i = 1; i < message.length; i++) { if(i == 1) { m += message[i]; } else { m += ' ' + message[i]; } } return m; } function tipperArrayPopulate(user) //edited by MasterofDisaster433 { tipperArray[numTippers] = new Array; tipperArray[numTippers][0] = user; tipperArray[numTippers][1] = 0; tipperArray[numTippers][2] = ''; objList[user] = new User(); //instance of User object gets created for current user objList[user].name = user; //current user name gets stored in the currents users object instance numTippers++; } function findTipper(user) { //find the index of the user for(var i = 0; i < tipperArray.length; i++) { if(tipperArray[i][0] == user) { break; } } //the user is not in the array. add him and call findTipper if(i == tipperArray.length) { tipperArrayPopulate(user); findTipper(user); } return i; } function modArrayPopulate(user) { modArray[numMods] = user; numMods++; } function eModArrayPopulate(user) { eModArray[numEMods] = user; numEMods++; } function niceArrayPopulate(user) { niceArray[numNice] = user; numNice++; } function silenceArrayPopulate(user) { silenceArray[numSilenced] = user; numSilenced++; } function ignoreArrayPopulate(user) { ignoreArray[numIgnorers] = new Array; ignoreArray[numIgnorers][0] = user; ignoreArray[numIgnorers][1] = 0; numIgnorers++; } function findIgnorer(user) { for(i = 0; i < ignoreArray.length; i++) { if(ignoreArray[i][0] == user) { break; } } if(i == ignoreArray.length) { ignoreArrayPopulate(user); findIgnorer(user); } return i; } function whisperArrayPopulate(user) { whisperArray[numWhispers] = new Array; whisperArray[numWhispers][0] = user; whisperArray[numWhispers][1] = ''; numWhispers++; } function findWhisper(user) { //find the index of the user for(var i = 0; i < whisperArray.length; i++) { if(whisperArray[i][0] == user) { break; } } //the user is not in the array. add him and call findWhisper if(i == whisperArray.length) { whisperArrayPopulate(user); findWhisper(user); } return i; } function setSilenceLevel(s, mod) { if(parseInt(s) >= 0 && parseInt(s) <= 4) //tweak by MasterofDisaster433 { silenceLevel = parseInt(s); cb.sendNotice("The silence level has been set to " + s + ".", cb.room_slug, purple); cb.sendNotice("The silence level has been set to " + s + ".", "", purple, "", "", 'red'); switch(parseInt(s)) { case 0: cb.sendNotice('All members can talk in chat.',cb.room_slug,purple); cb.sendNotice('All members can talk in chat.',"",purple,"","",'red'); break; case 1: cb.sendNotice('Only members with tokens can talk in chat.',cb.room_slug,purple); cb.sendNotice('Only members with tokens can talk in chat.',"",purple,"","",'red'); break; case 2: cb.sendNotice('Only members who have tipped can talk in chat.',cb.room_slug,purple); cb.sendNotice('Only members who have tipped can talk in chat.',"",purple,"","",'red'); break; case 3: cb.sendNotice('Only members who have tipped at least 10 tokens can talk in chat.',cb.room_slug,purple); cb.sendNotice('Only members who have tipped at least 10 tokens can talk in chat.',"",purple,"","",'red'); break; case 4: cb.sendNotice('Only members who have tipped this show or have tokens can talk in chat.',cb.room_slug,purple); //tweak by MasterofDisaster433 cb.sendNotice('Only members who have tipped this show or have tokens can talk in chat.',"",purple,"","",'red'); // break; // } } else { cb.sendNotice(s + ' is not a valid setting.\nType "/ubhelp silencelevel" to see how to use /silencelevel.',mod,purple); } } function setGraphicLevel(s, mod) { if(parseInt(s) >= 0 && parseInt(s) <= 4) //tweak by MasterofDisaster433 { graphicLevel = parseInt(s); cb.sendNotice('The graphic level has been set to ' + s + '.',cb.room_slug,purple); cb.sendNotice('The graphic level has been set to ' + s + '.',"",purple,"","",'red'); switch(parseInt(s)) { case 0: cb.sendNotice('All members can use graphics in chat.',cb.room_slug,purple); cb.sendNotice('All members can use graphics in chat.',"",purple,"","",'red'); break; case 1: cb.sendNotice('Only members with tokens can use graphics in chat.',cb.room_slug,purple); cb.sendNotice('Only members with tokens can use graphics in chat.',"",purple,"","",'red'); break; case 2: cb.sendNotice('Only members who have tipped can use graphics in chat.',cb.room_slug,purple); cb.sendNotice('Only members who have tipped can use graphics in chat.',"",purple,"","",'red'); break; case 3: cb.sendNotice('Only members who have tipped at least 10 tokens can use graphics in chat.',cb.room_slug,purple); cb.sendNotice('Only members who have tipped at least 10 tokens can use graphics in chat.',"",purple,"","",'red'); break; case 4: cb.sendNotice('Only members who have tipped this show or have tokens can use graphics in chat.',cb.room_slug,purple); //tweak by MasterofDisaster433 cb.sendNotice('Only members who have tipped this show or have tokens can use graphics in chat.',"",purple,"","",'red'); // break; // } } else { cb.sendNotice(s + ' is not a valid setting.\nType "/ubhelp graphiclevel" to see how to use /graphiclevel.',mod,purple); } } function silence(user, mod) { if(cbjs.arrayContains(silenceArray,user)) { cb.sendNotice(user + ' has already been silenced.',mod,purple); } else { silenceArrayPopulate(user); cb.sendNotice('You have silenced ' + user + '.',mod,purple); } } function unsilence(user, mod) { if(cbjs.arrayContains(silenceArray,user)) { cbjs.arrayRemove(silenceArray,user); cb.sendNotice('You have unsilenced ' + user + '.',mod,purple); cb.sendNotice('You have been unsilenced by ' + mod + '. Be nice and don\'t make demands. :smile',user,purple); } else { cb.sendNotice(user + ' does not need to be unsilenced.',mod,purple); } } function show_timelaps() // added by MasterofDisaster433 { cb.setTimeout(show_timer,1000); } function show_timer() // added by MasterofDisaster433 { show_timelaps(); showtime += 1; } // added by MasterofDisaster433 function Show_time() { var Showtime = ''; var hours = Math.floor(showtime/3600); if(hours > 0) { Showtime += String(hours) + ' h '; } var minutes = Math.floor(showtime/60); if (minutes > 0) { Showtime += String(minutes % 60) + ' min '; } var seconds = showtime % 60; Showtime += String(seconds) + ' sec '; return Showtime; } function startTimer(t, mod) { //there is no timer already running if(startTime == 0 && timeAdded == 0) { //verify a valid option was sent with /starttimer if(t >= 0 && t.toString().indexOf('.') == -1) { timerDuration = t; //notice of timer start if(mod != null) { cb.sendNotice(mod + ' has set a timer for ' + timerDuration + ' minutes!','',purple); } //local variable to convert noticeTime (minutes) to milliseconds var millis = timerDuration * 60000; var fiveMinutes = millis - 300000; var oneMinute = millis - 60000; //actual timer cb.setTimeout(timer,millis); //five minutes remaining announcement if(fiveMinutes > 0) { cb.setTimeout(fiveMinuteWarning,fiveMinutes); } //one minute remaining announcement cb.setTimeout(oneMinuteWarning,oneMinute); //set the start time startTime = new Date(); } else if(t != null) { cb.sendNotice(t + ' is not a valid option for /starttimer.\nType /ubhelp starttimer to see how to use /starttimer.',mod,purple); } else if(t == null) { cb.sendNotice('You did not enter a valid option for /starttimer.\nType /ubhelp starttimer to see how to use /starttimer.',mod,purple); } } //there is a timer running and time has been added else if(startTime != 0 && timeAdded != 0 && mod == null) { timeAdded = 0; timerDuration = t; //local variable to convert noticeTime (minutes) to milliseconds var millis = timerDuration * 60000; var fiveMinutes = millis - 300000; var oneMinute = millis - 60000; //actual timer cb.setTimeout(timer,millis); //five minutes remaining announcement if(fiveMinutes > 0) { cb.setTimeout(fiveMinuteWarning,fiveMinutes); } //one minute remaining announcement cb.setTimeout(oneMinuteWarning,oneMinute); } //there is a timer running and someone tried to start a new timer else if(startTime != 0 && timeAdded == 0 || startTime != 0 && timeAdded != 0 && mod != null) { cb.sendNotice('There is a timer running already.',mod,purple); } } function timer() { //check to see if /addTime has been used if(timeAdded == 0) { cb.sendNotice('Time is up!','',purple); startTime = 0; timerDuration = 0; } else { if(timeAdded == 5) { cb.sendNotice('There are 5 minutes remaining!','',purple); } startTimer(timeAdded); } } function fiveMinuteWarning() { if(timeAdded == 0) { cb.sendNotice('There are 5 minutes remaining!','',purple); } } function oneMinuteWarning() { if(timeAdded == 0) { cb.sendNotice('There is 1 minute remaining!','',purple); } } function timeLeft(user) { if(startTime != 0) { //local variable for the current time var currentTime = new Date(); //local variable to hold the time left var timeLeft = startTime.getHours()*3600 + startTime.getMinutes()*60 + startTime.getSeconds() + timerDuration*60 - currentTime.getHours()*3600 - currentTime.getMinutes()*60 - currentTime.getSeconds(); //local variables for hours, minutes, and seconds remaining var hours = timeLeft/3600; hours = Math.floor(hours); var minutes = (timeLeft-hours*3600)/60; minutes = Math.floor(minutes); var seconds = timeLeft-hours*3600-minutes*60; //account for timeAdded minutes += timeAdded; //fix numbers after timeAdded if(hours < 0) { hours = 0; minutes = 0; } if(hours > 0) { if(hours > 9) { if(minutes > 9 && seconds > 9) { cb.sendNotice('Time Remaining: ' + hours + ':' + minutes + ':' + seconds,user,purple); } else if(minutes > 9 && seconds <= 9) { cb.sendNotice('Time Remaining: ' + hours + ':' + minutes + ':0' + seconds,user,purple); } else if(minutes <= 9 && seconds > 9) { cb.sendNotice('Time Remaining: ' + hours + ':' + minutes + ':' + seconds,user,purple); } else if(minutes <= 9 && seconds <= 9) { cb.sendNotice('Time Remaining: ' + hours + ':' + minutes + ':0' + seconds,user,purple); } } else { if(minutes > 9 && seconds > 9) { cb.sendNotice('Time Remaining: 0' + hours + ':' + minutes + ':' + seconds,user,purple); } else if(minutes > 9 && seconds <= 9) { cb.sendNotice('Time Remaining: 0' + hours + ':' + minutes + ':0' + seconds,user,purple); } else if(minutes <= 9 && seconds > 9) { cb.sendNotice('Time Remaining: 0' + hours + ':' + minutes + ':' + seconds,user,purple); } else if(minutes <= 9 && seconds <= 9) { cb.sendNotice('Time Remaining: 0' + hours + ':' + minutes + ':0' + seconds,user,purple); } } } else if(hours == 0 && minutes > 0) { if(minutes > 9 && seconds > 9) { cb.sendNotice('Time Remaining: 00:' + minutes + ':' + seconds,user,purple); } else if(minutes > 9 && seconds <= 9) { cb.sendNotice('Time Remaining: 00:' + minutes + ':0' + seconds,user,purple); } else if(minutes <= 9 && seconds > 9) { cb.sendNotice('Time Remaining: 00:0' + minutes + ':' + seconds,user,purple); } else if(minutes <= 9 && seconds <= 9) { cb.sendNotice('Time Remaining: 00:0' + minutes + ':0' + seconds,user,purple); } } else if(hours == 0 && minutes == 0 && seconds > 0) { if(seconds > 9) { cb.sendNotice('Time Remaining: 00:00' + ':' + seconds,user,purple); } else { cb.sendNotice('Time Remaining: 00:00' + ':0' + seconds,user,purple); } } else { cb.sendNotice('hours: ' + hours + '\nminutes: ' + minutes + '\nseconds: ' + seconds); } } else { cb.sendNotice('There is no timer running.',user,purple); } } function addTime(t, mod) { if(t > 0 && t.toString().indexOf('.') == -1) { if(startTime != 0) { timeAdded = parseInt(t); //notice of timer start if(timeAdded == 1) { cb.sendNotice(mod + ' has has added 1 minute to the timer!','',purple); } else { cb.sendNotice(mod + ' has has added ' + timeAdded + ' minutes to the timer!','',purple); } } else { cb.sendNotice('There is no timer running.',mod,purple); } } else if(t != null) { cb.sendNotice(t + ' is not a valid option for /addtime.\nType /ubhelp addtime to see how to use /addtime.',mod,purple); } else if(t == null) { cb.sendNotice('You did not enter a valid option for /addtime.\nType /ubhelp addtime to see how to use /addtime.',mod,purple); } } function sendModMes(message,from) //add by masterofdisaster433 { cb.sendNotice(messagebuilder(message),'',"#FA8072",'#000000','normal','red'); cb.sendNotice(messagebuilder(message),cb.room_slug,"#FA8072",'#000000','normal'); } function sendWhisper(message,from, mod, tokens) { if(message[1] != from) { if((!cbjs.arrayContains(ignoreArray[findIgnorer(message[1])],from) || mod == 'true') && tokens == true) { switch(parseInt(ignoreArray[findIgnorer(message[1])][1])) { case 0: var m = from + ': '; //build the message for(var i = 2; i < message.length; i++) { if(i == 2) { m += message[i]; } else { m += ' ' + message[i]; } } whisperArray[findWhisper(message[1])][1] = from; cb.sendNotice(m,message[1],'#000000','#FFFF00','bold'); break; case 1: if(tokens || mod) { var m = from + ': '; //build the message for(var i = 2; i < message.length; i++) { if(i == 2) { m += message[i]; } else { m += ' ' + message[i]; } } whisperArray[findWhisper(message[1])][1] = from; cb.sendNotice(m,message[1],'#000000','#FFFF00','bold'); } else { cb.sendNotice(message[1] + ' is ignoring whispers from all members who don\'t have tokens.',from,'#000000','#FFFF00','bold'); } break; case 2: if(tipperArray[findTipper(from)][1] > 0 || mod) { var m = from + ': '; //build the message for(var i = 2; i < message.length; i++) { if(i == 2) { m += message[i]; } else { m += ' ' + message[i]; } } whisperArray[findWhisper(message[1])][1] = from; cb.sendNotice(m,message[1],'#000000','#FFFF00','bold'); } else { cb.sendNotice(message[1] + ' is ignoring whispers from all members who haven\'t tipped any tokens.',from,'#000000','#FFFF00','bold'); } break; case 3: if(tipperArray[findTipper(from)][1] > 10 || mod ) { var m = from + ': '; //build the message for(var i = 2; i < message.length; i++) { if(i == 2) { m += message[i]; } else { m += ' ' + message[i]; } } whisperArray[findWhisper(message[1])][1] = from; cb.sendNotice(m,message[1],'#000000','#FFFF00','bold'); } else { cb.sendNotice(message[1] + ' is ignoring whispers from all members who haven\'t tipped at least 10 tokens.',from,'#000000','#FFFF00','bold'); } break; case 4: //added by MasterofDisaster433 if(tipperArray[findTipper(from)][1] > 0 || mod || tokens) // { // var m = from + ': '; // //build the message // for(var i = 2; i < message.length; i++) // { // if(i == 2) // { // m += message[i]; // } // else // { // m += ' ' + message[i]; // } // } // whisperArray[findWhisper(message[1])][1] = from; // cb.sendNotice(m,message[1],'#000000','#FFFF00','bold'); // } // else // { // cb.sendNotice(message[1] + ' is ignoring whispers from all members who haven\'t tipped any tokens or have no tokens.',from,'#000000','#FFFF00','bold'); // } // break; // } } else { cb.sendNotice(message[1] + ' is ignoring whispers from you. Your message was not sent.',from,'#000000','#FFFF00','bold') } } else { cb.sendNotice('Talking to yourself is a little odd...',from,'#000000','#FFFF00','bold'); } } function sendReply(message, from) { if(!cbjs.arrayContains(ignoreArray[findIgnorer(whisperArray[findWhisper(from)][1])],from)) { if(whisperArray[findWhisper(from)][1] != '') { var m = from + ': '; //build the message for(var i = 1; i < message.length; i++) { if(i == 1) { m += message[i]; } else { m += ' ' + message[i]; } } whisperArray[findWhisper(whisperArray[findWhisper(from)][1])][1] = from; cb.sendNotice(m,whisperArray[findWhisper(from)][1],'#000000','#FFFF00','bold'); } else { cb.sendNotice('No one has whispered you.',from,'#000000','#FFFF00','bold'); } } else { cb.sendNotice(whisperArray[findWhisper(from)][1] + ' is ignoring whispers from you. Your message was not sent.',from,'#000000','#FFFF00','bold') } } function ignoreUser(user, from) { if(cbjs.arrayContains(ignoreArray[findIgnorer(from)],user)) { if(user == from) { cb.sendNotice('You can\'t ignore yourself. You may want to consult a therapist.',from,purple); } else { cb.sendNotice('You are already ignoring that user\'s whispers.',from,purple); } } else { ignoreArray[findIgnorer(from)][ignoreArray[findIgnorer(from)].length] = user; cb.sendNotice('You are now ignoring whispers from ' + user + '.',from,purple); cb.sendNotice('Remember, the room host, moderators, and fan club members will always be able to whisper you!',user,purple); } } function unignoreUser(user,from) { if(user == from) { cb.sendNotice('My, you are an odd one, aren\'t you?', from, purple); } else if(cbjs.arrayContains(ignoreArray[findIgnorer(from)],user)) { cbjs.arrayRemove(ignoreArray[findIgnorer(from)],user); cb.sendNotice('You are no longer ignoring whispers from ' + user, from, purple); } else { cb.sendNotice(user + ' is not being ignored. There is no need to unignore ' + user, from, purple); } } function setIgnoreLevel(l,user) { ignoreArray[findIgnorer(user)][1] = l; switch(parseInt(l)) { case 0: cb.sendNotice('You have set your whisper ignore level to ' + l + '.\nYou are accepting whispers from everyone.',user,purple); break; case 1: cb.sendNotice('You have set your whisper ignore level to ' + l + '.\nYou are accepting whispers from everyone who has tokens.',user,purple); break; case 2: cb.sendNotice('You have set your whisper ignore level to ' + l + '.\nYou are accepting whispers from everyone who has tipped at least 1 token.',user,purple); break; case 3: cb.sendNotice('You have set your whisper ignore level to ' + l + '.\nYou are accepting whispers from everyone who has tipped at least 10 tokens.',user,purple); break; case 4: cb.sendNotice('You have set your whisper ignore level to ' + l + '.\nYou are accepting whispers from everyone who has tokens or has tipped at least 1.',user,purple); break; } cb.sendNotice('Remember, the room host, moderators, and fan club members will always be able to whisper you!',user,purple); } function setTipTitles(user, message) { if(cb.settings.kingTipper == 'Yes' && cb.settings.loonatics == 'Yes' && user == currentKing && parseInt(tipperArray[findTipper(user)][1]) > 999) //tweaked by MasterofDisaster433 { // var m = ':smallCrown :heart3 |' + tipperArray[findTipper(user)][1] + '| ' + message; // } // else if(cb.settings.kingTipper == 'Yes' && user == currentKing && (parseInt(tipperArray[findTipper(user)][1]) < 1000 || cb.settings.loonatics == 'No')) { var m = ':smallCrown |' + tipperArray[findTipper(user)][1] + '| ' + message; } else if(cb.settings.loonatics == 'Yes' && parseInt(tipperArray[findTipper(user)][1]) > 999 && (user != currentKing || cb.settings.kingTipper == 'No' )) //tweaked by MasterofDisaster433 { // var m = ':heart3 |' + tipperArray[findTipper(user)][1] + '| ' + message; // } // else { var m = '|' + tipperArray[findTipper(user)][1] + '| ' + message; } return m; } function eMod(ar,user,from) { if(ar == 'add') { if(!cbjs.arrayContains(eModArray,user)) { eModArrayPopulate(user); cb.sendNotice('Emergency moderator powers have been granted to ' + user,from,purple); cb.sendNotice('You have been granted emergency moderator powers by ' + from,user,purple); } else { cb.sendNotice(user + ' has already been granted emergency moderator powers.',from,purple); } } else if(ar == 'remove') { if(cbjs.arrayContains(eModArray,user)) { cbjs.arrayRemove(eModArray,user); cb.sendNotice('Emergency moderator powers have been removed from ' + user,from,purple); cb.sendNotice('Your emergency moderator powers have been removed by ' + from,user,purple); } else { cb.sendNotice(user + ' has not been granted emergency moderator powers.',from,purple); } } else { cb.sendNotice(ar + ' is not a valid option for /emod. Type /ubhelp emod to see how to use /emod.',from,purple); } } function help(option,from) { var valid = 0; if(option == null){option = '';} switch(option) { case '': { valid = 1; cb.sendNotice ( 'Ultra Bot Help Menu' ,from,purple ); cb.sendNotice ( 'Type /ubhelp x, where x is one of the following choices, for more detailed information.' + '\nEx: /ubhelp commands' ,from ); cb.sendNotice ( '' ,from,purple ); cb.sendNotice ( 'commands\n' + 'dicklist\n' + 'nicelist\n' + 'about' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'commands': { valid = 1; cb.sendNotice ('Ultra Bot Command List' ,from,purple ); cb.sendNotice ( 'Type /ubhelp x, where x is one of the following commands, for more detailed information.' + '\nEx: /ubhelp silencelevel' ,from ); cb.sendNotice ( '' ,from,purple ); cb.sendNotice ( '/silencelevel' + '\n/graphiclevel' + '\n/silence' + '\n/unsilence' + '\n/starttimer' + '\n/addtime' + '\n/timeleft' + '\n/whisper' + '\n/mod' + '\n/reply' + '\n/ignore' + '\n/unignore' + '\n/ignorelevel' + '\n/emod' + '\n/addnice' + '\n/removenice' + '\n/leaderboard' + '\n/showtimer' + '\n/squirt' + '\n/call' + //'\n/alltipper' + '\n/loonatics' + '\n/loonatic_package' + '\n/supersale' + '\n/change_email_address' + '\n/kingspam' + '\n/notifierspam' + '\n/notifier2spam' + '\n/setcumcount' + '\n/setsquirtcount' + '\n/cumcount' + '\n/squirtcount' + '\n/showcumcount' + '\n/showsquirtcount' + '\n/callto' + '\n/toy' + '\n/ssi' + '\n/ubhelp' ,from ); if(from == cb.room_slug) { cb.sendNotice('/supersalelist',from) } cb.sendNotice ( '' ,from,purple ); break; } case 'dicklist': { valid = 1; cb.sendNotice ('The Chaturbate Dick(less) List' ,from,purple ); cb.sendNotice ( 'Sometimes, users are real dicks in chat. ' + 'They make rude comments about the hosts\' appearances, pick fights with other users, and do various other things that warrant calling them dicks. ' + 'As a room host, I would very much like to be able to silence those dicks before they ever get the chance to be dicks in my room, ' + 'and I am quite certain that the other hosts would like to be able to do that as well.' + 'With that in mind, I created the Chaturbate dick(less) List.' + '\nWhen a user does something that qualifies him as being a dick, take a screenshot before he is silenced or banned. ' + 'Save the screenshot and upload it to your Chaturbate profile page. ' + 'Once it is uploaded, either post a message on the Ultra Bot page in the chaturbate.com/bots section including your username, ' + 'so I can find the screenshot, and the name of the user you would like to have added to the Chaturbate Dick(less) List, ' + 'or send a Tweet @brit_and_justin with the information. ' + 'I will check the screenshot, to verify that you have found a real dick, and then add him to the Chaturbate Dick(less) List. ' + 'Users on that list will be unable to send messages in any rooms that are running Ultra Bot! ' + 'The more rooms that are running Ultra Bot, the more effective this list will become, so tell everyone to use it!' + '\nIf you would like to see the current Chaturbate Dick(less) List, ' + 'I post the names of the users and the screenshots of the evidence on the Chaturbate Dick(less) Blog at http://britandjustin.tumblr.com/.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'nicelist': { cb.sendNotice ('The Nice List' ,from,purple ); cb.sendNotice ( 'Sometimes, there are users whose comments are desirable, but they either do not have tokens or do not tip frequently. ' + 'When rooms get rowdy, hosts and mods are forced to do things like silence users without tokens or who have not tipped and those groups often includes the users whose comments hosts would like to see. ' + 'To fix this problem, hosts and mods can add users to the Nice List. ' + 'Users who are on the nice list can send messages regardless of the global silence setting.' ,from ); cb.sendNotice ( '' ,from,purple ); valid = 1; break; } case 'about': { valid = 1; cb.sendNotice ('About Ultra Bot' ,from,purple ); cb.sendNotice ( 'Ultra Bot tweaked for Loona was written by Justin of the Chaturbate couple britney_and_justin and modified by MasterofDisaster433 for Loona.' + '\nComments, suggestions, requests, and bug reports can be communicated by either tweeting @brit_and_justin, ' + 'or by posting comments on Ultra Bot\'s page at chaturbate.com/bots.' + '\nThe purpose of Ultra Bot is to make the lives of hosts and mods as easy as possible. ' + 'It adds popular features such as King Tipper, Leader Board, and Notifier, ' + 'grants quite a bit of power to moderators, and allows private messages to be sent in the main chat window.' + '\nIt also has two new features called the "Dick List" and the "Nice List". ' + 'See the help sections of those two features for more information on them!' + '\nBe on the lookout for Ultra App!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'silencelevel': { valid = 1; cb.sendNotice ('/silencelevel Help' ,from,purple ); cb.sendNotice ( '/silencelevel is a command that is usable by moderators and room hosts.' + '\nThe syntax for using silencelevel is "/silencelevel x", where x is a number between 0 and 4.' + '\nSetting the Silence Level to 0 will grant voice privileges to all users, ' + 'setting it to 1 will revoke voice privileges from users without tokens, ' + 'setting it to 2 will revoke voice privileges from users who have not tipped, ' + 'setting it to 3 will revoke voice privileges from users who have not tipped at least 10 tokens,' + 'and setting it to 4 will revoke voice privileges from users who have not tipped and have no tokens.' + //add by MasterofDisaster433 '\nThe default setting for /silencelevel is 0.' + '\nRoom hosts, moderators, and fan club members are unaffected by the Silence Level.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'graphiclevel': { valid = 1; cb.sendNotice ('/graphiclevel Help' ,from,purple ); cb.sendNotice ( '/graphiclevel is a command that is usable by moderators and room hosts.' + '\nThe syntax for using graphiclevel is "/graphiclevel x", where x is a number between 0 and 3.' + '\nSetting the Graphic Level to 0 will grant graphic usage privileges to all users, ' + 'setting it to 1 will revoke graphic usage privileges from users without tokens, ' + 'setting it to 2 will revoke graphic usage privileges from users who have not tipped, ' + 'and setting it to 3 will revoke graphic usage privileges from users who have not tipped at least 10 tokens,' + 'and setting it to 4 will revoke graphic usage privileges from users who have not tipped and have no tokens.' + //add by MasterofDisaster433 '\nThe default setting for /graphiclevel is 0.' + '\nRoom hosts, moderators, and fan club members are unaffected by the Graphic Level.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'silence': { valid = 1; cb.sendNotice ('/silence Help' ,from,purple ); cb.sendNotice ( '/silence is a command that is usable by moderators and room hosts.' + '\nThe syntax for using silence is "/silence x", where x is the username of the user you want to silence.' + '\nThe effect of /silence is the same as Chaturbate\'s silence feature, ' + 'except that it lasts for the duration of the current session instead of for six hours.' + '\nThe effect of /silence can be reversed by using the command /unsilence.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'unsilence': { valid = 1; cb.sendNotice ('/unsilence Help' ,from,purple ); cb.sendNotice ( '/unsilence is a command that is usable by moderators and room hosts.' + '\nThe syntax for using unsilence is "/unsilence x", where x is the username of the user you want to unsilence.' + '\nunsilence simply grants voice privileges back to a user who was previously silenced.' + '\nNOTE: /unsilence WILL NOT undo the effect of Chaturbate\'s silence feature!' + '\n/unsilence WILL ONLY reverse the effect of /silence!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'starttimer': { valid = 1; cb.sendNotice ('/starttimer Help' ,from,purple ); cb.sendNotice ( '/starttimer is a command that is usable by moderators and room hosts.' + '\nThe syntax for using starttimer is "/starttimer x", where x is the desired duration of the timer in minutes.' + '\n/starttimer will accept whole numbers only.' + '\nThe timer will make announcements at five minutes remaining and at one minute remaining.' + '\n/addtime can be used to add time to a currently running timer.' + '\n/timeleft can be used to display the amount of time remaining on the timer.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'addtime': { valid = 1; cb.sendNotice ('/addtime Help' ,from,purple ); cb.sendNotice ( '/addtime is a command that is usable by moderators and room hosts.' + '\nThe syntax for using addtime is "/addtime x", where x is the amount of time you want to add in minutes.' + '\n/addtime will accept whole numbers only.' + '\nSee the help section for starttimer for more information on timers.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'timeleft': { valid = 1; cb.sendNotice ('/timeleft Help' ,from,purple ); cb.sendNotice ( '/timeleft is a command that is usable by everyone.' + '\nThe syntax for using timeleft is /timeleft' + '\n/timeleft will display the amount of time left on the timer in the format 00:00:00' + '\nSee the help section for starttimer for more information on timers.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'whisper': { valid = 1; cb.sendNotice ('/whisper Help' ,from,purple ); cb.sendNotice ( '/whisper is a command that is usable by everyone.' + '\nThe syntax for using whisper is "/whisper x y", where x is the username of the user you want to send a whisper and y is the message you want to send.' + '\n/whisper, /w, /tell, /t, and /pm are all available commands that will send a whisper.' + '\nA whisper is a private message that will be sent in the main chat window.' + '\nOther related commands are /reply, /ignore, /unignore, and /ignorelevel.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'mod': { valid = 1; cb.sendNotice ('/mod Help' ,from,purple ); cb.sendNotice ( '/mod is a command that is usable only by the moderators and the room host.' + '\nThe syntax for using mod is "/mod x", where x is the message you want to send.' + '\nA mod is a private message that will be sent in the main chat window only to all moderators and the room host.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'reply': { valid = 1; cb.sendNotice ('/reply Help' ,from,purple ); cb.sendNotice ( '/reply is a command that is usable by everyone.' + '\nThe syntax for using whisper is "/reply x", where x is message that you want to whisper to the user who most recently sent a whisper to you.' + '\n/reply and /r are available commands that will send a whisper in reply.' + '\nSee the help section for whisper for more information on whispers.' + '\nOther related commands are /whisper, /ignore, /unignore, and /ignorelevel.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'ignore': { valid = 1; cb.sendNotice ('/ignore Help' ,from,purple ); cb.sendNotice ( '/ignore is a command that is usable by everyone.' + '\nThe syntax for using ignore is "/ignore x", where x is the user from whom you wish to ignore whispers.' + '\nIgnoring a user will prevent him from sending you whispers, but it will not prevent him from talking normally in chat.' + '\n/unignore will reverse the effect of /ignore.' + '\nSee the help section for whisper for more information on whispers.' + '\nOther related commands are /whisper, /reply, /unignore, and /ignorelevel.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'unignore': { valid = 1; cb.sendNotice ('/unignore Help' ,from,purple ); cb.sendNotice ( '/unignore is a command that is usable by everyone.' + '\nThe syntax for using unignore is "/unignore x", where x is the user you wish to remove from your ignore list.' + '\nSee the help section for ignore for more information on ignoring users.' + '\nSee the help section for whisper for more information on whispers.' + '\nOther related commands are /whisper, /reply, /ignore, and /ignorelevel.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'ingorelevel': { valid = 1; cb.sendNotice ('/ignorelevel Help' ,from,purple ); cb.sendNotice ( '/ignorelevel is a command that is usable by everyone.' + '\nThe syntax for using ignorelevel is "/ignorelevel x", where x is a number between 0 and 4.' + //edited by MasterofDisaster433 '\nSetting the Ignore Level to 0 will allow all users to send you whispers, ' + 'setting it to 1 will only allow users with tokens to send you whispers, ' + 'setting it to 2 will only allow users who have tipped to send you whispers, ' + 'setting it to 3 will only allow users who have tipped at least 10 tokens to send you whispers,' + 'and setting it to 4 will allow users with tokens or who have tipped to send you whispers.' + //add by MasterofDisaster433 '\nThe default setting for /ignorelevel is 0.' + '\nSee the help section for whisper for more information on whispers' + '\nOther related commands are /whisper, /reply, /ignore, and /unignore.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'emod': { valid = 1; cb.sendNotice ('/emod Help' ,from,purple ); cb.sendNotice ( '/emod is a command that is usable by moderators and room hosts.' + '\nThe syntax for using emod is "/emod x y", where x is either "add" or "remove" and y is the username of the user you want to either grant or revoke emergency moderator powers.' + '\n/emod allows moderators to quickly grant other users access to moderator-only commands in the event that he is having difficulty controlling the room by himself.' + '\nEmergency moderators have access to all moderator-only commands with the exceptions of /emod, /addnice, and /removenice.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'addnice': { valid = 1; cb.sendNotice ('/addnice Help' ,from,purple ); cb.sendNotice ( '/addnice is a command that is usable by moderators and room hosts.' + '\nThe syntax for using addnice is "/addnice x", where x is the username of the user you want to add to the nice list.' + '\nAdding a user to the nice list guarantees that user voice and graphic usage privileges regardless of the silence, graphic, and ignore level settings. ' + 'Using /silence or /ignore will still silence or ignore a user on the nice list.' + '\nUsers can be removed from the nice list by using the command /removenice.' + '\nSee the help sections for silencelevel, graphiclevel, and ignorelevel for more information on the global settings or the help section for nicelist for more information on the nice list.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'removenice': { valid = 1; cb.sendNotice ('/removenice Help' ,from,purple ); cb.sendNotice ( '/removenice is a command that is usable by moderators and room hosts.' + '\nThe syntax for using removenice is "/removenice x", where x is the username of the user you want to remove from the nice list.' + '\nSee the help section for nicelist for more information on the nice list.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'ubhelp': { valid = 1; cb.sendNotice ('/ubhelp Help' ,from,purple ); cb.sendNotice ( '/ubhelp is a command that is usable by everyone.' + '\nThe syntax for using ubhelp is "/ubhelp x", where x is the subsection of the help menu that you want to access.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'leaderboard': { valid = 1; cb.sendNotice ('/leaderboard Help' ,from,purple ); cb.sendNotice ( '/leaderboard is a command that is usable by everyone.' + '\nThe syntax for using leaderboard is "/leaderboard".' + '\n/leaderboard shows the top x tippers of the current session. x is chosen from leaderNumber setting' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'showtime': //added by MasterofDisaster433 { valid = 1; cb.sendNotice ('/showtime Help' ,from,purple ); cb.sendNotice ( '/showtime is a command that is usable by everyone.' + '\nThe syntax for using showtime is "/showtime".' + '\n/showtime shows the the online time of the current session.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'squirt': //add by masterofdisaster433 { valid = 1; cb.sendNotice ('/squirt Help' ,from,purple ); cb.sendNotice ( '/squirt is a command that is only avaible to room host and mods.' + '\nThe syntax for using squirt is /squirt x, where x is either on or off. ' + '\n/squirt starts/ends the squirt show room messages!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'call': //add by masterofdisaster433 { valid = 1; cb.sendNotice ('/call Help' ,from,purple ); cb.sendNotice ( '/call is a command that is only avaible to room host and mods.' + '\nThe syntax for using squirt is /call x, where x is either on or off. ' + '\n/call starts/ends the Phone call show room messages!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } /**case 'alltipper': //added by MasterofDisaster433 { valid = 1; cb.sendNotice ('/alltipper Help' ,from,purple ); cb.sendNotice ( '/alltipper is a command that is usable by everyone.' + '\nThe syntax for using alltipper is "/alltipper".' + '\n/alltipper shows all tippers of the current session from the highest to the lowest' ,from ); cb.sendNotice ( '' ,from,purple ); break; } **/ case 'loonatics': //added by MasterofDisaster433 { valid = 1; cb.sendNotice ('/loonatics Help' ,from,purple ); cb.sendNotice ( '/loonatics is a command that is usable by everyone.' + '\nThe syntax for using loonatics is "/loonatics".' + '\n/loonatics shows all loonatics of the current session from the highest to the lowest' ,from ); if(from == cb.room_slug) { cb.sendNotice ( 'You are a broadcaster! /loonatics shows all the email addresses of the loonatics,' + '\n who have send you their email address!' ,from ); } cb.sendNotice ( '' ,from,purple ); break; } case 'loonatic_package': //added by MasterofDisaster433 { valid = 1; cb.sendNotice ('/loonatic_package Help' ,from,purple ); cb.sendNotice ( '/loonatic_package is a command that is usable by every loonatic.' + '\nThe syntax for using loonatic_package is "/loonatic_package".' + '\nThe shortcut command syntax us "/lp".' + '\n/loonatic_package saves your email for the current session and makes it visible to the broadcaster!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'supersale': //added by MasterofDisaster433 { valid = 1; cb.sendNotice ('/supersale Help' ,from,purple ); cb.sendNotice ( '/supersale is a command that is usable by everyone, who has tipped over 100 tokens.' + '\nThe syntax for using supersale is "/supersale".' + '\nThe shortcut command syntax is "/ss".' + '\n/supersale saves your email for the current session and makes it visible to the broadcaster!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'supersalelist': //added by MasterofDisaster433 { if(from == cb.room_slug) { valid = 1; cb.sendNotice ('/supersalelist Help' ,from,purple ); cb.sendNotice ( '/supersalelist is a command that is usable only for the broadcaster.' + '\nThe syntax for using supersalelist is "/supersalelist".' + '\nThe shortcut command syntax is "/ssl".' + '\n/supersalelist shows a leaderboard with all tipper, who have tipped atleast 100 tokens with their email addresses!' ,from ); cb.sendNotice ( '' ,from,purple ); } break; } case 'change_email_address': //added by MasterofDisaster433 { valid = 1; cb.sendNotice ('/change_email_address Help' ,from,purple ); cb.sendNotice ( '/change_email_address is a command that is usable by everyone, who has tipped over 100 tokens.' + '\nThe syntax for using change_email_address is "/change_email_address".' + '\nThe shortcut command syntax is "/cea".' + '\n/change_email_address changes your email for the current session and makes it visible to the broadcaster!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'kingspam': { valid = 1; cb.sendNotice ('/kingspam Help' ,from,purple ); cb.sendNotice ( '/kingspam is a command that is usable by moderators and room hosts.' + '\nThe syntax for using kingspam is /kingspam x, where x is either on or off. ' + 'Using this command toggles the spamming of the message "Tip x to become the new King!"' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'notifierspam': { valid = 1; cb.sendNotice ('/notifierspam Help' ,from,purple ); cb.sendNotice ( '/notifierspam is a command that is usable by moderators and room hosts.' + '\nThe syntax for using notifierspam is /notifierspam x, where x is either on or off. ' + 'Using this command toggles the spamming of the periodic messages defined by the host.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'notifier2spam': { valid = 1; cb.sendNotice ('/notifierspam Help' ,from,purple ); cb.sendNotice ( '/notifier2spam is a command that is usable by moderators and room hosts.' + '\nThe syntax for using notifier2spam is /notifier2spam x, where x is either on or off. ' + 'Using this command toggles the spamming of the periodic messages defined by the host.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'leaderboardspam': { valid = 1; cb.sendNotice ('/leaderboardspam Help' ,from,purple ); cb.sendNotice ( '/leaderboardspam is a command that is usable by moderators and room hosts.' + '\nThe syntax for using leaderboardspam is /leaderboardspam x, where x is either on or off. ' + 'Using this command toggles the spamming of the top y tippers. y is chosen from leaderNumber setting' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'setcumcount': { valid = 1; cb.sendNotice ('/setcumcount Help' ,from,purple ); cb.sendNotice ( '/setcumcount is a command that is usable by moderators and room hosts.' + '\nThe syntax for using setcumcount is /setcumcount message.' + '\nThis way the cumcount message is set to message.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'setsquirtcount': { valid = 1; cb.sendNotice ('/setsquirtcount Help' ,from,purple ); cb.sendNotice ( '/setsquirtcount is a command that is usable by moderators and room hosts.' + '\nThe syntax for using setsquirtcount is /setsquirtcount message.' + '\nThis way the squirtcount message is set to message.' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'cumcount': { valid = 1; cb.sendNotice ('/cumcount Help' ,from,purple ); cb.sendNotice ( '/cumcount is a command that is usable by moderators and room hosts.' + '\nThe syntax for using cumcount is /cumcount (shortcut /cc).' + '\nThis way the cum count gets raised by one and displayed in chat!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'squirtcount': { valid = 1; cb.sendNotice ('/squirtcount Help' ,from,purple ); cb.sendNotice ( '/squirtcount is a command that is usable by moderators and room hosts.' + '\nThe syntax for using squirtcount is /squirtcount (shortcut /sqc).' + '\nThis way the cum count and the squirt count get raised by one and displayed in chat!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'showcumcount': { valid = 1; cb.sendNotice ('/showcumcount Help' ,from,purple ); cb.sendNotice ( '/showcumcount is a command that is usable by moderators and room hosts.' + '\nThe syntax for using showcumcount is /showcumcount (shortcut /scc).' + '\nThis way the cum count gets displayed in chat!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'showsquirtcount': { valid = 1; cb.sendNotice ('/showsquirtcount Help' ,from,purple ); cb.sendNotice ( '/showsquirtcount is a command that is usable by moderators and room hosts.' + '\nThe syntax for using showsquirtcount is /showsquirtcount (shortcut /ssqc).' + '\nThis way the cum and squirt count gets displayed in chat!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'callto': { valid = 1; cb.sendNotice ('/callto Help' ,from,purple ); cb.sendNotice ( '/callto is a command that is usable by moderators and room hosts.' + '\nThe syntax for using callto is /call x, where x is the called person. ' + '\nUsing this command changes the spam messages of the call messages to match the called person!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'toy': { valid = 1; cb.sendNotice ('/toy Help' ,from,purple ); cb.sendNotice ( '/toy is a command that is usable by moderators and room hosts.' + '\nThe syntax for using toy is /toy x, where x is the toy that is used. Current choices are panties,bullet,pink_vibrator,G-vibe,rabbit,lush. ' + '\nUsing this command changes the spam messages of notifier2 to match the used toy!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } case 'ssi': { valid = 1; cb.sendNotice ('/ssi Help' ,from,purple ); cb.sendNotice ( '/ssi is a command that is usable by moderators and room hosts.' + '\nThe syntax for using ssi is /ssi ' + '\nUsing this command spams the super sale info messages in the room!' ,from ); cb.sendNotice ( '' ,from,purple ); break; } } if(valid == 0) { cb.sendNotice(option + ' is not a valid subsection of the help menu. Type /ubhelp to access the main help menu.',from,purple); } } function showtimeSpam() //added by masterofdisaster433 { cb.setTimeout(showtimeSpamTimer,cb.settings.ShowTimerSpam*60000); } function showtimeSpamTimer() //added by masterofdisaster433 { if(showtimerSpam == 1) { var timeofshow = Show_time(); cb.sendNotice('Loona is ' + timeofshow + ' online! :clock ','','#FFFFFF','#FF69B4','bold'); showtimeSpam(); } } function kingSpam() { cb.setTimeout(kingSpamTimer,cb.settings.kingTimer*60000); } function kingSpamTimer() { if(kingTip < parseInt(cb.settings.kingMin)) { var supplant = cb.settings.kingMin; } else { var supplant = kingTip + 1; } if(kingTipperSpam == 1) { cb.sendNotice('Tip ' + supplant + ' to become the new King!','',purple); kingSpam(); } } /**function swap(x,y) // added by MasterofDisaster433 { // var temp; // temp = y; // y = x; // x = temp; // // return [x,y]; // } **/ // function partition(tipperArray, lo, hi) // { // var piv; // var i; // piv = parseInt(tipperArray[hi][1]); // i = lo; // for(var j = lo;j < hi;j++) // { // if(parseInt(tipperArray[j][1]) <= piv) // // { // var temp1; // temp1 = tipperArray[j]; // tipperArray[j] = tipperArray[i]; // tipperArray[i] = temp1; // i++; // } // } // var temp2; // temp2 = tipperArray[j]; // tipperArray[j] = tipperArray[i]; // tipperArray[i] = temp2; // return i; // } // function quicksort(tipperArray,l,h) // { // var p; // if(l < h) // { // p = partition(tipperArray,l,h); // quicksort(tipperArray,l,p-1); // quicksort(tipperArray,p+1,h); // } // } function tippernumber() { for (i=0;i < tipperArray.length;i++) { if(i > (tipperArray.length-1)) {return i;} if(parseInt(tipperArray[i][1]) == 0) {return i;} } } function leaderSpam() { cb.setTimeout(leaderSpamTimer,cb.settings.leaderTimer*60000); } function leaderSpamTimer() //edited by MasterofDisaster433 { // if(leaderboardSpam == 1) // { quicksort(tipperArray,0,tipperArray.length-1); tipperArray.reverse(); cb.sendNotice('Leaderboard!','',purple); var Leaderboard = ''; for(var i=0; i < leaderNumber; i++) { if(i > (tipperArray.length-1)) {break;} if(parseInt(tipperArray[i][1]) == 0) {break;} if(parseInt(tipperArray[i][1]) > 999) { Leaderboard += '\n' + String(i+1)+'. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1] + ' :heart2'; } else { Leaderboard += '\n' + String(i+1)+'. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1]; } } cb.sendNotice ( Leaderboard ); cb.sendNotice ( '\n' + tippernumber() + ' tippers today! :thankstoalltippers ' ,'','#ffffff','#000000','bold'); cb.sendNotice ( '' ,'',purple); leaderSpam(); } } function showLeaderBoard(from,shownumber,mode) //edited by MasterofDisaster433 { if(cb.settings.leaderBoard == 'Yes') { quicksort(tipperArray,0,tipperArray.length-1); tipperArray.reverse(); if(mode == 'loonatics') { var Leaderboard = ''; Leaderboard += '\nLOONAtics Leaderboard!' if(from == cb.room_slug) { for(var i=0; i < shownumber ;i++) { if(i > (tipperArray.length-1)) {break;} if(parseInt(tipperArray[i][1]) < 999) {break;} Leaderboard += '\n' + String(i+1)+'. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1] + ' ' + tipperArray[i][2] +' :heart2'; } } else { var Leaderboard = ''; for(var i=0; i < shownumber ;i++) { if(i > (tipperArray.length-1)) {break;} if(parseInt(tipperArray[i][1]) < 999) {break;} Leaderboard += '\n' + String(i+1)+'. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1] + ' :heart2'; } } Leaderboard += '\n' + i + ' LOONAtics today! ' + ' :flowergift' cb.sendNotice ( Leaderboard ,from); cb.sendNotice ( '' ,from,purple); } else if(mode == 'supersalelist' && from == cb.room_slug) { cb.sendNotice ( 'Leaderboard with email address!' ,from,purple ); var Leaderboard = ''; for(var i=0; i < shownumber ;i++) { if(i > (tipperArray.length-1)) {break;} if(parseInt(tipperArray[i][1]) < 100) {break;} if(parseInt(tipperArray[i][1]) > 999) { Leaderboard += '\n' + String(i+1) + '. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1] + ' ' + tipperArray[i][2] + ' :heart2'; } else { Leaderboard += '\n' + String(i+1) + '. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1] + ' ' + tipperArray[i][2]; } } Leaderboard += '\n' + i + ' 100+ tokens tippers today!'; cb.sendNotice ( Leaderboard ,from); cb.sendNotice ( '' ,from,purple); } else { cb.sendNotice ( 'Leaderboard!' ,from,purple ); var Leaderboard = ''; for(var i=0; i < shownumber ;i++) { if(i > (tipperArray.length-1)) {break;} if(parseInt(tipperArray[i][1]) == 0) {break;} if(parseInt(tipperArray[i][1]) > 999) { Leaderboard += '\n' + String(i+1) + '. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1] + ' :heart2'; } else { Leaderboard += '\n' + String(i+1) + '. ' + tipperArray[i][0] + ' : ' + tipperArray[i][1]; } } Leaderboard += '\n' + tippernumber() + ' tippers today! :thankstoalltippers '; cb.sendNotice ( Leaderboard ,from); cb.sendNotice ( '' ,from,purple); } } else { cb.sendNotice('The room host has decided not to use the Leaderboard feature.',from,purple); } } function nice(user,mod,ar) { if(ar == 'a') { if(!cbjs.arrayContains(niceArray,user)) { niceArrayPopulate(user); cb.sendNotice('You have added ' + user + ' to the nice list.', mod, purple); cb.sendNotice(mod + ' has added you to the nice list. You will be able to chat and use graphcs regardless of the global room settings. Thank you for being nice!',user,purple); } else { cb.sendNotice(user + ' is already on the nice list.', mod, purple); } } else if(ar == 'r') { if(cbjs.arrayContains(niceArray,user)) { cbjs.arrayRemove(niceArray,user); cb.sendNotice('You have removed ' + user + ' from the nice list.', mod, purple); cb.sendNotice(mod + ' has removed you from the nice list.', user, purple); } else { cb.sendNotice(user + ' is not on the nice list.', mod, purple); } } } function kingSpamToggle(option, mod) { if(option == 'on') { if(kingTipperSpam == 1) { cb.sendNotice('The King Tipper spam is already turned on.',mod,purple); } else { kingTipperSpam == 1; cb.sendNotice('You have turned on King Tipper spam.',mod,purple); } } else if(option == 'off') { if(kingTipperSpam == 0) { cb.sendNotice('The King Tipper spam is already turned off.',mod,purple); } else { kingTipperSpam == 0; cb.sendNotice('You have turned off the King Tipper spam.',mod,purple); } } else if(option != null) { cb.sendNotice(option + ' is not a valid option for /kingspam.\nType /ubhelp kingspam to see how to use /kingspam.',mod,purple); } else if(option == null) { cb.sendNotice('You did not enter a valid option for /kingspam.\nType /ubhelp kingspam to see how to use /kingspam.',mod,purple); } } function leaderboardSpamToggle(option, mod) { if(option == 'on') { if(leaderboardSpam == 1) { cb.sendNotice('The Leaderboard spam is already turned on.',mod,purple); } else { leaderboardSpam == 1; cb.sendNotice('You have turned on the Leaderboard spam.',mod,purple); } } else if(option == 'off') { if(leaderboardSpam == 0) { cb.sendNotice('The Leaderboard spam is already turned off.',mod,purple); } else { leaderboardSpam == 0; cb.sendNotice('You have turned off the Leaderboard spam.',mod,purple); } } else if(option != null) { cb.sendNotice(option + ' is not a valid option for /leaderboardspam.\nType /ubhelp leaderboardspam to see how to use /leaderboardspam.',mod,purple); } else if(option == null) { cb.sendNotice('You did not enter a valid option for /leaderboardspam.\nType /ubhelp leaderboardspam to see how to use /leaderboardspam.',mod,purple); } } function colorChecker() { var colorString = '0123456789abcdefABCDEF'; var valid = true; var color = "C287C2"; if(cb.settings.color != null) { color = cb.settings.color; } for(var i = 0; i < 6; i++) { if(colorString.indexOf(color.charAt(i)) == -1) { valid = false; } if(valid == false) { purple = '#C287C2'; cb.sendNotice(color + ' is not a valid option for the highlight color. Hex color codes use numbers and letters only.\nUse www.color-hex.com to find the code for the color you want.\nDo not include the #.\nReverting to default color.',cb.room_slug,purple); break; } } if(valid) { purple = '#' + cb.settings.color; } } function CCtrafo(CumCount) //added by masterofdisaster433 { var cumnumber = ''; s = CumCount % 10; //last digit t = CumCount % 100; // two last digits if (t > 9 && t < 21) { cumnumber = CumCount + 'th'; } else { switch(s) { case 0 : { cumnumber = CumCount + 'th'; break; } case 1 : { cumnumber = CumCount + 'st'; break; } case 2 : { cumnumber = CumCount + 'nd'; break; } case 3 : { cumnumber = CumCount + 'rd'; break; } default: cumnumber = CumCount + 'th'; break; } } return cumnumber; } function hashtrafo(message) { var flag = 0; var m = ""; for(var j = 0; j < message.length; j++) { if(message[j] == '#') { var temp = ""; if (flag == 0) { temp = CCtrafo(cumcount); flag = 1; m += temp; } else if(flag == 1) { temp = CCtrafo(squirtcount); flag = 2; m += temp; } else { m += message[j]; } } else { m += message[j]; } } return m; } } } //onMessage { cb.onMessage(function (msg) { //turn the message into an array var message = msg['m'].split(' '); //0 = invalid command, 1 = valid command var cmd = 0; //1 = user is already silenced var silenced = 0; var symbolString = '~`!@#$%^&*()_-+={[}]|\\:;"\'<,>.?/'; //check to see if the user is attempting to use a command if(message[0].charAt(0) == '/') { //don't print this message to chat msg['X-Spam'] = true; switch(message[0]) { case '/silencelevel': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { setSilenceLevel(message[1], msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/graphiclevel': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { setGraphicLevel(message[1], msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/silence': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { silence(message[1], msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/unsilence': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { unsilence(message[1], msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/starttimer': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { startTimer(message[1], msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/addtime': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { addTime(message[1], msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/timeleft': { //user entered a proper command cmd = 1; timeLeft(msg['user']); break; } case '/whisper': case '/w': case '/tell': case '/t': case '/pm': { //user entered a proper command cmd = 1; //check to see if the whisperer is a mod/host if(msg['is_mod'] || msg['in_fanclub'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user']) || cbjs.arrayContains(niceArray,msg['user'])) { sendWhisper(message,msg['user'],true,msg['has_tokens']); } else { sendWhisper(message,msg['user'],false,msg['has_tokens']); } msg['background'] = purple; break; } case '/mod': //added by masterofdisaster433 { //user entered a proper command cmd = 1; //check to see if the whisperer is a mod/host if(msg['is_mod'] || msg['user'] == cb.room_slug) { sendModMes(message,msg['user']); } else { cb.sendNotice('You are not a Moderator or the room host!',msg['user']); } break; } case '/reply': case '/r': { //user entered a proper command cmd = 1; sendReply(message, msg['user']); msg['background'] = purple; break; } case '/ignorelevel': { //user entered a proper command cmd = 1; setIgnoreLevel(message[1],msg['user']); break; } case '/ignore': { //user entered a proper command cmd = 1; ignoreUser(message[1],msg['user']); break; } case '/unignore': { //user entered a proper command cmd = 1; unignoreUser(message[1],msg['user']); break; } case '/emod': { //user entered a proper command cmd = 1; if(msg['is_mod'] || msg['user'] == cb.room_slug) { eMod(message[1],message[2],msg['user']); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/addnice': { //user entered a proper command cmd = 1; if(msg['is_mod'] || msg['user'] == cb.room_slug) { nice(message[1],msg['user'],'a'); } break; } case '/removenice': { //user entered a proper command cmd = 1; if(msg['is_mod'] || msg['user'] == cb.room_slug) { nice(message[1],msg['user'],'r'); } break; } case '/ubhelp': { //user entered a proper command cmd = 1; help(message[1],msg['user']); break; } case '/leaderboard': { //user entered a proper command cmd = 1; showLeaderBoard(msg['user'],leaderNumber,mode = 'normal'); break; } case '/st': //added by masterofdisaster433 case '/showtime': { //user entered a proper command cmd = 1; if(msg['user'] == cb.room_slug) { cb.sendNotice('You are ' + Show_time() + 'online! :clock ',msg['user']); } else { var time_of_show = Show_time(); cb.sendNotice('This room is ' + time_of_show + 'online! :clock ',msg['user']); } break; } /**case '/alltipper': //added by masterofdisaster433 { //user entered a proper command cmd = 1; if(msg['is_mod'] || msg['user'] == cb.room_slug) { showLeaderBoard(msg['user'],tipperArray.length,mode = 'normal'); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } **/ case '/loonatics': //added by masterofdisaster433 { //user entered a proper command cmd = 1; showLeaderBoard(msg['user'],tipperArray.length,mode = 'loonatics'); break; } case '/lp' : //added by masterofdisaster433 case '/loonatic_package': { //user entered a proper command cmd = 1; if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0 && !msg['has_tokens']) { cb.sendNotice('You can not use this!',msg['user'],purple); break; } if(objList[msg['user']].loonatic === true) { objList[msg['user']].GetLoonaticEmail(message[1],msg['user']); } else { cb.sendNotice('You are not a LOONAtic!',msg['user'],"#FF69B4"); } break; } case '/cea' : //added by masterofdisaster433 case '/change_email_address': { //user entered a proper command cmd = 1; if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0 && !msg['has_tokens']) { cb.sendNotice('You can not use this!',msg['user'],purple); break; } if(objList[msg['user']].loonatic === true || objList[msg['user']].supersale === true) { tipperArray[findTipper(msg['user'])][2] = ''; if(objList[msg['user']].loonatic === true) { objList[msg['user']].GetLoonaticEmail(message[1],msg['user']); } else { objList[msg['user']].GetSupersaleEmail(message,msg['user']); } cb.sendNotice(msg['user'] + ' has changed his email address',cb.room_slug,purple); } else { cb.sendNotice('You can not use this!',msg['user'],purple); } break; } case '/ssl' : //added by masterofdisaster433 case '/supersalelist': { //user entered a proper command cmd = 1; if(msg['user'] == cb.room_slug) { showLeaderBoard(msg['user'],tipperArray.length,mode = 'supersalelist'); } else { cb.sendNotice('Only broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/ss' : //added by masterofdisaster433 case '/supersale': { //user entered a proper command cmd = 1; if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0 && !msg['has_tokens']) { cb.sendNotice('You can not use this!',msg['user'],purple); break; } if(objList[msg['user']].supersale === true) { objList[msg['user']].GetSupersaleEmail(message,msg['user']); } else { cb.sendNotice('You do not have tipped 100 tokens!',msg['user'],"#00ffff"); } break; } case '/kingspam': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { kingSpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/notifierspam': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { notifier.SpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/notifier2spam': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { notifier2.SpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/leaderboardspam': { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { leaderboardSpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/squirt': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { squirt.SpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/call': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { call.SpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/bondage': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { bondage.SpamToggle(message[1],msg['user']) } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/notifiermessage': //tweaked by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(message[1] == '' || message[1] == null) { cb.sendNotice('You must enter a new message for the notifier feature. If you want to disable the notifications, enter /notifierspam off.',msg['user'],purple) } else { notifierMessage1 = messagebuilder(message); cb.sendNotice('You have set the notifier spam message to: ' + notifierMessage,msg['user'],purple); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/setcumcount': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(message[1] == '' || message[1] == null) { cb.sendNotice('You must enter a new message for the cum count!',msg['user'],purple) } else { cumcountmessage = messagebuilder(message); cb.sendNotice('You have set the cum count message to: ' + cumcountmessage,msg['user'],purple); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/setsquirtcount': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(message[1] == '' || message[1] == null) { cb.sendNotice('You must enter a new message for the squirt count!',msg['user'],purple) } else { squirtcountmessage = messagebuilder(message); //full message cb.sendNotice('You have set the squirt count message to: ' + squirtcountmessage,msg['user'],purple); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/cumcount': case '/cc' : //tweaked by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(cumcountmessage == '' || cumcountmessage == null) { cb.sendNotice('You must enter a new message for the cumcount feature.',msg['user'],purple) } else { cumcount += 1 ; cb.sendNotice(CCtrafo(cumcount) + ' ' + cumcountmessage,'','#ffffff',"000000",'bold'); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/squirtcount': case '/sqc' : //tweaked by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(squirtcountmessage == '' || squirtcountmessage == null) { cb.sendNotice('You must enter a new message for the cumcount feature.',msg['user'],purple) } else { var squirtcountmessage1 = ''; cumcount += 1 ; squirtcount += 1; squirtcountmessage1 = hashtrafo(squirtcountmessage); cb.sendNotice(squirtcountmessage1,'','#ffffff',"000000",'bold'); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/showcumcount': case '/scc' : //tweaked by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(cumcountmessage == '' || cumcountmessage == null) { cb.sendNotice('You must enter a new message for the cumcount feature.',msg['user'],purple) } else { cb.sendNotice(CCtrafo(cumcount) + ' ' + cumcountmessage,'','#ffffff',"000000",'bold'); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/showsquirtcount': case '/ssqc' : //tweaked by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(cumcountmessage == '' || cumcountmessage == null) { cb.sendNotice('You must enter a new message for the cumcount feature.',msg['user'],purple) } else { var squirtcountmessage1 = ''; squirtcountmessage1 = hashtrafo(squirtcountmessage); cb.sendNotice(squirtcountmessage1,'','#ffffff',"000000",'bold'); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/ssi': //tweaked by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { cb.sendNotice('If you tipped 100 or more tokens today:' + '\nTo get my videos, please, type in public chat /supersale youremail.' + '\nFor example, /supersale bobsmith@email.com (short /ss bobsmith@email.com)' + '\nThe email address is only seen by Loona and no one else!' + '\nYou can leave a short comment behind your email address!' + '\nIf you need to change your email address type /change_email_address newemail (shortcut /cea)!' + '\nFor more information about the Supersale read the room notifications and her bio!' + '\nThe Supersale videos will be send to your email address at the end of the show or directly after the show!','',"#ffffff","#A5001A",'bold'); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/callto': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(message[1] == '' || message[1] == null) { cb.sendNotice('You must enter a new message for the notifier feature. If you want to disable the notifications, enter /call off.',msg['user'],purple) } else { callperson = messagebuilder(message); call.Message = [callperson + ' ' + cb.settings.callspamMessage1, cb.settings.callspamMessage2, cb.settings.callspamMessage3 + ' ' + callperson +"!", cb.settings.callspamMessage4, callperson + ' ' + cb.settings.callspamMessage5, cb.settings.callspamMessage6]; cb.sendNotice('You have set the called person to: ' + callperson, msg['user'],purple); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } case '/toy': //added by MasterofDisaster433 { //user entered a proper command cmd = 1; //permission check if(msg['is_mod'] || msg['user'] == cb.room_slug || cbjs.arrayContains(eModArray,msg['user'])) { if(message[1] == '' || message[1] == null) { cb.sendNotice('You must enter a new message for the notifier feature. If you want to disable the notifications, enter /call off.',msg['user'],purple) } else { var toymessage1 = ''; var toymessage2 = ''; var toymessage3 = ''; switch(message[1]) { case 'panties': { toymessage1 = 'Tip controlled panties toy active! '; toymessage2 = 'I have a custom bot vibrator in my panties! '; toymessage3 = 'My toy is hidden in my panties! Every tip vibrates it! '; } break; case 'bullet' : { toymessage1 = 'Custom bullet vibrator :bullet3 deep inside my pussy right on my G-spot! '; toymessage2 = "Charge my pussy! I'm wired now! "; toymessage3 = 'Custom tip controlled bullet active now! '; } case 'bigbullet' : { toymessage1 = 'Custom bullet vibrator :bullet3 deep inside my pussy right on my G-spot! '; toymessage2 = "Wireless pussy control! Activate The BOMB!"; toymessage3 = 'Custom tip controlled bullet active now! '; } break; case 'bullet_boytoy' : { toymessage1 = 'I ride my boytoy :boytoy1 while I have my custom bullet vibrator :bullet3 deep inside my pussy right on my G-spot! '; toymessage2 = "Charge my pussy! I'm wired now! "; toymessage3 = 'Custom tip controlled bullet active now while riding my boytoy :boytoy1 ! '; } break; case 'pink_vibrator': { toymessage1 = 'Tip controlled costum ribbed pink vibrator active now! '; toymessage2 = 'The pink ribbed vibrator stays especially good in my pussy! '; toymessage3 = "I'm cabled now! Charge my pussy! "; } break; case 'rosa_vibrator': { toymessage1 = 'Tip controlled costum ribbed rosa vibrator active now! '; toymessage2 = 'The rosa ribbed vibrator stays especially good in my pussy! '; toymessage3 = "Wireless orgasm fun! Make me cum now! "; } break; case 'g-vibe' : { toymessage1 = 'G-Vibe vibrator has a bend tip vibrating right on my G-spot! '; toymessage2 = 'Custom G-Vibe tip controlled vibrator active now! '; toymessage3 = "The G-vibe vibrator is connected via Wifi to my Notebook! So even if I'm further away every tip will hit me! "; } break; case 'rabbit' : { toymessage1 = 'Custom tip controlled Rabbit vibrator hits my pussy and my clit or asshole at once! '; toymessage2 = 'The Smurf in my pussy smurfs me now! Smurf me to an smurfgasm! '; toymessage3 = "The Rabbit is connected via Wifi to my Notebook! So even if I'm further away every tip will hit me! "; } break; case 'lush' : { toymessage1 = 'Lovense Lush vibrator hits my pussy deep inside! '; toymessage2 = 'Completely waterproof toy!'; toymessage3 = "The Lovense Lush is connected via Wifi to my Notebook! So even if I'm further away every tip will hit me! "; } break; default: cb.sendNotice('Unkown toy ! Please enter one of the following: panties, bullet, bigbullet, bullet_boytoy, pink_vibrator, rosa_vibrator, g-vibe,rabbit, lush! ' + message[1], msg['user'],purple); } notifier2.Message = [toymessage1 + cb.settings.spam2Message1, cb.settings.spam2Message2, toymessage2 + cb.settings.spam2Message3, cb.settings.spam2Message4, toymessage3 + cb.settings.spam2Message5, cb.settings.spam2Message6]; cb.sendNotice('You have set toy to: ' + message[1], msg['user'],purple); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.\nType "/ubhelp commands" to see a full list of the available commands.',msg['user'],purple); } break; } } //Level Up! command support if(message[0] == '/luhelp' || message[0] == '/levels') { cmd = 1; } //Ultra App command support if(message[0] == '/startshow' || message[0] == '/showtimeleft' || message[0] == '/printtime' || message[0] == '/addshowtime' || message[0] == '/adduser' || message[0] == '/changegoal' || message[0] == '/hide' || message[0] == '/unhide' || message[0] == '/selltickets' || message[0] == '/uacommands') { cmd = 1; } //the user entered an invalid command if(cmd == 0 && cb.settings.invalidToggle == 'Yes') { cb.sendNotice(message[0] + ' is not a command.\nType /ubhelp commands to see a full list of the available commands.',msg['user'],purple); } } //let dickArray do its thing if(cbjs.arrayContains(dickArray,msg['user'])) { msg['X-Spam'] = true; silenced = 1; cb.sendNotice('You are on the Chaturbate Dick(less) List and do not have voice privileges in this room. Either stop being an ass hole to people or fuck off and die in a fire.',msg['user'],purple); } //let silence do its thing if(cbjs.arrayContains(silenceArray,msg['user']) && silenced == 0) { msg['X-Spam'] = true; silenced = 1; cb.sendNotice('Your message was not sent because you have been silenced. Be nice and don\'t make demands.',msg['user'],purple); } //let silenceLevel do its thing if(silenceLevel > 0 && !msg['is_mod'] && msg['user'] != cb.room_slug && !cbjs.arrayContains(eModArray,msg['user']) && !cbjs.arrayContains(niceArray,msg['user']) && !msg['in_fanclub'] && silenced == 0) { switch(silenceLevel) { case 1: if(!msg['has_tokens']) { msg['X-Spam'] = true; silenced = 1; cb.sendNotice('I\'m sorry, but the silence level has been set to 1; your message was not sent. Only members who have tokens are currently permitted to talk in chat. \nType "/ubhelp silencelevel" to see how the various silence levels work.\nPlease enjoy the show :smile',msg['user'],purple); } break; case 2: if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0) { msg['X-Spam'] = true; silenced = 1; cb.sendNotice('I\'m sorry, but the silence level has been set to 2; your message was not sent. Only members who have tipped at least 1 token are currently permitted to talk in chat. \nType "/ubhelp silencelevel" to see how the various silence levels work.\nPlease enjoy the show :smile',msg['user'],purple); } break; case 3: if(parseInt(tipperArray[findTipper(msg['user'])][1]) < 10) { msg['X-Spam'] = true; silenced = 1; cb.sendNotice('I\'m sorry, but the silence level has been set to 3; your message was not sent. Only members who have tipped at least 10 token are currently permitted to talk in chat. \nType "/ubhelp silencelevel" to see how the various silence levels work.\nPlease enjoy the show :smile',msg['user'],purple); } break; case 4: //tweaked by MasterofDisaster433 if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0 && !msg['has_tokens']) { msg['X-Spam'] = true; silenced = 1; cb.sendNotice('I\'m sorry, but the silence level has been set to 4; your message was not sent. Only members who have tipped or have tokens are currently permitted to talk in chat. \nType "/ubhelp silencelevel" to see how the various silence levels work.\nPlease enjoy the show :smile',msg['user'],purple); } break; } } //let graphicLevel do its thing if(graphicLevel > 0 && !msg['is_mod'] && msg['user'] != cb.room_slug && !cbjs.arrayContains(eModArray,msg['user']) && !cbjs.arrayContains(niceArray,msg['user']) && !msg['in_fanclub'] && silenced == 0) { switch(graphicLevel) { case 1: if(!msg['has_tokens']) { for(var i = 0; i < message.length; i++) { if(message[i].charAt(0) == ':') { msg['X-Spam'] = true; cb.sendNotice('Your message was not sent because you tried to use ' + message[i] + ' and the graphic level has been set to ' + graphicLevel + '.\nType "/ubhelp graphiclevel to see how the various graphic levels work.\nPlease enjoy the show :smile',msg['user'],purple); } } } break; case 2: if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0) { for(var i = 0; i < message.length; i++) { if(message[i].charAt(0) == ':') { msg['X-Spam'] = true; cb.sendNotice('Your message was not sent because you tried to use ' + message[i] + ' and the graphic level has been set to ' + graphicLevel + './nType "/ubhelp graphiclevel to see how the various graphic levels work.\nPlease enjoy the show :smile',msg['user'],purple); } } } break; case 3: if(parseInt(tipperArray[findTipper(msg['user'])][1]) < 10) { for(var i = 0; i < message.length; i++) { if(message[i].charAt(0) == ':') { msg['X-Spam'] = true; cb.sendNotice('Your message was not sent because you tried to use ' + message[i] + ' and the graphic level has been set to ' + graphicLevel + './nType "/ubhelp graphiclevel to see how the various graphic levels work.\nPlease enjoy the show :smile',msg['user'],purple); } } } break; case 4: if(parseInt(tipperArray[findTipper(msg['user'])][1]) == 0 && !msg['has_tokens']) // added by MasterofDisaster433 { for(var i = 0; i < message.length; i++) { if(message[i].charAt(0) == ':') { msg['X-Spam'] = true; cb.sendNotice('Your message was not sent because you tried to use ' + message[i] + ' and the graphic level has been set to ' + graphicLevel + './nType "/ubhelp graphiclevel to see how the various graphic levels work.\nPlease enjoy the show :smile',msg['user'],purple); } } } break; } } //stop people from sending messages in all caps if(msg['m'] == msg['m'].toUpperCase() && msg['m'].toUpperCase() != msg['m'].toLowerCase() && !msg['is_mod'] && msg['user'] != cb.room_slug && !cbjs.arrayContains(eModArray,msg['user']) && cb.settings.capsToggle == 'Yes') { for(var i = 0; i < msg['m'].length; i++) { if(symbolString.indexOf(msg['m'].charAt(i)) == -1) { msg['m'] = msg['m'].toLowerCase(); cb.sendNotice('I\'m sure you didn\'t actually mean to send that message in all capital letters, so I fixed it for you :smile',msg['user'],purple); break; } } } //tip titles, if turned on, a king's crown and loonatic's heart are shown for certain tipper if(cb.settings.tipTitles == 'Yes' && parseInt(tipperArray[findTipper(msg['user'])][1]) > 0 && message[0].charAt(0) != "/") { msg['m'] = setTipTitles(msg['user'],msg['m']); } return msg; }); } //onTip { cb.onTip(function (tip) { tipperArray[findTipper(tip['from_user'])][1] += parseInt(tip['amount']); if(cb.settings.kingTipper == 'Yes') { if(tip['from_user'] != currentKing && parseInt(tipperArray[findTipper(tip['from_user'])][1]) > kingTip && parseInt(tipperArray[findTipper(tip['from_user'])][1]) >= parseInt(cb.settings.kingMin)) { if(currentKing != '') { cb.sendNotice('You have been dethroned by ' + tip['from_user'] + ', but revenge is sweet...', currentKing, purple); } cb.sendNotice('We have a new King!\nAll hail ' + tip['from_user'] + '!','',purple); currentKing = tip['from_user']; kingTip = parseInt(tipperArray[findTipper(tip['from_user'])][1]); } else if(tip['from_user'] == currentKing) { kingTip = parseInt(tipperArray[findTipper(tip['from_user'])][1]); } } if(cb.settings.notifierTip == 'Yes' && parseInt(tip['amount']) >= cb.settings.tipMessageMin) { cb.sendNotice(cb.settings.tipMessage,'',purple); } if(cb.settings.loonatics == 'Yes' && parseInt(tipperArray[findTipper(tip['from_user'])][1]) > 999) // added by MasterofDisaster433 { if(objList[tip['from_user']].loonatic === false) { objList[tip['from_user']].LoonaticSpamTimer(); objList[tip['from_user']].loonatic = true; } } if(cb.settings.supersale == 'Yes' && parseInt(tipperArray[findTipper(tip['from_user'])][1]) > 99) // added by MasterofDisaster433 { if(objList[tip['from_user']].supersale === false) { objList[tip['from_user']].SupersaleSpamTimer(); objList[tip['from_user']].supersale = true; } } }); } //onEnter { cb.onEnter(function(user) { if(cb.settings.notifierEnter == "Yes") { cb.sendNotice(cb.settings.enterMessage,user['user'],purple); } if(user['is_mod'] && !cbjs.arrayContains(modArray,user)) { modArrayPopulate(user['user']); } }); } //init { if(initialize == 0) { if(cb.settings.kingTipperSpam == 'Yes') { kingTipperSpam = 1; kingSpam(); } if(cb.settings.leaderBoardSpam == 'Yes') { leaderboardSpam = 1; leaderSpam(); } if(cb.settings.ShowTimer == 'Yes') // added by MasterofDisaster433 { showtimerSpam = 1; showtimeSpam(); } if(cb.settings.notifierSpam == 'Yes') //added by MasterofDisaster433 { notifier = new Notifier(); notifier.mc = "#"+cb.settings.spamcolor; notifier.spamTimer = cb.settings.spamTimer; notifier.SpamTGL = true; notifier.Message = [cb.settings.spamMessage1, cb.settings.spamMessage2, cb.settings.spamMessage3, cb.settings.spamMessage4, cb.settings.spamMessage5, cb.settings.spamMessage6]; notifier.name = 'notifier'; notifier.notifierSpam(); } if(cb.settings.notifier2Spam == 'Yes') //added by MasterofDisaster433 { notifier2 = new Notifier(); notifier2.mc = "#"+cb.settings.spam2color; notifier2.spamTimer = 2+ cb.settings.spam2Timer; notifier2.SpamTGL = true; notifier2.Message = [cb.settings.spam2Message1, cb.settings.spam2Message2, cb.settings.spam2Message3, cb.settings.spam2Message4, cb.settings.spam2Message5, cb.settings.spam2Message6]; notifier2.name = 'notifier2'; notifier2.notifierSpam(); notifier2.spamTimer = cb.settings.spam2Timer; } //added by MasterofDisaster433 if(cb.settings.squirtSpam == 'Yes') { squirt = new Notifier(); squirt.mc = "#"+cb.settings.squirtspamcolor; squirt.spamTimer = cb.settings.squirtspamTimer; squirt.Message = [cb.settings.squirtspamMessage1, cb.settings.squirtspamMessage2, cb.settings.squirtspamMessage3, cb.settings.squirtspamMessage4, cb.settings.squirtspamMessage5, cb.settings.squirtspamMessage6]; squirt.name = 'squirt'; } if(cb.settings.callSpam == 'Yes') //added by MasterofDisaster433 { call = new Notifier(); call.mc = "#"+cb.settings.callspamcolor; call.spamTimer = cb.settings.callspamTimer; call.Message = [callperson + cb.settings.callspamMessage1, cb.settings.callspamMessage2, cb.settings.callspamMessage3 + callperson +"!", cb.settings.callspamMessage4, callperson + cb.settings.callspamMessage5, cb.settings.callspamMessage6]; call.name = 'call'; } if(cb.settings.bondageSpam == 'Yes') //added by MasterofDisaster433 { bondage = new Notifier(); bondage.mc = "#"+cb.settings.bondagespamcolor; bondage.spamTimer = cb.settings.bondagespamTimer; bondage.Message = [cb.settings.bondagespamMessage1, cb.settings.bondagespamMessage2, cb.settings.bondagespamMessage3, cb.settings.bondagespamMessage4, cb.settings.bondagespamMessage5, cb.settings.bondagespamMessage6]; bondage.name = 'bondage'; } if(cb.settings.niceList != '' && cb.settings.niceList != null) { var n = cb.settings.niceList; niceArray = n.split(','); numNice = niceArray.length; } if(cb.settings.color != 'C287C2') { colorChecker(); } show_timer(); //cb.sendNotice('Grey users are now unable to use graphics by default. If you would like grey users to be able to use graphics, type /graphiclevel 0.', cb.room_slug, purple); cb.sendNotice('If you would like tipper and people who have tokens to talk, type /silencelevel 4.', cb.room_slug, purple); //cb.sendNotice('If you would like tipper and people who have tokens to be able to use graphics, type /graphiclevel 4.', cb.room_slug, purple); cb.sendNotice('To see LOONAtics list type /loonatics and for Supersale type /supersalelist (shortcut /ssl)!', cb.room_slug, purple); cb.sendNotice('To see your online time use /showtime (shortcut /st)!', cb.room_slug, purple); initialize = 1; } }
© Copyright Chaturbate 2011- 2024. All Rights Reserved.