Bots Home
|
Create an App
XTheHornyTwinkX Notice
Author:
xthehornytwinkx
Description
Source Code
Launch Bot
Current Users
Created by:
Xthehornytwinkx
/******************************************************* * Title: XTheHornyTwinkX Notice * By: XTheHornyTwinkX * /********** App Data **********/ var app = { name : "'XTheHornyTwinkX Notice'", /* Script name */ type : 'Bot', /* Script type: bot|app */ version : '1.6', /* Internal: Script version number */ build : '.017', /* Internal: Script build number */ date : '2015.03.15', /* Internal: Script build date */ acg : 'acrazyguy', /* main developer */ pkm : 'phatkatmeow', /* main developer */ rx : 'robx7', /* Assoc developer */ sf : 'sartfack', bli : 'birdylovesit', bf : 'blazefyre', CD : 'dump' /* debug: quick overview */ }; /***** App colours *****/ var COLOR = { DEVELOPER : '#D9F7F7', NOTICE : '#6900CC', /* Chat notice colour - Blue-purple */ RED : '#FF1407', MRED : '#D80A00', HIGHLIGHT : '#EEE5FF', /* Ticket holder Highlight colour -Pastel purple */ SYNTAX : '#995B00', /* Usage notice colour - Brownish */ AMBER : '#E56B00', /* Amber */ MOD : '#DC0000', /* Moderator red */ HVTEXT : '#D80A00', /* Text colour for hi-vis notices - Red */ HVBACK : '#FFFFBF', /* Background colour for hi-vis notices - Yellow */ HELP : '#144D8C', /* Text colour for help - Blue-grey */ INFO : '#144D8C', /* neutral notice - Blue-grey */ MAG : '#E509E5', /* Magenta */ BLI : '#DDFFCC', /* Pastel green */ BF : '#FFE0EA', BLUE : '#000099' }; /***** App Commands *****/ var COMMAND = { CN : 'cn', /* Send general notice to the public */ BC : 'bc', /* Send private notice to the broadcaster (mods only) */ TM : 'tm', /* Send private notice to mods as a group */ TV : 'tv', /* Send private notice to s viewer */ CNHELP : 'cnhelp', /* Send command list to mod/broadcaster */ TPRICE : 'tprice', /* Assign ticket price. */ ADD : 'add', /* Add one or more viewers to ticket list */ AU : 'au', /* Add user(s) alias */ DEL : 'del', /* Delete a user */ DU : 'du', /* Delete alias */ TLIST : 'tlist', /* Lists users who paid for a ticket */ EMAIL : 'email', /* Detect email in tip note */ EMLIST : 'emlist', /* List recorded emails */ SIL : 'sil', UNSIL : 'unsil', SLIST : 'slist', EXPORT : 'export', PRELIST : 'prelist' }; /********** Variables **********/ var FLAG = { price : false, advance : false, email : false, dev : false, bli : true, bf : true, asc : false }; var ticketsSold = 0; var tipTot = 0; var startTime = new Date(); var onlyMods = "* Command is only available to moderators."; var roomHost = cb.room_slug; var dashLine = "------------------------------------------------------------"; /***** Arrays *****/ var ticketList = []; var silList = []; var devList = []; var emList = { name : [], email : [] }; /************************/ /***** API Functions ****/ /************************/ cb.settings_choices = [ { name: 'advance', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'No', label: "Use 'CrazyNote' to sell advance tickets for a future 'CrazyTicket' show?" }, { name: 'buyin', type: 'int', //minValue: 1, //defaultValue: 25, label: "Enter ticket price ONLY if used for advance ticket sales OR 'CrazyTicket' backup.", required: false }, { name: 'email', type: 'choice', choice1: 'Yes', choice2: 'No', defaultValue: 'No', label: "Record ticket buyer's email address if including a bonus in ticket price?" } ]; var ticketPrice = parseInt(cb.settings.buyin,10); if (cb.settings.advance === 'Yes') FLAG.advance = true; if (cb.settings.buyin) FLAG.price = true; if (cb.settings.email === 'Yes') FLAG.email = true; cb.onEnter(function(viewer) { if (roomHost === app.bli) cb.sendNotice("\n"+dashLine+"\n* :alert1 Birdy does NOT do 'flashes for tips', requests, PMs or Private shows.\n"+dashLine+"\n",viewer['user'],COLOR.BF,COLOR.MRED,'bold'); }); cb.onTip(function(tip) { var viewer = tip['from_user']; var tMsg = tip['message']; var tipAmount = parseInt(tip['amount'],10); var address = ""; var idx = 0; tipTot += tipAmount; if (FLAG.email) { address = tMsg.match(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) || ""; idx = emList.name.indexOf(viewer); if (idx > -1 && !emList.email[idx]) { emList.email[idx] = address; cb.sendNotice(dashLine+"\n* Missing email address for '"+viewer+"' recorded.\n"+dashLine,roomHost,COLOR.HVBACK,COLOR.HVTEXT,'bold'); } } if ((tipAmount >= ticketPrice) && FLAG.price) { if (!cbjs.arrayContains(ticketList,viewer)) { user('add',viewer,false); if (FLAG.advance) cb.sendNotice("* Advance ticket sold to '" + viewer + "'",'','',COLOR.NOTICE,'bold'); if (FLAG.email) { address = tMsg.match(/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/i) || ""; emList.name.push(viewer); emList.email.push(address); if (!address) { cb.sendNotice("* You may have forgotten your email address in the tip note.",viewer,'',COLOR.RED,'bold'); cb.sendNotice("* Viewer '" +viewer+ "' may have forgotten their email address in the tip note.",roomHost,COLOR.HVBACK,COLOR.HVTEXT,'bold'); cb.sendNotice("* Viewer '" +viewer+ "' may have forgotten their email address in the tip note.",'','',COLOR.MOD,'bold','red'); } else { cb.sendNotice(dashLine+"\n* Email address recorded.\n"+dashLine,roomHost,COLOR.HVBACK,COLOR.HVTEXT,'bold'); } } // End if FLAG.email } } }); cb.onMessage(function (msg) { var regexCommandSplit = '^' + '/' + '(\\S+)(?:\\b\\s*)(.*)?'; var regexListSplit = /[,\s]+/; var reCmdSplit = new RegExp(regexCommandSplit); var cmdSplit = msg['m'].match(reCmdSplit); var cmd; var cmdval; var cmdValArray; if ( cmdSplit ) { cmd = cmdSplit[1]; cmdval = cmdSplit[2]; if ( cmdval != null ) { cmdval = cmdval.replace(/^\s+|\s+$/g,''); } if ( cmdval != null ) { cmdValArray = cmdval.split(regexListSplit); } else { cmdValArray = ''; } } var muteOwlre = /(\bowl)|(:[a-z0-9]*owl[a-z0-9]*)/i; var repGIFre = /:[a-z0-9]*owl[a-z0-9]*/i // for convenience var m = msg['m']; var u = msg['user']; var isMod = msg['is_mod']; var isRoomHost = (u === roomHost); var isACG = (u === app.acg); var viewer, toViewer; if (/^(\?|!)/.test(m)) { msg['X-Spam'] = true; return cb.sendNotice("* " +app.name+ ": Incorrect command prefix.",u,'',COLOR.MOD,'bold'); } if (cbjs.arrayContains(silList,u)) { msg['X-Spam'] = true; return; } if ((roomHost === app.bli || roomHost === app.bf) && muteOwlre.test(m)) { msg['X-Spam'] = true; cb.sendNotice("*CN* '"+u+": "+m,app.acg,'',COLOR.INFO,'bold'); cb.sendNotice("*CN* '"+u+": "+m.replace(repGIFre,"*Owl GIF*"),'birdylovesit','',COLOR.RED,'bold'); } if (FLAG.asc) { msg['m'] = m.replace(/[Aa]+[Ss\s\W]+[Cc\s\W]+[Ee3\s\W]+[Nn\s\W]+([DdTt]?)+/g,"Twerk"); m = msg['m']; msg['m'] = m.replace(/[Ss]+[Aa\s\W]+[Ii\s\W]+[Yy\s\W]+[Aa\s\W]+[Nn]+/g,"Silly"); m = msg['m']; } /***** Ok, let's start processing commands *****/ switch (cmd) { /***** Public Notice *****/ case COMMAND.CN: if (isMod || isRoomHost || (isACG && FLAG.dev)) { if (cmdval) { cb.sendNotice("* " + cmdval.substr(0,1).toUpperCase()+cmdval.substr(1),'','',COLOR.NOTICE,'bold'); } else { cb.sendNotice("* Syntax: /cn <message>",u,'',COLOR.SYNTAX,'bold'); } } else { cb.sendNotice(onlyMods,u,'',COLOR.NOTICE,'bold'); } break; /***** Message to Broadcaster *****/ case COMMAND.BC: if (isMod || (isACG && FLAG.dev)) { if (cmdval) { cb.sendNotice("* "+ (isMod ? u.toUpperCase() + ": " : "--- CrazyNote App Support --- *\n* ") + cmdval,roomHost,COLOR.HVBACK,COLOR.HVTEXT,'bold'); cb.sendNotice("* "+ (isMod ? u.toUpperCase() + ": " : "--- CrazyNote App Support --- *\n* ") + cmdval,u,COLOR.HVBACK,COLOR.HVTEXT,'bold'); } else { cb.sendNotice("* Syntax: /bc <message>",u,'',COLOR.SYNTAX,'bold'); } } else { cb.sendNotice(onlyMods,u,'',COLOR.NOTICE,'bold'); } break; /***** Message to Mods *****/ case COMMAND.TM: if (isMod || isRoomHost) { if (cmdval) { cb.sendNotice("* "+ u.toUpperCase() + ": " + cmdval,'',COLOR.HVBACK,COLOR.HVTEXT,'bold','red'); } else { cb.sendNotice("* Syntax: /tm <message>",u,'',COLOR.SYNTAX,'bold'); } } else { cb.sendNotice(onlyMods,u,'',COLOR.NOTICE,'bold'); } break; /***** Message to Viewer *****/ case COMMAND.TV: viewer = cmdValArray[0]; cbjs.arrayRemove(cmdValArray,cmdValArray[0]); toViewer = cbjs.arrayJoin(cmdValArray," "); if (isMod || isRoomHost || (isACG && FLAG.dev)) { if (cmdval) { cb.sendNotice("*CrazyNote* " + toViewer,viewer,'',COLOR.RED,'bold'); } else { cb.sendNotice("* Syntax: /tv viewername message",u,'',COLOR.SYNTAX,'bold'); } } else { cb.sendNotice(onlyMods,u,'',COLOR.NOTICE,'bold'); } break; /***** Ticket Price *****/ case COMMAND.TPRICE: if (isMod || isRoomHost || (isACG && FLAG.dev)) { if(cmdval) { if (parseInt(cmdval,10)) { ticketPrice = cmdval; cb.sendNotice("* Ticket price set at " + cmdval + " tokens.",u,'',COLOR.NOTICE,'bold'); FLAG.price = true; } else { cb.sendNotice("* '" + cmdval + "' not a valid argument.",u,'',COLOR.NOTICE,'bold'); } } else { cb.sendNotice("* Syntax: " + '/' + COMMAND.TPRICE + " <price>",u,'',COLOR.SYNTAX,'bold'); } } else { cb.sendNotice(onlyMods,u,'',COLOR.NOTICE,'bold'); } break; /***** Help *****/ case COMMAND.CNHELP: if (isMod || isRoomHost) cb.sendNotice(getCommandList(),u,'',COLOR.HELP,'bold'); else cb.sendNotice(onlyMods,u,'',COLOR.NOTICE,'bold'); break; /***** Add user(s) *****/ case COMMAND.ADD: case COMMAND.AU: if (isMod || isRoomHost) { if (cmdval) { if (cmdValArray.length > 1) { for (var i=0; i<cmdValArray.length; i++) { if ( !user('check',cmdValArray[i]) ) { user('add',cmdValArray[i],false); } } // end for } else { user('add',cmdval,false); } // end if cmdValArray.length } else { if ( !user('check',msg['user']) ) { user('add',msg['user'],false); } } // end if cmdval } break; /***** Delete user *****/ case COMMAND.DEL: case COMMAND.DU: if (isMod || isRoomHost) { if (cmdval) { if (user('check',cmdval)) { user('del',cmdval); } } } break; /***** Show ticket list *****/ case COMMAND.TLIST: cb.sendNotice(dashLine+"\nTicket holders: " + ticketList.length + "\n" + dashLine + "\n" + (ticketList.length < 1 == true ? "No tickets sold!" : cbjs.arrayJoin(ticketList,", ")) + "\n"+dashLine,u,'',COLOR.NOTICE,'bold'); break; case COMMAND.SIL: if (isMod || isRoomHost) { if (cmdval) { if (!cbjs.arrayContains(silList,cmdval)) { silList.push(cmdval); } } } break; case COMMAND.UNSIL: if (isMod || isRoomHost) { if (cmdval) { cbjs.arrayRemove(silList,cmdval); } } break; case COMMAND.SLIST: if (isMod || isRoomHost || (isACG && FLAG.dev)) cb.sendNotice(dashLine+"\n* "+app.name+" Silenced: "+silList.length+"\n"+dashLine+"\n"+ (silList.length < 1 == true ? "* Empty." : cbjs.arrayJoin(silList,", "))+"\n"+dashLine,u,'',COLOR.NOTICE,'bold'); break; case COMMAND.EXPORT: if (isMod || isRoomHost) { msg['m'] = "/add " + cbjs.arrayJoin(ticketList,", "); } break; case COMMAND.EMAIL: if (isMod || isRoomHost) { FLAG.email ? FLAG.email = false : FLAG.email = true; cb.sendNotice("* Detection of email in tip note is now " + (FLAG.email == true ? "ON." : "OFF."),'','',COLOR.NOTICE,'bold','red'); cb.sendNotice("* Detection of email in tip note is now " + (FLAG.email == true ? "ON." : "OFF."),roomHost,COLOR.HVBACK,COLOR.HVTEXT,'bold'); } break; case COMMAND.EMLIST: if (isMod || isRoomHost || isACG) { var outStr = ''; for (i=0; i<emList.name.length; i++) outStr += emList.name[i] + " - " + emList.email[i]+"\n"; cb.sendNotice(dashLine+"\n* List of email addresses this session: "+emList.name.length+"\n"+dashLine+"\n"+outStr+dashLine,u,'',COLOR.NOTICE,'bold'); } break; case 'bli': if (u===app.bli) FLAG.bli ? FLAG.bli = false : FLAG.bli = true; break; case 'bf': if (u===app.bf) FLAG.bf ? FLAG.bf = false : FLAG.bf = true; break; case 'asc': if (isRoomHost || isMod || (isACG && FLAG.dev)) FLAG.asc ? FLAG.asc = false : FLAG.asc = true; cb.sendNotice(FLAG.asc ? "* TWERK" : "* ASCEND",u,'',COLOR.NOTICE,'bold'); break; } // switch /* Dev Dump */ // Internal command for debugging purposes if (cmd==app.CD) { if (u===app.acg||u===app.pkm||u===app.rx||app.sf) { var date = new Date(); if(cmdval=='dev'){if(!cbjs.arrayContains(devList,u)){devList.push(u);FLAG.dev=true;}else{cbjs.arrayRemove(devList,u);FLAG.dev=false;}}else{ cb.sendNotice("* App info: (Name: "+app.name+"), (Type: "+app.type+"), (Version: "+app.version+", Build: "+app.build+"), (Time started: "+startTime+"), (Time now: "+date+")\n* (CT price: "+ticketPrice+"), (Total tipped: " +tipTot+ ")\n* Flags: (FLAG.price: "+FLAG.price+"), (FLAG.advance: "+FLAG.advance+"), (FLAG.email: "+FLAG.email+"), (FLAG.dev: "+FLAG.dev+")",u,'',COLOR.INFO,''); } } // end if u||u||u } // end if cmd=app.CD if (cbjs.arrayContains(devList,u)) { msg['background'] = COLOR.DEVELOPER; // Message-background-colour if (isACG) msg['c'] = COLOR.BLUE; } // Special highlight for app.bli and app.bf if (u===app.bli && FLAG.bli) msg['background'] = COLOR.BLI; if (u===app.bf && FLAG.bf) msg['background'] = COLOR.BF; if (m[0] == '/') msg['X-Spam'] = true; //suppress all command echoing in chat return msg; }); // onMessage() /********** Functions **********/ function getCommandList() { var cmdlist = "\n----- CRAZYNOTE COMMANDS -----\n\n"; cmdlist += '/'+COMMAND.CN + " <message> - Sends a one time public notice\n\n"; cmdlist += '/'+COMMAND.BC + " <message> - Sends a private message to the broadcaster\n\n"; cmdlist += '/'+COMMAND.TM + " <message> - Sends a private message to the moderators as a group\n\n"; cmdlist += '/'+COMMAND.TV + " <viewer> <message> - Sends a private message to a viewer.\n\n"; cmdlist += '/'+COMMAND.TLIST + " - Sends a list of ticket holders to the chat\n\n"; cmdlist += '/'+COMMAND.TPRICE + " <price> - Tells CrazyNote the ticket price that CrazyTicket will be using\n"; return cmdlist; } function user(command,user,sendpass) { if ((command == 'add') && (!cbjs.arrayContains(ticketList,user))) ticketList.push(user); if ((command == 'del') && (cbjs.arrayContains(ticketList,user))) cbjs.arrayRemove(ticketList,user); } // end function user function printObject(o) { var out=""; for (var p in o) { out += "* "+p+": "+o[p]+"\n"; } return out; } function init() { //user('add',roomHost,false); // add broadcaster to the ticketlist var appInfo = dashLine+"\n* "+app.name+" by CrazyWare\n* Version: "+app.version+app.build+" ("+app.date+")"; appInfo += "\n* Type /cnhelp for a list of available commands.\n"+dashLine; cb.sendNotice(appInfo,roomHost,'',COLOR.INFO,'bold'); var setupStr = ""; if (FLAG.price) setupStr += "\n* Backup mode for 'CrazyTicket' is enabled."; if (FLAG.advance) setupStr += "\n* Advance ticket sales are enabled."; if (FLAG.email) setupStr += "\n* Email address recording is enabled."; if (setupStr) cb.sendNotice(dashLine+setupStr+"\n"+dashLine,roomHost,COLOR.HVBACK,COLOR.HVTEXT,'bold'); cb.sendNotice("\n *Broadcaster '" + roomHost + "' is running "+app.name+".\n\nType /cnhelp for a list of available commands.\n",'','',COLOR.NOTICE,'bold','red'); } /*** Ok, let's kick this off ***/ init(); /* ..gspp.. .d$$S$$S$$Sb. dS$$S$$S$PS$$Sb :$$S$S^^'";TSS$$; ; SSP' : T$$SS/; $$ \ `^^'/ :$ `-ggd: :.=-. .-=.:SSS ; <@>` <@> $$$$ : SS$$ ' -. $$S; ' .--. s$$S _ `. `--' .$$S$; .-"" "-._.-'`.__.' $$$S; : :S$$S ; :l "-. '^S$$b /`-. ;: " .--""""""^-. :"-. "" : /) ; ;`- : /: : :`- `. \ / '-.t `+.__ `. ;/ .-' -.; ; "-. "-. : .-" --: ; ;. "^:" .-""-.`.; : -^"`. "-.+' \/ ; `. "- ; : .^. / \ .-" "-. .' `._.-" "-._.-": ; : ; : : : ; \ ; ; : ; ; : ; : : / ; : \ ; ; : : ; ; : : : ; ; ; ; c : : : : ; /""--..__ ; : : ""--..__ ; ; "-. --..__ ""--..__: :`-._ "-._ "" _; ; "-._ """---...---""" :**/
© Copyright Chaturbate 2011- 2026. All Rights Reserved.