Bots Home
|
Create an App
Blapp!
Author:
prnsvh
Description
Source Code
Launch Bot
Current Users
Created by:
Prnsvh
/* * ------ BLAPP by Prnsvh ------ * */ // blapp var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; var blapp_command = 'blapp'; var unblapp_command = 'unblapp'; var blapp_detail_command = 'detail'; var change_refresh_time_command = 'refresh'; var blapped = []; function log(msg) { cb.log(msg); } function blapp(username, time, originator) { if(username == originator) { cb.chatNotice('You cannot blapp yourself ' + originator + "!", originator); } else { log(username + ' is being blapped by ' + originator); if(username in blapped) { cb.chatNotice(username + ' already blapped!', originator); } else { if(username == cb.room_slug) { cb.chatNotice(originator + ' tried to blapp you!', cb.room_slug); cb.chatNotice('You cannot blapp the broadcaster!', originator); } else { var blapptime = new Date(); var timeint = parseInt(time, 10); blapped[username] = {'time': blapptime, 'duration': timeint}; cb.chatNotice(username + ' has been blapped by ' + originator + (timeint === 0 ? '' : ' for ' + timeint + ' seconds') + '!'); log(username + ' is now blapped ' + (timeint === 0 ? 'indefinitely' : 'for ' + timeint + ' seconds')); } } } updateBlapperPanel(); } function unblapp(username, originator) { if(username == originator) { cb.chatNotice('You cannot unblapp yourself ' + originator + "!", originator); } else { log(username + ' is being unblapped by ' + originator); if(username in blapped) { delete blapped[username]; cb.chatNotice(username + ' has been forgiven by ' + originator + ' and is no longer blapped...'); log(username + ' is now unblapped'); } else { cb.chatNotice(username + ' was not blapped!', originator); } } updateBlapperPanel(); } function is_blapped(username) { if(username in blapped) { var blappdata = blapped[username]; if(blappdata.duration === 0) { log('(info) ' + username + ' blapped indefinitely'); return true; } var remaining = blappifiedfor(username); if(remaining == 0) { log('(info) ' + username + ' released'); unblapp(username, 'the powers of justice; a.k.a. "he served his time"'); return false; } log('(info) ' + username + ' blapped for another ' + remaining + ' seconds'); return true; } else { log('(info) ' + username + ' is not blapped'); return false; } } function blappifiedfor(username) { if(username in blapped) { var blappdata = blapped[username]; if(blappdata.duration === 0) { return -1; } var now = new Date(); var released = new Date(blappdata.time.getTime()); released.setSeconds(released.getSeconds() + blappdata.duration); return Math.max(0, Math.ceil((released.getTime() - now.getTime()) / 1000)); } return 0; } function blappify(msg) { log('blappify: ' + msg); var replacement = 'bla'; if(cb.settings.char_seq == 'random letters') { replacement = ''; for(var i = 0; i < 20; i++) { replacement += alphabet.charAt(Math.floor(Math.random() * alphabet.length)); } } var replacementl = replacement.length; var retv = ''; var modindex = 0; for(var j = 0, len = msg.length; j < len; j++) { if (msg[j] == ' ') { retv += ' '; modindex = 0; } else { if(/[.,?!;:]/.test(msg[j])) { retv += msg[j]; } else { retv += replacement[modindex%replacementl]; } modindex++; } } return retv; } function countBlapped() { var cnt = 0; for(var prop in blapped) { if(is_blapped(prop)) { cnt++; } } return cnt; } function blappDetails(user) { log('sending details to ' + user); cb.chatNotice('== Blapp! ' + countBlapped() + ' users blapped ==', user); for(var prop in blapped) { if (blapped.hasOwnProperty(prop)) { var remaining = blappifiedfor(prop); cb.chatNotice(prop + ' is blapped ' + (remaining > 0 ? 'for another ' + remaining + ' seconds' : 'indefinatily'), user) } } } function updateBlapperPanel() { cb.drawPanel(); } // hooks cb.settings_choices = [ {name:'allow_blapp', label:'Allowed to blap', type:'choice', choice1:'allow broadcaster to blapp', choice2:'allow broadcaster and mods to blapp'}, {name:'char_seq', label:'Blabla-type', type:'choice', choice1:'blablabla', choice2:'random letters'}, //{name:'allow_tip_for_freedom', label:'Tip for freedom', type:'choice', choice1:'yes', choice2:'no'}, {name:'refresh_time', label:'Refresh', type:'choice', choice1:'very fast (every second - might cause lagging in busy rooms)', choice2:'fast (every 5 seconds)', choice3:'medium (every 10 seconds)', choice4:'slow (every 30 seconds)', choice5:'very slow (every 60 seconds - almost no overhead)', choice6:'off'} ]; cb.onDrawPanel(function (user) { if(user == cb.room_slug) // broadcaster panel --> TODO: modcheck (currently not supported) { return { 'template':'3_rows_of_labels', 'row1_label':'Users blapped:', 'row1_value':countBlapped(), 'row2_label':'To blapp:', 'row2_value':'/blapp username [time]', 'row3_label':'To unblapp:', 'row3_value':'/unblapp username' }; } else if(is_blapped(user)) // blapped panel { var remaining = blappifiedfor(user); return { 'template':'3_rows_11_21_31', 'row1_value':'', 'row2_value':'You are blapped' + (remaining > 0 ? ' for another ' + remaining + ' seconds!' : '!'), 'row3_value':'' }; } else // regular panel { return { 'template':'3_rows_11_21_31', 'row1_value':'Blapp mode:', 'row2_value':(cb.settings.allow_blapp == 'allow broadcaster and mods to blapp') ? 'Broadcaster and mods can blapp.' : 'Only broadcaster can blapp.', 'row3_value':'' }; } }); cb.onMessage(function (msg) { // vars for ease of use var m = msg['m']; var u = msg['user']; // check for action if(m[0] == '/') { // don't print commands msg['X-Spam'] = true; // check if user can perform actions var broadcasteronly = (cb.settings.allow_blapp == 'allow broadcaster to blapp'); if(broadcasteronly && u != cb.room_slug) { cb.chatNotice('Only the broadcaster can blapp!', u); } else if(!broadcasteronly && !msg['is_mod'] && u != cb.room_slug) { cb.chatNotice('Only the broadcaster and moderators can blapp!', u); } else { var command = m.substr(1); var commandparts = command.split(' '); if(commandparts[0] == blapp_command && commandparts.length > 1) // BLAPP { var timeout = 0; if(commandparts.length > 2 && !isNaN(commandparts[2])) { timeout = commandparts[2]; } blapp(commandparts[1], timeout, u); } else if(commandparts[0] == unblapp_command && commandparts.length > 1) // UNBLAPP { unblapp(commandparts[1], u); } else if(commandparts[0] == blapp_detail_command) // DETAIL { blappDetails(u); } else if(commandparts[0] == change_refresh_time_command && commandparts.length > 1 && !isNaN(commandparts[1])) // REFRESH { updateRefreshTime(commandparts[1]); } } } else if(is_blapped(u)) { m = blappify(m); var remaining = blappifiedfor(u); if(remaining > 0) { cb.chatNotice('You are blapped for another ' + remaining + ' seconds!', u); } } msg['m'] = m; return msg; }); // auto update panel every X seconds var updatetime = 0; function initAutoUpdate() { if(cb.settings.refresh_time == 'very fast (every second - might cause lagging in busy rooms)') { updatetime = 1000; } else if(cb.settings.refresh_time == 'fast (every 5 seconds)') { updatetime = 5000; } else if(cb.settings.refresh_time == 'medium (every 10 seconds)') { updatetime = 10000; } else if(cb.settings.refresh_time == 'slow (every 30 seconds)') { updatetime = 30000; } else if(cb.settings.refresh_time == 'very slow (every 60 seconds - almost no overhead)') { updatetime = 60000; } if(updatetime > 0) { setTimeout(autoUpdateBlapperPanel, updatetime); } } function updateRefreshTime(seconds) { var restart = (updatetime == 0); seconds = Math.max(0, parseInt(seconds)); updatetime = seconds * 1000; if(updatetime > 0) { cb.chatNotice('Blappscreen will update every ' + seconds + ' seconds.'); if(restart) { autoUpdateBlapperPanel(); } } else { cb.chatNotice('Blappscreen will not update automatically, updates will happen if actions are performed.'); } } function autoUpdateBlapperPanel() { updateBlapperPanel(); if(updatetime > 0) { setTimeout(autoUpdateBlapperPanel, updatetime); } } initAutoUpdate();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.