Bots Home
|
Create an App
SiennaVille Party Bot
Author:
roydz
Description
Source Code
Launch Bot
Current Users
Created by:
Roydz
// hotandscottish - Party bot // 11 Nov 2014 // CB app settings cb.settings_choices = [ { name: 'doColoring', type: 'choice', label: 'Change text and background coloring for members and heroes (choose colours below)?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, { name: 'doText', type: 'choice', label: 'Add text labels in front of members and heroes messages (choose text below)?', choice1: 'Yes', choice2: 'No', defaultValue: 'Yes' }, // ######################### // Level 1 // ######################### { name: 'p1Text', label: 'Icon to put in front of Level 1 messages (Lowest Group)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: 'psp1'}, { name: 'p1TextColor', label: 'Level 1 text color - HTML colour code without starting \'#\' e.g. (FFFFFF is white)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '000000'}, { name: 'p1BGColor', label: 'Level 1 background color - HTML colour code without starting \'#\' e.g. (000000 is black)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '87f797'}, { name: 'p1MemberList', label: 'List of current Level 1, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, // ######################### // Level 2 // ######################### { name: 'p2Text', label: 'Icon to put in front of Level 2 messages (Middle Group)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: 'psp2'}, { name: 'p2TextColor', label: 'Level 2 text color - HTML colour code without starting \'#\' e.g. (000000 is black)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '000000'}, { name: 'p2BGColor', label: 'Level 2 background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'ffbb59'}, { name: 'p2MemberList', label: 'List of current Level 2, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, // ######################### // Level 3 // ######################### { name: 'p3Text', label: 'Icon to put in front of Level 3 messages (Highest Group)', type: 'str', minLength: 0, maxLength: 10, required: false, defaultValue: 'psp3'}, { name: 'p3TextColor', label: 'Level 3 text color - HTML colour code without starting \'#\' e.g. (000000 is black)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: '000000'}, { name: 'p3BGColor', label: 'Level 3 background color - HTML colour code without starting \'#\' e.g. (F5B608 is orangey/gold)', type: 'str', minLength: 0, maxLength: 6, required: false, defaultValue: 'ee87f7'}, { name: 'p3MemberList', label: 'List of current Level 3, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, // ######################### // Leader Board // ######################### { name: 'print_on_tip', type: 'choice', choice1: 'always', choice2: 'only if the top 3 changed', choice3: 'never', defaultValue: 'only if the top 3 changed', label: "Print top 3 after tips"}, { name: 'print_interval', type: 'int', minValue: 0, defaultValue: 10, label: "Print top 3 at least once every (minutes, 0 to disable)", required: true}, { name: 'highlight', type: 'choice', choice1: 'yes', choice2: 'no', defaultValue: 'yes', label: "Highlight tip leader in chat"}, // ######################### // Blocked Members and Words // ######################### { name: 'blockMemberList', label: 'List of Blocked Users, separated by commas (and they need to be the CB username exactly)', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, { name: 'blockWordList', label: 'List of Blocked Words, separated by commas', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, { name: 'keyWordList', label: 'List of Key Words, separated by commas', type: 'str', minLength: 0, maxLength: 10240, required: false, defaultValue: ''}, { name: 'ghostList', label: 'List of Ghost Users who have been silenced', type: 'str', minLength: 1, maxLength: 10240, required: false, defaultValue: '' }, // ######################### // Rotating Advertisements // ######################### { name:'msg1', type:'str', required: false, label:'Message 1 (also displayed privately on room entry)',}, { name:'msg2', type:'str', required: false, label:'Message 2',}, { name:'msg3', type:'str', required: false, label:'Message 3',}, { name:'msg4', type:'str', required: false, label:'Message 4',}, { name:'msg5', type:'str', required: false, label:'Message 5',}, { name:'msgcolor', type:'str', label:'Notice color (html code default dark red #9F000F)', defaultValue: '#9F000F'}, { name: 'chat_ad', type:'int', minValue: 1, maxValue: 999, defaultValue: 2, label: 'Delay in minutes between notices being displayed (minimum 1)'} ]; if ((cb.room_slug != "hotandscottish") && (cb.room_slug != "roydz")) { sorryannouncement() } // ######################### // Vars for ease of use // ######################### var p1Members = {}; var p2Members = {}; var p3Members = {}; var blockMembers = {}; var blockWordList = {}; var keyWordList = {}; var ghostList = {}; var memberList = {}; var i=1; // var CONFIG_ADVERT_MINUTES = 10; // var EMOTE_FOLLOW = ' :psfollow'; // var EMOTE_TEAM = ' :teamsienna'; // var CONFIG_TWITTER_MINUTES = 5; var VERSION = '1.4.1', COMMAND_SHOW_LEADERBOARD = '!pslb', CONFIG_COLOR_LEADER = '#9f9', INTERVAL_MULTIPLIER = 60000, UPDATE_TIME = 5000, NL = '\n', user_total_tips = {}, user_last_tip_time = {}, last_top3 = '', leader_username, update_counter = 0, interval_counter = 0, silent_room = true; // Disabled caps until fix // var emotePattern = /^:/; // var capitalised = /^[A-Z][^A-Z]*$/; // For auto-silencing at least some of token_wh*re_c*nts usernames var twcRegex = /t.?k.?n.?wh.?r.?_c.?nt.?/i; cb.onMessage(function (msg) { // handle user commands // highlight leader if ((cb.settings.highlight == 'yes') && (msg.user == leader_username)) { msg.background = CONFIG_COLOR_LEADER; msg['m'] = " :psking " + msg['m']; } // schedule interval if (update_counter == 0){ scheduleInterval(); } if (!msg['X-Spam']){ silent_room = false; } // No Caps Disabled until fix // var parts = msg['m'].split(" "); // var cleaned = []; // for (var kk = 0; kk < parts.length; kk++) { // var word = parts[kk]; // if (emotePattern.test(word) || capitalised.test(word)) { // cleaned.push(word); // } else { // cleaned.push(word.toLowerCase()); // } // } // msg['m'] = cleaned.join(' '); // vars for ease of use var u = msg['user']; var m = msg['m']; var isMod = msg['is_mod']; var isFan = msg['in_fanclub']; var isModel = (u == cb.room_slug); var hasTokens = msg['has_tokens']; var hasTipped = msg['tipped_recently']; var isGrey = !(hasTokens || isMod || isModel || isFan); var modsAllowed = true; var exempt = (isModel || isMod); // ######################### // Commands for model and mods // ######################### if(m[0] == '/'){ // Is a command msg['X-Spam'] = true; if(isModel || (isMod && modsAllowed) ){ // IsModel or Mod var actionArray = m.substr(1).split(' '); if( isModel ){ if( actionArray.length >= 2){ switch(actionArray[0]) { case "addone": cb.sendNotice('Adding Party 1 '+actionArray[1]); setOne(actionArray[1]); break; case "removeone": cb.sendNotice('Removing Party 1 '+actionArray[1]); unsetOne(actionArray[1]); break; case "addtwo": cb.sendNotice('Adding Party 2 '+actionArray[1]); setTwo(actionArray[1]); break; case "removetwo": cb.sendNotice('Removing Party2 '+actionArray[1]); unsetTwo(actionArray[1]); break; case "addthree": cb.sendNotice('Adding Party 3 '+actionArray[1]); setThree(actionArray[1]); break; case "removethree": cb.sendNotice('Removing Party 3 '+actionArray[1]); unsetThree(actionArray[1]); break; case "addblock": cb.sendNotice('Adding Block '+actionArray[1]); setBlock(actionArray[1]); break; case "removeblock": cb.sendNotice('Removing Block '+actionArray[1]); unsetBlock(actionArray[1]); break; case "addword": cb.sendNotice('Adding Word '+actionArray[1],cb.room_slug); setBlockword(actionArray[1]); break; case "removeword": cb.sendNotice('Removing Word '+actionArray[1],cb.room_slug); unsetBlockword(actionArray[1]); break; case "addghost": cb.sendNotice('Adding Ghost '+actionArray[1], cb.room_slug); setGhost(actionArray[1]); break; case "removeghost": cb.sendNotice('Removing Ghost '+actionArray[1], cb.room_slug); unsetGhost(actionArray[1]); break; default: } }else if( actionArray.length == 1){ switch(actionArray[0].toLowerCase()) { case "showone": cb.sendNotice('Current L1', u); var n = ""; for (var user in p1Members) { n += "-- "+user+"\n"; } cb.sendNotice(n,u); break; case "showtwo": cb.sendNotice('Current L2', u); var n = ""; for (var user in p2Members) { n += "-- "+user+"\n"; } cb.sendNotice(n,u); break; case "showthree": cb.sendNotice('Current L3', u); var n = ""; for (var user in p3Members) { n += "-- "+user+"\n"; } cb.sendNotice(n,u); break; case "leader": sendLeaderboard(true, cb.room_slug); msg['X-Spam'] = true; break; case "pshelp": var n = ""; n += "Siennas Multi Bot Actions\n"; n += "---------------------------\n"; n += "/addone <membername> : Add One\n"; n += "/showone: List One\n"; n += "/addtwo <membername> : Add Two\n"; n += "/showtwo: List Two\n"; n += "/addthree <membername> : Add Three\n"; n += "/showthree: List Three\n"; n += "/leader: Shows Full Tippers List\n"; n += "/addword: Adds a word to block list\n"; cb.sendNotice(n,u); break; default: } } }else{ // Is a mod if( actionArray.length >= 2){ switch(actionArray[0]) { case "addone": cb.sendNotice('Adding Party 1 '+actionArray[1]); setOne(actionArray[1]); break; case "removeone": cb.sendNotice('Removing Party 1 '+actionArray[1]); unsetOne(actionArray[1]); break; case "addtwo": cb.sendNotice('Adding Party 2 '+actionArray[1]); setTwo(actionArray[1]); break; case "removetwo": cb.sendNotice('Removing Party 2 '+actionArray[1]); unsetTwo(actionArray[1]); break; case "addthree": cb.sendNotice('Adding Party 3 '+actionArray[1]); setThree(actionArray[1]); break; case "removethree": cb.sendNotice('Removing Party 3 '+actionArray[1]); unsetThree(actionArray[1]); break; case "addblock": cb.sendNotice('Adding Block '+actionArray[1], u); setBlock(actionArray[1]); break; case "removeblock": cb.sendNotice('Removing Block '+actionArray[1], u); unsetBlock(actionArray[1]); break; case "addword": cb.sendNotice('Adding Word '+actionArray[1], u); setBlockword(actionArray[1]); break; case "removeword": cb.sendNotice('Removing Word '+actionArray[1], u); unsetBlockword(actionArray[1]); break; case "addghost": cb.sendNotice('Adding Ghost '+actionArray[1], u); setGhost(actionArray[1]); break; case "removeghost": cb.sendNotice('Removing Ghost '+actionArray[1], u); unsetGhost(actionArray[1]); break; default: } }else if( actionArray.length == 1 ){ switch(actionArray[0].toLowerCase()) { case "showwords": cb.sendNotice('Current Blocked Words', u); var n = ""; for (var user in blockWordList) { n += "-- "+user+", "; } cb.sendNotice(n,u); break; case "showblock": cb.sendNotice('Current Blocked Users', u); var n = ""; for (var user in blockMembers) { n += "-- "+user+", "; } cb.sendNotice(n,u); break; case "pshelp": var n = ""; n += "Siennas Multi Bot Actions\n"; n += "---------------------------\n"; n += "/addone <membername> : Add King\n"; n += "\n"; n += "/addtwo <membername> : Add Knight\n"; n += "\n"; n += "/addthree <membername> : Add Lord\n"; cb.sendNotice(n,u); break; default: } } } } // No else, if its a command and not a model or a mod, do nothing }else{ // Isnt a command so treat is text chat if( isGrey ){ m = stripImages(m); msg['m'] = m; } // ######################### // Spam Messages from users // ######################### if( /(E+ *R+ *O* *H+ *O+ *O+ *K+ *U+ *P+|T+ *O+ *P+ *G+ *A+ *M+ *E+ *S+ *C+ *R+ *A+ *C+ *K+|d+ *e+ *a+ *l+ *n+ *e+ *w+ *s+|e+ *r+ *o+ *s+ *b+ *b+|EvaCamSessions|GIRLS4PARTY|NUDE4STRIP|pussy4show|ChaT4FrEE|BEST4CAMS|CAMNAKEDS|GIRLS2PARTY|STRIP4PLAY|MiaGoCam|FLIRT4SHOW|NUDE2STRIP|LIVE4PARTY|GIRLS4STRIP|JUST2PORN|PUSSY4STRIP|WET4GUYS|FLIRT4SHOW| MiaGoCam |tokenschaturbate|CAMS4PRIVATE|uhack| uhack|yahcam)/i.test(m) && !exempt ){ cb.sendNotice("You can shove your spam where the sun don't shine!", u); cb.sendNotice("Private notice: The user [ " + u + " ] needs to be blocked for Spam!", cb.room_slug, '#FF0000', '#FFFFFF', 'bold'); msg['X-Spam'] = true; return msg; } else if( /(PremiumCheat|premiumcheat|PREMIUMCHEAT)/i.test(m) && !exempt ){ msg['X-Spam'] = true; }else if( /(whore|slag|bitch)/i.test(m) && !exempt ){ cb.sendNotice("Please go and visit someone elses room that cares what you put!", u); msg['X-Spam'] = true; }else if( /(PerfectJena35|CherryJenny831|XBabyXJeni67|MelonJenna54|BendyJenny48|VelvetJeni11|SimpleJena345|FlurtyJen5|BBJenny67|FunJen18|LickityJennifer721|MsJenna766|MoistJenna262|Fem18)/i.test(m) && !exempt ){ cb.sendNotice("Private notice: The user [ " + u + " ] trying to post a Jen advert! ", cb.room_slug, '#FF0000', '#FFFFFF', 'bold'); msg['X-Spam'] = true; }else if (isBLOCK(u) && !exempt ) { msg['X-Spam'] = true; }else if ( isBLOCKWORD(m)){ cb.sendNotice("Sorry but your message has been blocked!", u); msg['X-Spam'] = true; }else if ( isKEYWORD(m)){ cb.sendNotice("Private notice: " + u + ": " + m + " ", cb.room_slug, '#FF0000', '#FFFFFF', 'bold'); msg['X-Spam'] = true; }else if( isGHOST(u) ){ cb.sendNotice("Ghost: " + u + ": " + m + " " ,'', '#FFECFF', '', ''); // ######################### // Sienna Ville // ######################### }else{ if (msg['user'] == 'roydz') { msg['m'] = " :rdzminion " + msg['m']; } else if ( isP3(u) ) { msg['background'] = '#' + cb.settings.p3BGColor; msg['c'] = '#' + cb.settings.p3TextColor; msg['m'] = ':' + cb.settings.p3Text + " " + msg['m']; } else if ( isP2(u) ) { msg['background'] = '#' + cb.settingsp2BGColor; msg['c'] = '#' + cb.settings.p2TextColor; msg['m'] = ':' + cb.settings.p2Text + " " + msg['m']; } else if ( isP1(u) ) { msg['background'] = '#' + cb.settings.p1BGColor; msg['c'] = '#' + cb.settings.p1TextColor; msg['m'] = ':' + cb.settings.p1Text + " " + msg['m']; } else if (msg['user'] == cb.room_slug) { msg['m'] = " :pscrown2 " + msg['m']; } } } return msg; }); cb.onTip(function (tip) { handleTip(tip.amount, tip.from_user); scheduleUpdate(); silent_room = false; }); cb.onEnter(function(user) { cb.sendNotice('Welcome ' + user['user'] + '! ' + cb.settings['msg1'],user['user'],'',cb.settings['msgcolor'],'bold'); }); // functions function handleTip(amount, user) { user_total_tips[user] = (user_total_tips[user] || 0) + amount; user_last_tip_time[user] = new Date().valueOf(); } function sortLeaderboard(){ var lb = []; for (var user in user_total_tips) { if (user_total_tips.hasOwnProperty(user)){ lb.push([user_total_tips[user], -user_last_tip_time[user], user]); } } if (lb.length > 0){ lb.sort(function(a, b){ var r,i; for (i=0; i < a.length; i++){ if (a[i] < b[i]){ return 1; } if (a[i] > b[i]){ return -1; } } return 0; }); leader_username = lb[0][2]; } return lb; } function formatRanking(leaderboard, rank){ if (rank < leaderboard.length) { var p = leaderboard[rank]; return p[2] + ' (' + p[0] + ' token' + (p[0]!=1 ? 's' : '') + ')'; } else { return '--'; } } function getTop3(leaderboard){ var rank, result=''; for (rank=0; rank<3; rank++){ if (rank>0){ result += '|'; } if (rank < leaderboard.length){ result += leaderboard[rank][2]; } } return result; } function sendLeaderboard(force, to_user) { var lb = sortLeaderboard(), l = to_user ? lb.length : 3, out = 'Tippers Leaderboard'; if (!force) { var top3 = getTop3(lb); if (top3 == last_top3){ return; } last_top3 = top3; } if (l<3) { l=3; } if (l < lb.length) { out += ' Top 3'; } if (to_user){ out += ''; } for (var rank=0; rank<l; rank++) { out += NL + '' + (rank+1) + '. ' + formatRanking(lb, rank); } cb.sendNotice(out, to_user); if (!to_user){ scheduleInterval(); } } function scheduleUpdate(){ var print_on_tip = cb.settings.print_on_tip; if (print_on_tip != 'never') { var counter = ++update_counter; cb.setTimeout(function(){ if (update_counter == counter){ sendLeaderboard(print_on_tip == 'always'); } }, UPDATE_TIME); } } function scheduleInterval(){ var interval = cb.settings.print_interval; if (interval > 0) { var counter = ++interval_counter; cb.setTimeout(function(){ if (interval_counter == counter){ sendLeaderboard(!silent_room); } }, interval*INTERVAL_MULTIPLIER); silent_room = true; } } function chatAd() { var msg; while (cb.settings['msg' + i] == 0) { //skip empty messages i++; if (i > 5) { //loop back to first message i=1; } } msg = cb.settings['msg' + i]; i++; if (i > 5) { //loop back to first message i=1; } cb.sendNotice(msg,'','',cb.settings['msgcolor'],'bold'); cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); } cb.setTimeout(chatAd, (cb.settings.chat_ad * 60000)); function init() { } init(); // ######################### // Function on Groups // ######################### function isP1(username) { return (username in p1Members); } function isP2(username) { return (username in p2Members); } function isP3(username) { return (username in p3Members); } function isBLOCK(username) { return (username in blockMembers); } function isBLOCKWORD(username) { return (username in blockWordList); } function isKEYWORD(username) { return (username in keyWordList); } function isGHOST(username) { return (username in ghostList); } function makeP1(username) { p1Members[username] = {'u': 1}; } function makeP2(username) { p2Members[username] = {'u': 1}; } function makeP3(username) { p3Members[username] = {'u': 1}; } // ######################### // Adding and Removing Group Members // ######################### // // Party 1 function setOne(username) { p1Members[username] = {'u': 1}; } function unsetOne(username) { delete p1Members[username]; } // Party 2 function setTwo(username) { p2Members[username] = {'u': 1}; } function unsetTwo(username) { delete p2Members[username]; } // Party 3 function setThree(username) { p3Members[username] = {'u': 1}; } function unsetThree(username) { delete p3Members[username]; } // Blocker function setBlock(username) { blockMembers[username] = {'u': 1}; } function unsetBlock(username) { delete blockMembers[username]; } // Block Words function setBlockword(username) { blockWordList[username] = {'u': 1}; } function unsetBlockword(username) { delete blockWordList[username]; } // Key Words function setKeyword(username) { keyWordList[username] = {'u': 1}; } function unsetKeyword(username) { delete keyWordList[username]; } // Ghosts function setGhost(username) { ghostList[username] = {'u': 1}; } function unsetGhost(username) { delete ghostList[username]; } function stripImages(m){ var words = m.split(' '); m = ""; for (var i = 0; i < words.length; i++){ if ( /(:[a-z]*)/i.test(words[i]) && words[i].length > 3){ m += "[Grey Emotes Not Allowed]"+ " "; }else{ m += words[i]+ " "; } } return m.trim(); } function sorryannouncement() { cb.chatNotice('Sorry, this multibot is made for hotandscottish room, it is very room specific, please make your own Bot', '', '', '#ff0000', 'bold'); cb.setTimeout(sorryannouncement, 20000) } // ######################### // Get Member Lists // ######################### function grabSettings() { cb.log("starting grabbing settings"); // Get Level 1 members if (cb.settings.p1MemberList) { var p1MemberSettings = cb.settings.p1MemberList.split(','); for (var ii = 0; ii < p1MemberSettings.length; ii++) { var clean = p1MemberSettings[ii].toLowerCase().replace(/ /g,""); p1Members[clean] = {'u': 1}; } } // Get Level 2 if (cb.settings.p2MemberList) { var p2MemberSettings = cb.settings.p2MemberList.split(','); for (var ii = 0; ii < p2MemberSettings.length; ii++) { var clean = p2MemberSettings[ii].toLowerCase().replace(/ /g,""); p2Members[clean] = {'u': 1}; } } // Get Level 3 if (cb.settings.p3MemberList) { var p3MemberSettings = cb.settings.p3MemberList.split(','); for (var ii = 0; ii < p3MemberSettings.length; ii++) { var clean = p3MemberSettings[ii].toLowerCase().replace(/ /g,""); p3Members[clean] = {'u': 1}; } } // Get Blocked members if (cb.settings.blockMemberList) { var blockMemberSettings = cb.settings.blockMemberList.split(','); for (var ii = 0; ii < blockMemberSettings.length; ii++) { var clean = blockMemberSettings[ii].toLowerCase().replace(/ /g, ""); blockMembers[clean] = {'u': 1}; } } // Get Words if (cb.settings.blockWordList) { var blockWordSettings = cb.settings.blockWordList.split(','); for (var ii = 0; ii < blockWordSettings.length; ii++) { var clean = blockWordSettings[ii].toLowerCase().replace(/ /g,""); blockWordList[clean] = {'m': 1}; } } // Get Key Words if (cb.settings.keyWordList) { var keyWordSettings = cb.settings.keyWordList.split(','); for (var ii = 0; ii < keyWordSettings.length; ii++) { var clean = keyWordSettings[ii].toLowerCase().replace(/ /g,""); keyWordList[clean] = {'m': 1}; } } // Get Ghost members if (cb.settings.ghostList) { var ghostMemberSettings = cb.settings.ghostList.split(','); for (var ii = 0; ii < ghostMemberSettings.length; ii++) { var clean = ghostMemberSettings[ii].toLowerCase().replace(/ /g, ""); ghostList[clean] = {'u': 1}; } } cb.log("finished grabbing settings"); } grabSettings();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.