Bots Home
|
Create an App
Rayssa Special Bot
Author:
edy1989
Description
Source Code
Launch Bot
Current Users
Created by:
Edy1989
/************************************************************* ** ** Title: Gender Bot ** Author: tablesalt90 - tablesalt90@gmail.com - @tablesalt90 ** Version: 1.0 ** Description: Simple Chat Bot that adds Gender Emotes to messages ** *************************************************************/ /* * Setup vars */ var botVersion = "1.0"; var botMsgBg = '#D32B2B'; /* * handle messages from users */ cb.onMessage(function(message) { var gender = message['gender']; var genderStr = ""; switch (gender) { case 'm': genderStr = ':avatar_gen_male'; break; case 'f': genderStr = ':avatar_gen_female'; break; case 's': genderStr = ':avatar_gen_trans'; break; case 'c': genderStr = ':avatar_gen_couple'; break; default: genderStr = ':avatar_gen_unknown'; break; } message['m'] = genderStr + ' ' + message['m']; }); //end onMessage function announceBot() { statusMsg = '*** Gender Bot v. ' + botVersion + ' *** by tablesalt90\n'; return statusMsg; } cb.chatNotice(announceBot(),'', botMsgBg,'','bold'); var colors = []; function to_hex(value){ var str = value.toString(16); if (str.length == 1){ str = '0' + str; } return str; } function html_color(r, g, b){ return '#' + to_hex(r) + to_hex(g) + to_hex(b); } function pick_color(){ var r = Math.random(); var g = Math.random(); var b = Math.random(); var max = Math.max(r, g, b); r = Math.round(128 * Math.pow(r/max, 3.)); g = Math.round(128 * Math.pow(g/max, 3.)); b = Math.round(128 * Math.pow(b/max, 3.)); return html_color(r,g,b); } function get_user_color(user){ if (typeof(colors[user]) == 'undefined'){ set_user_color(user); } return colors[user]; } function set_user_color(user){ colors[user] = pick_color(); } cb.onMessage(function (msg){ var user = msg["user"]; msg["c"] = get_user_color(user); if (msg["m"] == "/color"){ set_user_color(user); msg["c"] = get_user_color(user); msg["X-Spam"] = true; } return msg; }); var GOLD_USER = ''; var SILVER_USER = ''; var BRONZE_USER = ''; var FAIL_USER = ''; var GOLD_CROWN = ''; var SILVER_CROWN = ''; var BRONZE_CROWN = ''; var FAIL_CROWN = ''; var GOLD_COLOR = ''; var SILVER_COLOR = ''; var BRONZE_COLOR = ''; var FAIL_COLOR = ''; var GOLD_TEXT = ''; var SILVER_TEXT = ''; var BRONZE_TEXT = ''; var FAIL_TEXT = ''; var BLACK_COLOR = '#000000'; var WHITE_COLOR = '#FFFFFF'; cb.settings_choices = [ { name: 'GOLD_CROWN', type:'str', minLength: 1, maxLength: 10, label:"Gold Crown Emote :", defaultValue:'none'}, { name: 'SILVER_CROWN', type:'str', minLength: 1, maxLength: 10, label:"Silver Crown Emote :", defaultValue:'none'}, { name: 'BRONZE_CROWN', type:'str', minLength: 1, maxLength: 10, label:"Bronze Crown Emote :", defaultValue:'none'}, { name: 'FAIL_CROWN', type:'str', minLength: 1, maxLength: 10, label:"Fail Crown Emote :", defaultValue:'none'}, { name: 'GOLD_USER', type:'str', minLength: 0, maxLength: 25, label:"Gold User", defaultValue:'none'}, { name: 'SILVER_USER', type:'str', minLength: 0, maxLength: 25, label:"Silver User", defaultValue:'none'}, { name: 'BRONZE_USER', type:'str', minLength: 0, maxLength: 25, label:"Bronze User", defaultValue:'none'}, { name: 'FAIL_USER', type:'str', minLength: 0, maxLength: 25, label:"Fail User", defaultValue:'none'}, { name: 'GOLD_TEXT', type:'str', minLength: 0, maxLength: 8, label:"Gold Text Color #", defaultValue:'none'}, { name: 'SILVER_TEXT', type:'str', minLength: 0, maxLength: 8, label:"Silver Text Color #", defaultValue:'none'}, { name: 'BRONZE_TEXT', type:'str', minLength: 0, maxLength: 8, label:"Bronze Text Color #", defaultValue:'none'}, { name: 'FAIL_TEXT', type:'str', minLength: 0, maxLength: 8, label:"Fail Text Color #", defaultValue:'none'}, { name: 'GOLD_COLOR', type:'str', minLength: 0, maxLength: 8, label:"Gold Highlight #", defaultValue:'none'}, { name: 'SILVER_COLOR', type:'str', minLength: 0, maxLength: 8, label:"Silver Highlight #", defaultValue:'none'}, { name: 'BRONZE_COLOR', type:'str', minLength: 0, maxLength: 8, label:"Bronze Highlight #", defaultValue:'none'}, { name: 'FAIL_COLOR', type:'str', minLength: 0, maxLength: 8, label:"Fail Highlight #", defaultValue:'none'} ]; cb.onMessage( function (msg) { var XUSER = msg['user']; var XMESSAGE = msg['m']; var XGOLD_USER = cb.settings.GOLD_USER; var XSILVER_USER = cb.settings.SILVER_USER; var XBRONZE_USER = cb.settings.BRONZE_USER; var XFAIL_USER = cb.settings.FAIL_USER; var XGOLD_CROWN = ":" + cb.settings.GOLD_CROWN; var XSILVER_CROWN = ":" + cb.settings.SILVER_CROWN; var XBRONZE_CROWN = ":" + cb.settings.BRONZE_CROWN; var XFAIL_CROWN = ":" + cb.settings.FAIL_CROWN; var XGOLD_TEXT = "#" + cb.settings.GOLD_TEXT; var XSILVER_TEXT = "#" + cb.settings.SILVER_TEXT; var XBRONZE_TEXT = "#" + cb.settings.BRONZE_TEXT; var XFAIL_TEXT = "#" + cb.settings.FAIL_TEXT; var XGOLD_COLOR = "#" + cb.settings.GOLD_COLOR; var XSILVER_COLOR = "#" + cb.settings.SILVER_COLOR; var XBRONZE_COLOR = "#" + cb.settings.BRONZE_COLOR; var XFAIL_COLOR = "#" + cb.settings.FAIL_COLOR; msg['c'] = '#000000'; msg['background'] = '#FFFFFF'; if (XFAIL_USER == XUSER) { msg['c'] = XFAIL_TEXT; msg['background'] = XFAIL_COLOR; msg['m'] = XFAIL_CROWN + " " + XMESSAGE; } if (XGOLD_USER == XUSER) { msg['c'] = XGOLD_TEXT; msg['background'] = XGOLD_COLOR; msg['m'] = XGOLD_CROWN + " " + XMESSAGE; } if (XSILVER_USER == XUSER) { msg['c'] = XSILVER_TEXT; msg['background'] = XSILVER_COLOR; msg['m'] = XSILVER_CROWN + " " + XMESSAGE; } if (XBRONZE_USER == XUSER) { msg['c'] = XBRONZE_TEXT; msg['background'] = XBRONZE_COLOR; msg['m'] = XBRONZE_CROWN + " " + XMESSAGE } return msg } ); /********************************************* <b><u>Tippers Leaderboard</u></b> <p>Keeps track of all tips and shows a leaderboard of all tippers for the current session. The top 3 can be printed on a fixed interval, after each tip, or when the top 3 has changed. </p><p>Users can view the full leaderboard using the "!lb" command.</p> <p><u>These are the settings:</u> </p><p><b>Print top 3 after tips</b> </p><p>Whether to print the leaderboard after tips. Choices are: </p><ul><li><b>always</b>: always print the leaderboard top 3 after tips have been received <li><b>only if the top 3 changed</b>: only print the top 3 after receiving tips if there has been a change <li><b>never</b>: don't print the top 3 after tips have been received </ul><p><b>Print top 3 at least once every (minutes, 0 to disable)</b> </p><p>Time (in minutes) to automatically print the top 3 if no tips were received that caused the leaderboard to be printed in that time (based on the previous setting). </p><p>Setting this value to 0 disables this feature. </p><p><b>Highlight tip leader in chat</b> </p><p>Set to 'yes' to highlight the current leader.</p> </p><p><b>Remind tippers who tipped 25 tokens to rate</b> </p><p>When set to 'yes' any tipper who has tipped 25 tokens or more during this session is asked to rate.</p> Version history: 3 Aug 2013: v1.0; initial release 3 Aug 2013: v1.1; sorting fixed, added option to run as both an App and Bot 23 Aug 2013: v1.2; more compact notice output, only sending !lb output to requesting user 28 Aug 2013: v1.2.1; only match !lb at the beginning of the input, don't process !lb if it was already handled 28 Dec 2013; v1.3; delay printing of leaderboard until tipping has stopped, only print top 3 if it has changed 30 Dec 2013; v1.4; added settings 31 Dec 2013; v1.4.1; code cleanup 13 Jul 2014; v1.5; added option to ask tippers who tipped over 25 tokens to rate *********************************************/ var VERSION = '1.5', COMMAND_SHOW_LEADERBOARD = '!lb', CONFIG_COLOR_LEADER = '#9f9', INTERVAL_MULTIPLIER = 60000, UPDATE_TIME = 5000, RATE_FROM = 25, RATE_MESSAGE = ":rate-me", RATE_MESSAGE_DELAY = 1500, NL = '\n', user_total_tips = {}, user_last_tip_time = {}, last_top3 = '', leader_username, update_counter = 0, interval_counter = 0, silent_room = true; // settings cb.settings_choices = [{ 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: 'no', label: "Highlight tip leader in chat" }, { name: 'rate', type: 'choice', choice1: 'yes', choice2: 'no', defaultValue: 'yes', label: "Remind tippers who tipped 25 tokens to rate" }]; // handlers cb.onTip(function (tip) { handleTip(tip.amount, tip.from_user); scheduleUpdate(); silent_room = false; }); cb.onMessage(function (msg) { // handle user commands if ((msg.m.indexOf(COMMAND_SHOW_LEADERBOARD) == 0) && !msg['X-Spam']) { sendLeaderboard(true, msg.user); msg['X-Spam'] = true; } // highlight leader if ((cb.settings.highlight == 'yes') && (msg.user == leader_username)) { msg.background = CONFIG_COLOR_LEADER; } // schedule interval if (update_counter == 0){ scheduleInterval(); } if (!msg['X-Spam']){ silent_room = false; } return msg; }); // functions function handleTip(amount, user) { if (amount <= 0) return; var before = user_total_tips[user] || 0, after = user_total_tips[user] = before + amount; user_last_tip_time[user] = new Date().valueOf(); if ((before < RATE_FROM) && (after >= RATE_FROM)){ cb.setTimeout(function(){ cb.chatNotice(RATE_MESSAGE, user); }, RATE_MESSAGE_DELAY); } } 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){ for (var 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 (Type !lb to see the full leaderboard)'; } if (to_user){ out += ' [v' + VERSION+']'; } for (var rank=0; rank<l; rank++) { out += NL + '' + (rank+1) + '. ' + formatRanking(lb, rank); } cb.chatNotice(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 init(){ }
© Copyright Chaturbate 2011- 2026. All Rights Reserved.