Bots Home
|
Create an App
Dorothy's Lush Bot
Author:
dorothy
Description
Source Code
Launch Bot
Current Users
Created by:
Dorothy
/** Name: Dorothy's Lush and Toy Menu Bot Author: chelsea2950 and butter_my_toast Created: 06/09/2020 See Change Log on bot description page for revision history **/ {cb.settings_choices = [ {name: 'dummy0', label: '---------------------------------------------------------------------------------------------------- Latest Updt: 06/11/2020 (version 1.0) See Change Log for details ----------------------------------------------------------------------------------------------------', type: 'choice',required: false}, {name: 'dummy00', label: 'Hello ' + cb.room_slug + ', welcome to Dorothy\'s Tip Menu Bot for Lovense Toys. You can see the full list of commands for the bot by typing "/toyhelp" in the chat (no quotes). The full command list is also on the bot description page. Note that this bot (and any other bot within chaturbate) can only display a menu and tip response message for the toy, they cannot control the toy itself, that is done through the lovense app. You can also use the lovense browser or the lovense chrome extension to publish the lush configuration menu and response messages directly to the chat in place of this bot. Following the General Settings below, there is a section for setting up to 15 tip level ranges, and then another section for 8 special amounts (for Random and Pattern tips)', type: 'choice',required: false}, {name: 'dummy1', label: 'General Settings', type: 'choice',required: false}, {name: 'enableToyMenu', label: '1. Enable the Toy Tip Menu at the start of the show? If you choose to not enable on start, you can turn the menu and tip responses on and off during the show using the "/toymenu on" and "/toymenu off" commands', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'whichToy', label: '2. Which toy is being used? The menu title and chat messaging will reflect the toy selected', type: 'choice', choice1: 'lush', choice2: 'nora', choice3: 'domi', choice4: 'hush', choice5: 'osci', defaultValue: 'lush'}, {name: 'displayResponse', label: '3. Display a response message for each tip to indicate which toy level or pattern was tipped for (note this will not always be an accurate display of what tip is being performed by the toy at that time, as the tips will build up a queue but the message is displayed immediately upon tipping)', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'No'}, {name: 'enableEntryMessage', label: '4. Display a welcome message to users with tokens when they enter the room to let them know the interactive toy menu is enabled?', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes'}, {name: 'toyMenuInterval', label: '5. Toy Tip Menu display interval. Decimals are ok as long as they are greater than 1. For example, 1.5 = one minute 30 second intervals.',type: 'str',required: false,defaultValue: 2.7}, {name: 'toyMenuTxtColor', label: '6. Choose your text color for the menu and response messages',type: 'choice',choice1: 'White/No Color',choice2: 'Black',choice3: 'Dark Grey',choice4: 'Dark Red',choice5: 'Dark Orange',choice6: 'Dark Green',choice7: 'Dark Aqua',choice8: 'Dark Blue',choice9: 'Dark Purple',choice10: 'Dark Pink',choice11: 'Custom',defaultValue: 'Dark Pink'}, {name: 'toyMenuCustTxtColor', label: '7. If you picked "Custom" text color in the previous setting, enter the hex color code (6 character hex color codes plus the # prefix):',type: 'str',minLength: 1,maxLength: 7,required: false}, {name: 'toyMenuBgColor', label: '8. Choose your background color for the menu and response messages',type: 'choice', choice1: 'White/No Color',choice2: 'Light Yellow',choice3: 'Light Blue',choice4: 'Light Pink',choice5: 'Light Red',choice6: 'Light Green',choice7: 'Light Purple',choice8: 'Light Orange',choice9: 'Light Grey',choice10: 'Light Aqua',choice11: 'Custom',defaultValue: 'Light Pink'}, {name: 'toyMenuCustBgColor', label: '9. If you picked "Custom" background color in the previous setting, enter the hex color code (6 character hex color codes plus the # prefix):',type: 'str',minLength: 1,maxLength: 7,required: false}, {name: 'dummy2', label: 'Toy Tip Menu Levels -- For the Toy Tip Menu ranges, enter the beginning tip amount for the range in the "minimum threshold" box, and then in the "Description" box, enter text such as "5 seconds on LOW vibrations". The bot will automatically add the Level ID (such as "Level 3") and Tip Range (such as "50-99") to the description for each tip menu line, so you do not need to include these in the description. It will use the minimum of the next level to determine the maximum of the current level, so if you set the level 1 minimum as "2", and the level 2 minimum as "15", the range for level 1 will be "2-14". At least 2 levels are required, otherwise the menu cannot be enabled. Defaults are shown for levels 1 and 2 only as an example the first time you start the bot, and you can override these to the amount and description you would like to use, and add the remaining levels you would like to use. The bot allows up to 15 levels, but you only need to configure the ones you want to use and skip the rest. You can temporarily disable a Level by putting a dash "-" in front of the amount to make it a negative number, then it will not be added to the displayed menu.', type: 'choice',required: false}, {name: 'Amount1', label: 'Minimum Threshold for Level 1',type: 'int',minValue: -99999,maxValue: 99999,defaultValue: 1}, {name: 'Description1', type: 'str',label: 'Level 1 Description',defaultValue: '5 seconds on LOW vibrations'}, {name: 'Amount2', label: 'Minimum Threshold for Level 2',type: 'int',minValue: -99999,maxValue: 99999,defaultValue: 15}, {name: 'Description2', type: 'str',label: 'Level 2 Description',defaultValue: '5 seconds on MEDIUM vibrations'}, {name: 'Amount3', label: 'Minimum Threshold for Level 3',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description3', type: 'str',label: 'Level 3 Description',required: false}, {name: 'Amount4', label: 'Minimum Threshold for Level 4',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description4', type: 'str',label: 'Level 4 Description',required: false}, {name: 'Amount5', label: 'Minimum Threshold for Level 5',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description5', type: 'str',label: 'Level 5 Description',required: false}, {name: 'Amount6', label: 'Minimum Threshold for Level 6',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description6', type: 'str',label: 'Level 6 Description',required: false}, {name: 'Amount7', label: 'Minimum Threshold for Level 7',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description7', type: 'str',label: 'Level 7 Description',required: false}, {name: 'Amount8', label: 'Minimum Threshold for Level 8',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description8', type: 'str',label: 'Level 8 Description',required: false}, {name: 'Amount9', label: 'Minimum Threshold for Level 9',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description9', type: 'str',label: 'Level 9 Description',required: false}, {name: 'Amount10', label: 'Minimum Threshold for Level 10',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description10', type: 'str',label: 'Level 10 Description',required: false}, {name: 'Amount11', label: 'Minimum Threshold for Level 11',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description11', type: 'str',label: 'Level 11 Description',required: false}, {name: 'Amount12', label: 'Minimum Threshold for Level 12',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description12', type: 'str',label: 'Level 12 Description',required: false}, {name: 'Amount13', label: 'Minimum Threshold for Level 13',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description13', type: 'str',label: 'Level 13 Description',required: false}, {name: 'Amount14', label: 'Minimum Threshold for Level 14',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description14', type: 'str',label: 'Level 14 Description',required: false}, {name: 'Amount15', label: 'Minimum Threshold for Level 15',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'Description15', type: 'str',label: 'Level 15 Description',required: false}, {name: 'dummy3', label: 'Special Tip Amounts -- For the Random and Four Special Pattern entries, input the exact price for each one in the "Amount" box and then enter a description, such as "Wave Pattern for 30 seconds" or "Random Level for 5 seconds". These are all optional, only make entries for the ones you are using. You do not need to put the "pause queue" and "clear queue" special amounts in this list. You can temporarily disable a Level by putting a dash "-" in front of the amount to make it a negative number, then it will not be added to the menu.', type: 'choice',required: false}, {name: 'SpecAmount1', label: 'Special Tip Amount 1',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription1', type: 'str',label: 'Special/Pattern 1 Description',required: false}, {name: 'SpecAmount2', label: 'Special Tip Amount 2',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription2', type: 'str',label: 'Special/Pattern 2 Description',required: false}, {name: 'SpecAmount3', label: 'Special Tip Amount 3',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription3', type: 'str',label: 'Special/Pattern 3 Description',required: false}, {name: 'SpecAmount4', label: 'Special Tip Amount 4',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription4', type: 'str',label: 'Special/Pattern 4 Description',required: false}, {name: 'SpecAmount5', label: 'Special Tip Amount 5',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription5', type: 'str',label: 'Special/Pattern 5 Description',required: false}, {name: 'SpecAmount6', label: 'Special Tip Amount 6',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription6', type: 'str',label: 'Special/Pattern 6 Description',required: false}, {name: 'SpecAmount7', label: 'Special Tip Amount 7',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription7', type: 'str',label: 'Special/Pattern 7 Description',required: false}, {name: 'SpecAmount8', label: 'Special Tip Amount 8',type: 'int',required: false,minValue: -99999,maxValue: 99999}, {name: 'SpecDescription8', type: 'str',label: 'Special/Pattern 8 Description',required: false} ]; } { // *********************************** Variables and Arrays ************************************** var initialize = 0; var BC = cb.room_slug; var appNoticeColor = '#FFE6EA'; // Used for general messaging from bot (pink) var appWarningColor = '#f4d599'; // Used for warning messaging from bot (yellow) var red = '#f4c1bc'; // Used for urgent messaging from bot (red) var dashLine60 = new Array(60).join('-'); var dashLine70 = new Array(70).join('-'); var dashLine80 = new Array(80).join('-'); var dashLine90 = new Array(90).join('-'); var toyIcon = ''; var whichToy = ''; var toyMenuToggle = 0; var toyMenu = ''; var textColor = ''; var backgroundColor = ''; var toyMenuDspIntTime = 0; var amountArray = []; var descriptionArray = []; var responseArray = []; var specAmountArray = []; var specDescriptionArray = []; var specResponseArray = []; var tempAmountArray = []; var tempDescriptionArray = []; var tempSpecAmountArray = []; var tempSpecDescriptionArray = []; } { // *********************************** Functions ************************************** { function checkTextColor(color) { switch (color) { case 'White/No Color': return '#FFFFFF'; case 'Black': return '#000000'; case 'Dark Blue': return '#0629AC'; case 'Dark Pink': return '#FF6680'; case 'Dark Green': return '#006600'; case 'Dark Red': return '#cc0000'; case 'Dark Purple': return '#3d003d'; case 'Dark Grey': return '#737373'; case 'Dark Orange': return '#e77400'; case 'Dark Aqua': return '#006767'; default: if (/^#[0-9A-F]{6}$/i.test(color)) { return color; } else if (/^[0-9A-F]{6}$/i.test(color)) { return ('#' + color); } else { return ('default'); } } } function checkBgColor(color) { switch (color) { case 'White/No Color': return '#FFFFFF'; case 'Light Aqua': return '#adeaea'; case 'Light Pink': return '#FFE6EA'; case 'Light Green': return '#94e594'; case 'Light Red': return '#ff9a9a'; case 'Light Purple': return '#f2cdff'; case 'Light Orange': return '#ffd9b3'; case 'Light Grey': return '#e6e6e6'; case 'Light Blue': return '#d1eaee'; case 'Light Yellow': return '#ffff94' case 'Cream': return '#f9f6ed' default: if (/^#[0-9A-F]{6}$/i.test(color)) { return color; } else if (/^[0-9A-F]{6}$/i.test(color)) { return ('#' + color); } else { return ('default'); } } } // *************************** Toy Menu Functions ************************ function setToyMenuToggle(option, mod) { if(option == 'on') { if (toyMenuToggle == 1) { cb.sendNotice('The ' + whichToy + ' menu is already enabled.',mod,appNoticeColor); } else { toyMenuToggle = 1; initToyMenu(); cb.sendNotice(' ' + mod + ' has enabled the ' + whichToy + ' menu. Use the tip ranges on the menu to make the toy vibrate!', '', backgroundColor, textColor, 'bold'); } } else if(option == 'off') { if(toyMenuToggle == 0) { cb.sendNotice('The ' + whichToy + ' menu is already disabled.',mod,appNoticeColor); } else { toyMenuToggle = 0; cb.sendNotice(' ' + mod + ' has disabled the ' + whichToy + ' menu.', '', backgroundColor, textColor, 'bold'); } } else if(option != null) { cb.sendNotice(option + ' is not a valid option for /uselushmenu.',mod,appNoticeColor); } else if(option == null) { cb.sendNotice('You did not enter a valid option for /uselushmenu.',mod,appNoticeColor); } } function initToyMenu() { if (cb.settings.toyMenuTxtColor === 'Custom') { textColor = checkTextColor(cb.settings.toyMenuCustTxtColor); if (textColor === 'default') { cb.sendNotice('Error while setting the text color. It must be in a HEX format. Using default value.', cb.room_slug, '#FFFFFF', '#FF0000', 'bold'); textColor = '#FFFFFF'; } } else { textColor = checkTextColor(cb.settings.toyMenuTxtColor); } if (cb.settings.toyMenuBgColor === 'Custom') { backgroundColor = checkBgColor(cb.settings.toyMenuCustBgColor); if (backgroundColor === 'default') { cb.sendNotice('Error while setting the background color. It must be in a HEX format. Using default value.', cb.room_slug, '#FFFFFF', '#FF0000', 'bold'); backgroundColor = '#0629AC'; } } else { backgroundColor = checkBgColor(cb.settings.toyMenuBgColor); } setToyMenuTimer(); } function setToyMenuTimer() { if (isNaN(parseFloat(cb.settings.toyMenuInterval))) { cb.sendNotice('Lush Bot: Toy Menu notice interval is not set with a valid number so the notice is not enabled.', cb.room_slug, appWarningColor); lushtimer = 0; } else { lushtimer = parseFloat(cb.settings.toyMenuInterval); } if (lushtimer != 0) { if (lushtimer < 1) { cb.sendNotice('Lush Bot: Toy Menu notice interval is less than 1 minute. Using default value of 3.2 minutes.', cb.room_slug, '#FFFFFF', '#FF0000', 'bold'); lushtimer = 3.2; } lushtimer = parseInt(lushtimer * 60000); toyMenuDspIntTime = lushtimer; displayToyMenu(); } } function displayToyMenu() { if (toyMenuToggle == 1) { toyMenu = ''; switch (whichToy) { case 'lush': { toyMenu = '-------- :lushsm \u2665 :lushsm \u2665 :lushsm Lush Tip Menu :lushsm \u2665 :lushsm \u2665 :lushsm --------\n'; } break; case 'domi': { toyMenu = '-------- :domism \u2665 :domism \u2665 :domism Domi Tip Menu :domism \u2665 :domism \u2665 :domism --------\n'; } break; case 'nora': { toyMenu = '-------- :norasm \u2665 :norasm \u2665 :norasm Nora Tip Menu :norasm \u2665 :norasm \u2665 :norasm --------\n'; } break; case 'hush': { toyMenu = '-------- :hushsm \u2665 :hushsm \u2665 :hushsm Hush Tip Menu :hushsm \u2665 :hushsm \u2665 :hushsm --------\n'; } break; case 'osci': { toyMenu = '-------- :oscism \u2665 :oscism \u2665 :oscism Osci Tip Menu :oscism \u2665 :oscism \u2665 :oscism --------\n'; } break; } toyMenu += toyMenuLevel.join('\n'); if (toyMenuSpecLevel.length > 0) { toyMenu = toyMenu + '\n' + toyMenuSpecLevel.join('\n'); } cb.sendNotice(toyMenu, '', backgroundColor, textColor, 'bold'); cb.setTimeout(displayToyMenu, toyMenuDspIntTime); } } // *********************************** Help Function ************************************** function helpMenu(option,from) { cb.sendNotice('Dorothy\'s Lush Bot command menu for Broadcasters and Moderators', from, appNoticeColor); cb.sendNotice( '/toymenu: Display the Toy Menu in chat. Available to any user, only shown to the user that requests it.' + '\n/chgtoymenu "newtoy": Changes the name of the toy currently being used, where "newtoy" is one of the toys "lush", "nora", "domi", "hush", or "osci" (no quotes). The new name will then be displayed in all chat messaging.' + '\n/usetoymenu "on" or "off": Toggle the setting for whether the Toy Menu is "on" or "off" (no quotes), and displays at the defined interval. Overrides the initial setting to turn the Toy Menu on or off during the show.' ,from); cb.sendNotice('',from,appNoticeColor); } } } // ******************************* Upon user entry of a Message ************************************** { cb.onMessage(function (msg) { var message = msg['m'].split(' '); var cmd = 0; var listRegExp = /[,\s]+/; var listRegExpSpc = /[,]+/; var msgUser = msg.user; var isMod = msg.is_mod; var isBC = (msgUser === cb.room_slug); var BC = cb.room_slug; var command = message[0] if (message[0].charAt(0) == '/') { msg['X-Spam'] = true; switch(command) { case '/toymenu': { cmd = 1; if (toyMenuToggle == 1) { sendtotext = ''; if (isMod || isBC) { sendto = ''; sendtotext += 'Sent to ALL:\n'; } else { sendto = msgUser; sendtotext += 'Sent to YOU:\n'; } cb.sendNotice(sendtotext + toyMenu, sendto, backgroundColor, textColor, 'bold'); } else { cb.sendNotice('Cannot display the menu as it is not enabled.', msgUser, appNoticeColor); } break; } case '/usetoymenu': { cmd = 1; if (isMod || isBC) { if (message[1]) { usetoyparm = message[1].toLowerCase(); if (usetoyparm != 'on' && usetoyparm != 'off' ) { cb.sendNotice('Invalid parameter, valid parameters are "on" or "off".', msgUser, appNoticeColor); } else { setToyMenuToggle(usetoyparm, msgUser) } } else { cb.sendNotice('No parameter specified for the /usetoymenu command, a parameter of "on" or "off" is required.', msgUser, appNoticeColor); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.', msgUser, appNoticeColor); } break; } case '/chgtoymenu': { cmd = 1; if (isMod || isBC) { if (message[1]) { usetoyparm = message[1].toLowerCase(); if (usetoyparm == whichToy) { cb.sendNotice('The toy type is already set to "' + whichToy + '", please enter a new toy type.', msgUser, appNoticeColor); } else if (usetoyparm == 'lush') { whichToy = 'lush'; toyIcon = ':lushsm'; cb.sendNotice('You have updated the toy to the "lush".', msgUser, appNoticeColor); } else if (usetoyparm == 'domi') { whichToy = 'domi'; toyIcon = ':domism'; cb.sendNotice('You have updated the toy to the "domi".', msgUser, appNoticeColor); } else if (usetoyparm == 'nora') { whichToy = 'nora'; toyIcon = ':norasm'; cb.sendNotice('You have updated the toy to the "nora".', msgUser, appNoticeColor); } else if (usetoyparm == 'hush') { whichToy = 'hush'; toyIcon = ':hushsm'; cb.sendNotice('You have updated the toy to the "hush".', msgUser, appNoticeColor); } else if (usetoyparm == 'osci') { whichToy = 'osci'; toyIcon = ':oscism'; cb.sendNotice('You have updated the toy to the "osci".', msgUser, appNoticeColor); } else { cb.sendNotice('Invalid toy name, valid names are "lush", "nora", "domi", "hush", and "osci". Therefore, syntax for command is /chgtoymenu lush, please try again.',u,appNoticeColor); } } else { cb.sendNotice('No parameter specified for the /chgtoymenu command, a parameter of "lush", "nora", "domi", "hush", or "osci" is required.', msgUser, appNoticeColor); } } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.', msgUser, appNoticeColor); } break; } case '/toyhelp': { cmd = 1; if (isMod || isBC) { helpMenu(message[1],msgUser); } else { cb.sendNotice('Only moderators and broadcasters are able to use that command.', msgUser, appNoticeColor); } break; } //********* End of Expected commands } } return msg; }); } // *********************************** Actions on user entering ************************************** { cb.onEnter(function(user) { var enterUser = user.user; // **** General Entry Message if (toyMenuToggle == 1) { if (toyMenuToggle == 1 && cb.settings.enableEntryMessage == 'Yes' && user.has_tokens) { cb.sendNotice(' \u21E8 The "' + whichToy + '" interactive toy is in use, please select from the toy menu tip ranges to control the toy.\nYou can type /toymenu in the chat window to see the menu.', enterUser, backgroundColor, textColor, 'bold'); } } }); } // *********************************** Actions upon leaving ************************************** { cb.onLeave(function(user) { }); } // *********************************** Actions upon tipping ************************************** { cb.onTip(function (tip) { var tipAmount = Number.parseInt(tip.amount, 10); var tipUser = tip.from_user; var realTipper = tip.from_user; var isAnon = tip.is_anon_tip; if (isAnon) { tipUser = 'Anonymous'; } if (toyMenuToggle == 1 && cb.settings.displayResponse == 'Yes') { exactfound = false; if (specAmountArray.length > 0) { for (let i = 0; i < specAmountArray.length; i++) { if (tipAmount == specAmountArray[i]) { exactfound = true; cb.sendNotice(toyIcon + ' ' + tipUser + ' tipped for ' + specDescriptionArray[i] + ' ' + toyIcon, '', backgroundColor, textColor, 'bold'); break; } } } if (!exactfound) { for (let i = 0; i < amountArray.length; i++) { if (amountArray[i+1] > 0) { if (tipAmount >= amountArray[i] && tipAmount < amountArray[i+1]) { cb.sendNotice(toyIcon + ' ' + tipUser + ' tipped for ' + descriptionArray[i] + ' ' + toyIcon, '', backgroundColor, textColor, 'bold'); break; } } else { if (tipAmount >= amountArray[i]) { cb.sendNotice(toyIcon + ' ' + tipUser + ' tipped for ' + descriptionArray[i] + ' ' + toyIcon, '', backgroundColor, textColor, 'bold'); break; } } } } } }); } // *********************************** Initialize ************************************** { if (initialize == 0) { cb.sendNotice('Welcome to Dorothy\'s Lush Bot v1.0'); intromessage = '** Version 1.0 was released on 06/11/2020.'; intromessage += '\nYou can type "/toyhelp" to display the command list.'; cb.sendNotice(intromessage, cb.room_slug, red); whichToy = cb.settings.whichToy; validationFail = false; if (!cb.settings.Description1 || cb.settings.Amount1 <= 0 || !cb.settings.Description2 || cb.settings.Amount2 <= 0) { cb.sendNotice('Unable to start the Toy Tip Menu, Levels 1 and 2 must be defined with both amounts and descriptions. Toy Menu and Response messages are disabled. Please restart the bot and fix Level 1 and 2 setup.', cb.room_slug, red, '' , 'bold'); validationFail = true; } else { toyMenuLevel = []; toyMenuSpecLevel = []; toyMenu = ''; for (let j = 1; j < 16; j++) { if (cb.settings['Description' + j] !== '' && cb.settings['Amount' + j] > 0) { if (j > 1 && (cb.settings['Amount' + j] <= cb.settings['Amount' + (j-1)])) { cb.sendNotice('Unable to start the Toy Tip Menu, Level ' + j + ' amount is less or equal to Level ' + (j-1) + ' amount. Toy Menu and Response messages are disabled. Please restart the bot and fix amounts so that they increase with each level.', cb.room_slug, red, '' , 'bold'); validationFail = true; break; } tempAmountArray.push(cb.settings['Amount' + j]); tempDescriptionArray.push(cb.settings['Description' + j]); } } for (let j = 1; j < 9; j++) { if (cb.settings['SpecDescription' + j] !== '' && cb.settings['SpecAmount' + j] > 0) { tempSpecAmountArray.push(cb.settings['SpecAmount' + j]); tempSpecDescriptionArray.push(cb.settings['SpecDescription' + j]); } } for (let j = 0; j < tempAmountArray.length; j++) { amountArray.push(tempAmountArray[j]); descriptionArray.push(tempDescriptionArray[j]); if (j == (tempAmountArray.length - 1)) { toyMenuLevel.push('Level ' + (j+1) + ': (' + tempAmountArray[j] + ' and above) : ' + tempDescriptionArray[j]); } else { toyMenuLevel.push('Level ' + (j+1) + ': (' + tempAmountArray[j] + '-' + (tempAmountArray[j+1] - 1) + ') : ' + tempDescriptionArray[j]); } } for (let j = 0; j < tempSpecAmountArray.length; j++) { specAmountArray.push(tempSpecAmountArray[j]); specDescriptionArray.push(tempSpecDescriptionArray[j]); toyMenuSpecLevel.push('Special Level ' + (j+1) + ': (' + tempSpecAmountArray[j] + ') : ' + tempSpecDescriptionArray[j]); } switch (whichToy) { case 'lush': { toyIcon = ':lushsm'; } break; case 'domi': { toyIcon = ':domism'; } break; case 'nora': { toyIcon = ':norasm'; } break; case 'hush': { toyIcon = ':hushsm'; } break; case 'osci': { toyIcon = ':oscism'; } break; } } if (cb.settings.enableToyMenu == 'Yes' && !validationFail) { setToyMenuToggle('on',cb.room_slug); } initialize = 1; } }
© Copyright Chaturbate 2011- 2024. All Rights Reserved.