Bots Home
|
Create an App
Auspunk's Prize Wheel
Author:
auspunk
Description
Source Code
Launch Bot
Current Users
Created by:
Auspunk
var MAX_TIER = 3; var MAX_PRIZES_PER_TIER = 50; cb.settings_choices = [ {name: 'tier1_description', type: 'str', label: 'Description for tier 1 prizes', defaultValue: 'Common'}, {name: 'tier1_allow_reuse', type: 'choice', choice1: 'Yes', choice2: 'No', label: 'Allow tier 1 prizes to be won more than once?', defaultValue: 'Yes'}, {name: 'tier1_avoid_most_recent', type: 'int', label: 'If repeats are allowed for tier 1, avoid the most recent ___ prizes (big number to avoid duplicates until all won)', defaultValue: 0}, {name: 'tier2_description', type: 'str', label: 'Description for tier 2 prizes', defaultValue: 'Rare'}, {name: 'tier2_unlock_after', type: 'int', label: 'Number of spins that must pass before tier 2 is unlocked', defaultValue: 0}, {name: 'tier2_one_in', type: 'int', label: 'Once unlocked, a tier 2 prize will be awarded one in ___ spins', defaultValue: 5}, {name: 'tier2_allow_reuse', type: 'choice', choice1: 'Yes', choice2: 'No', label: 'Allow tier 2 prizes to be won more than once?', defaultValue: 'Yes'}, {name: 'tier2_avoid_most_recent', type: 'int', label: 'If repeats are allowed for tier 2, avoid the most recent ___ prizes (big number to avoid duplicates until all won)', defaultValue: 0}, {name: 'tier3_description', type: 'str', label: 'Description for tier 3 prizes', defaultValue: 'Ultra-Rare'}, {name: 'tier3_unlock_after', type: 'int', label: 'Number of spins that must pass before tier 3 is unlocked', defaultValue: 0}, {name: 'tier3_one_in', type: 'int', label: 'Once unlocked, a tier 3 prize will be awarded one in ___ spins', defaultValue: 10}, {name: 'tier3_allow_reuse', type: 'choice', choice1: 'Yes', choice2: 'No', label: 'Allow tier 3 prizes to be won more than once?', defaultValue: 'Yes'}, {name: 'tier3_avoid_most_recent', type: 'int', label: 'If repeats are allowed for tier 3, avoid the most recent ___ prizes (big number to avoid duplicates until all won)', defaultValue: 0}, {name: 'advertisement_welcome', type: 'choice', choice1: 'Yes', choice2: 'No', label: 'Display announcements on joining?', defaultValue: 'Yes'}, {name: 'advertisement_interval', type: 'int', label: 'Seconds between whole-channel announcements (0 to disable)', defaultValue: 0}, {name: 'cost_to_spin', type: 'int', label: 'Tokens required in a single tip to spin the wheel (0 to disable paid spins)', defaultValue: 0}, {name: 'free_spin_delay', type: 'int', label: 'Seconds to wait after a free spin before allowing the next (0 to disable free spins)', defaultValue: 0}, {name: 'tier1_prize1', type: 'str', label: 'Tier 1 Prize 1', required: false}, {name: 'tier1_prize2', type: 'str', label: 'Tier 1 Prize 2', required: false}, {name: 'tier1_prize3', type: 'str', label: 'Tier 1 Prize 3', required: false}, {name: 'tier1_prize4', type: 'str', label: 'Tier 1 Prize 4', required: false}, {name: 'tier1_prize5', type: 'str', label: 'Tier 1 Prize 5', required: false}, {name: 'tier1_prize6', type: 'str', label: 'Tier 1 Prize 6', required: false}, {name: 'tier1_prize7', type: 'str', label: 'Tier 1 Prize 7', required: false}, {name: 'tier1_prize8', type: 'str', label: 'Tier 1 Prize 8', required: false}, {name: 'tier1_prize9', type: 'str', label: 'Tier 1 Prize 9', required: false}, {name: 'tier1_prize10', type: 'str', label: 'Tier 1 Prize 10', required: false}, {name: 'tier1_prize11', type: 'str', label: 'Tier 1 Prize 11', required: false}, {name: 'tier1_prize12', type: 'str', label: 'Tier 1 Prize 12', required: false}, {name: 'tier1_prize13', type: 'str', label: 'Tier 1 Prize 13', required: false}, {name: 'tier1_prize14', type: 'str', label: 'Tier 1 Prize 14', required: false}, {name: 'tier1_prize15', type: 'str', label: 'Tier 1 Prize 15', required: false}, {name: 'tier1_prize16', type: 'str', label: 'Tier 1 Prize 16', required: false}, {name: 'tier1_prize17', type: 'str', label: 'Tier 1 Prize 17', required: false}, {name: 'tier1_prize18', type: 'str', label: 'Tier 1 Prize 18', required: false}, {name: 'tier1_prize19', type: 'str', label: 'Tier 1 Prize 19', required: false}, {name: 'tier1_prize20', type: 'str', label: 'Tier 1 Prize 20', required: false}, {name: 'tier1_prize21', type: 'str', label: 'Tier 1 Prize 21', required: false}, {name: 'tier1_prize22', type: 'str', label: 'Tier 1 Prize 22', required: false}, {name: 'tier1_prize23', type: 'str', label: 'Tier 1 Prize 23', required: false}, {name: 'tier1_prize24', type: 'str', label: 'Tier 1 Prize 24', required: false}, {name: 'tier1_prize25', type: 'str', label: 'Tier 1 Prize 25', required: false}, {name: 'tier1_prize26', type: 'str', label: 'Tier 1 Prize 26', required: false}, {name: 'tier1_prize27', type: 'str', label: 'Tier 1 Prize 27', required: false}, {name: 'tier1_prize28', type: 'str', label: 'Tier 1 Prize 28', required: false}, {name: 'tier1_prize29', type: 'str', label: 'Tier 1 Prize 29', required: false}, {name: 'tier1_prize30', type: 'str', label: 'Tier 1 Prize 30', required: false}, {name: 'tier1_prize31', type: 'str', label: 'Tier 1 Prize 31', required: false}, {name: 'tier1_prize32', type: 'str', label: 'Tier 1 Prize 32', required: false}, {name: 'tier1_prize33', type: 'str', label: 'Tier 1 Prize 33', required: false}, {name: 'tier1_prize34', type: 'str', label: 'Tier 1 Prize 34', required: false}, {name: 'tier1_prize35', type: 'str', label: 'Tier 1 Prize 35', required: false}, {name: 'tier1_prize36', type: 'str', label: 'Tier 1 Prize 36', required: false}, {name: 'tier1_prize37', type: 'str', label: 'Tier 1 Prize 37', required: false}, {name: 'tier1_prize38', type: 'str', label: 'Tier 1 Prize 38', required: false}, {name: 'tier1_prize39', type: 'str', label: 'Tier 1 Prize 39', required: false}, {name: 'tier1_prize40', type: 'str', label: 'Tier 1 Prize 40', required: false}, {name: 'tier1_prize41', type: 'str', label: 'Tier 1 Prize 41', required: false}, {name: 'tier1_prize42', type: 'str', label: 'Tier 1 Prize 42', required: false}, {name: 'tier1_prize43', type: 'str', label: 'Tier 1 Prize 43', required: false}, {name: 'tier1_prize44', type: 'str', label: 'Tier 1 Prize 44', required: false}, {name: 'tier1_prize45', type: 'str', label: 'Tier 1 Prize 45', required: false}, {name: 'tier1_prize46', type: 'str', label: 'Tier 1 Prize 46', required: false}, {name: 'tier1_prize47', type: 'str', label: 'Tier 1 Prize 47', required: false}, {name: 'tier1_prize48', type: 'str', label: 'Tier 1 Prize 48', required: false}, {name: 'tier1_prize49', type: 'str', label: 'Tier 1 Prize 49', required: false}, {name: 'tier1_prize50', type: 'str', label: 'Tier 1 Prize 50', required: false}, {name: 'tier2_prize1', type: 'str', label: 'Tier 2 Prize 1', required: false}, {name: 'tier2_prize2', type: 'str', label: 'Tier 2 Prize 2', required: false}, {name: 'tier2_prize3', type: 'str', label: 'Tier 2 Prize 3', required: false}, {name: 'tier2_prize4', type: 'str', label: 'Tier 2 Prize 4', required: false}, {name: 'tier2_prize5', type: 'str', label: 'Tier 2 Prize 5', required: false}, {name: 'tier2_prize6', type: 'str', label: 'Tier 2 Prize 6', required: false}, {name: 'tier2_prize7', type: 'str', label: 'Tier 2 Prize 7', required: false}, {name: 'tier2_prize8', type: 'str', label: 'Tier 2 Prize 8', required: false}, {name: 'tier2_prize9', type: 'str', label: 'Tier 2 Prize 9', required: false}, {name: 'tier2_prize10', type: 'str', label: 'Tier 2 Prize 10', required: false}, {name: 'tier2_prize11', type: 'str', label: 'Tier 2 Prize 11', required: false}, {name: 'tier2_prize12', type: 'str', label: 'Tier 2 Prize 12', required: false}, {name: 'tier2_prize13', type: 'str', label: 'Tier 2 Prize 13', required: false}, {name: 'tier2_prize14', type: 'str', label: 'Tier 2 Prize 14', required: false}, {name: 'tier2_prize15', type: 'str', label: 'Tier 2 Prize 15', required: false}, {name: 'tier2_prize16', type: 'str', label: 'Tier 2 Prize 16', required: false}, {name: 'tier2_prize17', type: 'str', label: 'Tier 2 Prize 17', required: false}, {name: 'tier2_prize18', type: 'str', label: 'Tier 2 Prize 18', required: false}, {name: 'tier2_prize19', type: 'str', label: 'Tier 2 Prize 19', required: false}, {name: 'tier2_prize20', type: 'str', label: 'Tier 2 Prize 20', required: false}, {name: 'tier2_prize21', type: 'str', label: 'Tier 2 Prize 21', required: false}, {name: 'tier2_prize22', type: 'str', label: 'Tier 2 Prize 22', required: false}, {name: 'tier2_prize23', type: 'str', label: 'Tier 2 Prize 23', required: false}, {name: 'tier2_prize24', type: 'str', label: 'Tier 2 Prize 24', required: false}, {name: 'tier2_prize25', type: 'str', label: 'Tier 2 Prize 25', required: false}, {name: 'tier2_prize26', type: 'str', label: 'Tier 2 Prize 26', required: false}, {name: 'tier2_prize27', type: 'str', label: 'Tier 2 Prize 27', required: false}, {name: 'tier2_prize28', type: 'str', label: 'Tier 2 Prize 28', required: false}, {name: 'tier2_prize29', type: 'str', label: 'Tier 2 Prize 29', required: false}, {name: 'tier2_prize30', type: 'str', label: 'Tier 2 Prize 30', required: false}, {name: 'tier2_prize31', type: 'str', label: 'Tier 2 Prize 31', required: false}, {name: 'tier2_prize32', type: 'str', label: 'Tier 2 Prize 32', required: false}, {name: 'tier2_prize33', type: 'str', label: 'Tier 2 Prize 33', required: false}, {name: 'tier2_prize34', type: 'str', label: 'Tier 2 Prize 34', required: false}, {name: 'tier2_prize35', type: 'str', label: 'Tier 2 Prize 35', required: false}, {name: 'tier2_prize36', type: 'str', label: 'Tier 2 Prize 36', required: false}, {name: 'tier2_prize37', type: 'str', label: 'Tier 2 Prize 37', required: false}, {name: 'tier2_prize38', type: 'str', label: 'Tier 2 Prize 38', required: false}, {name: 'tier2_prize39', type: 'str', label: 'Tier 2 Prize 39', required: false}, {name: 'tier2_prize40', type: 'str', label: 'Tier 2 Prize 40', required: false}, {name: 'tier2_prize41', type: 'str', label: 'Tier 2 Prize 41', required: false}, {name: 'tier2_prize42', type: 'str', label: 'Tier 2 Prize 42', required: false}, {name: 'tier2_prize43', type: 'str', label: 'Tier 2 Prize 43', required: false}, {name: 'tier2_prize44', type: 'str', label: 'Tier 2 Prize 44', required: false}, {name: 'tier2_prize45', type: 'str', label: 'Tier 2 Prize 45', required: false}, {name: 'tier2_prize46', type: 'str', label: 'Tier 2 Prize 46', required: false}, {name: 'tier2_prize47', type: 'str', label: 'Tier 2 Prize 47', required: false}, {name: 'tier2_prize48', type: 'str', label: 'Tier 2 Prize 48', required: false}, {name: 'tier2_prize49', type: 'str', label: 'Tier 2 Prize 49', required: false}, {name: 'tier2_prize50', type: 'str', label: 'Tier 2 Prize 50', required: false}, {name: 'tier3_prize1', type: 'str', label: 'Tier 3 Prize 1', required: false}, {name: 'tier3_prize2', type: 'str', label: 'Tier 3 Prize 2', required: false}, {name: 'tier3_prize3', type: 'str', label: 'Tier 3 Prize 3', required: false}, {name: 'tier3_prize4', type: 'str', label: 'Tier 3 Prize 4', required: false}, {name: 'tier3_prize5', type: 'str', label: 'Tier 3 Prize 5', required: false}, {name: 'tier3_prize6', type: 'str', label: 'Tier 3 Prize 6', required: false}, {name: 'tier3_prize7', type: 'str', label: 'Tier 3 Prize 7', required: false}, {name: 'tier3_prize8', type: 'str', label: 'Tier 3 Prize 8', required: false}, {name: 'tier3_prize9', type: 'str', label: 'Tier 3 Prize 9', required: false}, {name: 'tier3_prize10', type: 'str', label: 'Tier 3 Prize 10', required: false}, {name: 'tier3_prize11', type: 'str', label: 'Tier 3 Prize 11', required: false}, {name: 'tier3_prize12', type: 'str', label: 'Tier 3 Prize 12', required: false}, {name: 'tier3_prize13', type: 'str', label: 'Tier 3 Prize 13', required: false}, {name: 'tier3_prize14', type: 'str', label: 'Tier 3 Prize 14', required: false}, {name: 'tier3_prize15', type: 'str', label: 'Tier 3 Prize 15', required: false}, {name: 'tier3_prize16', type: 'str', label: 'Tier 3 Prize 16', required: false}, {name: 'tier3_prize17', type: 'str', label: 'Tier 3 Prize 17', required: false}, {name: 'tier3_prize18', type: 'str', label: 'Tier 3 Prize 18', required: false}, {name: 'tier3_prize19', type: 'str', label: 'Tier 3 Prize 19', required: false}, {name: 'tier3_prize20', type: 'str', label: 'Tier 3 Prize 20', required: false}, {name: 'tier3_prize21', type: 'str', label: 'Tier 3 Prize 21', required: false}, {name: 'tier3_prize22', type: 'str', label: 'Tier 3 Prize 22', required: false}, {name: 'tier3_prize23', type: 'str', label: 'Tier 3 Prize 23', required: false}, {name: 'tier3_prize24', type: 'str', label: 'Tier 3 Prize 24', required: false}, {name: 'tier3_prize25', type: 'str', label: 'Tier 3 Prize 25', required: false}, {name: 'tier3_prize26', type: 'str', label: 'Tier 3 Prize 26', required: false}, {name: 'tier3_prize27', type: 'str', label: 'Tier 3 Prize 27', required: false}, {name: 'tier3_prize28', type: 'str', label: 'Tier 3 Prize 28', required: false}, {name: 'tier3_prize29', type: 'str', label: 'Tier 3 Prize 29', required: false}, {name: 'tier3_prize30', type: 'str', label: 'Tier 3 Prize 30', required: false}, {name: 'tier3_prize31', type: 'str', label: 'Tier 3 Prize 31', required: false}, {name: 'tier3_prize32', type: 'str', label: 'Tier 3 Prize 32', required: false}, {name: 'tier3_prize33', type: 'str', label: 'Tier 3 Prize 33', required: false}, {name: 'tier3_prize34', type: 'str', label: 'Tier 3 Prize 34', required: false}, {name: 'tier3_prize35', type: 'str', label: 'Tier 3 Prize 35', required: false}, {name: 'tier3_prize36', type: 'str', label: 'Tier 3 Prize 36', required: false}, {name: 'tier3_prize37', type: 'str', label: 'Tier 3 Prize 37', required: false}, {name: 'tier3_prize38', type: 'str', label: 'Tier 3 Prize 38', required: false}, {name: 'tier3_prize39', type: 'str', label: 'Tier 3 Prize 39', required: false}, {name: 'tier3_prize40', type: 'str', label: 'Tier 3 Prize 40', required: false}, {name: 'tier3_prize41', type: 'str', label: 'Tier 3 Prize 41', required: false}, {name: 'tier3_prize42', type: 'str', label: 'Tier 3 Prize 42', required: false}, {name: 'tier3_prize43', type: 'str', label: 'Tier 3 Prize 43', required: false}, {name: 'tier3_prize44', type: 'str', label: 'Tier 3 Prize 44', required: false}, {name: 'tier3_prize45', type: 'str', label: 'Tier 3 Prize 45', required: false}, {name: 'tier3_prize46', type: 'str', label: 'Tier 3 Prize 46', required: false}, {name: 'tier3_prize47', type: 'str', label: 'Tier 3 Prize 47', required: false}, {name: 'tier3_prize48', type: 'str', label: 'Tier 3 Prize 48', required: false}, {name: 'tier3_prize49', type: 'str', label: 'Tier 3 Prize 49', required: false}, {name: 'tier3_prize50', type: 'str', label: 'Tier 3 Prize 50', required: false} ]; var num_spins = 0; var free_spin_available = false; var free_spin_queue = 0; var tierdata = []; for (var tier = 1; tier <= MAX_TIER; tier++) { tierdata[tier] = {}; tierdata[tier].description = cb.settings['tier' + tier + '_description']; tierdata[tier].enabled = false; if (tier == 1) { tierdata[tier].unlock_after = 0; tierdata[tier].one_in = 1; } else { tierdata[tier].unlock_after = cb.settings['tier' + tier + '_unlock_after']; tierdata[tier].one_in = cb.settings['tier' + tier + '_one_in']; } tierdata[tier].allow_reuse = cb.settings['tier' + tier + '_allow_reuse'] == 'Yes' ? true : false; tierdata[tier].avoid_most_recent = cb.settings['tier' + tier + '_avoid_most_recent']; tierdata[tier].prizes = []; tierdata[tier].recent_prizes = []; } function init_prizes() { for (var tier = 1; tier <= MAX_TIER; tier++) { for (var i = 1; i <= MAX_PRIZES_PER_TIER; i++) { if (cb.settings['tier' + tier + '_prize' + i]) { tierdata[tier].prizes.push(cb.settings['tier' + tier + '_prize' + i]); } } if (tierdata[tier].prizes.length > 0) tierdata[tier].enabled = true; } } function prizes_left(tiernum) { result = false; if (tiernum) { if (tierdata[tiernum].enabled && tierdata[tiernum].prizes.length > 0) { result = true; } } else { for (var tier = 1; tier <= MAX_TIER; tier++) { if (tierdata[tier].enabled && tierdata[tier].prizes.length > 0) { result = true; } } } return result; } function activate_free_spin() { free_spin_queue--; if (free_spin_queue == 0 && prizes_left()) { free_spin_available = true; cb.chatNotice("A free spin is available! Type !spin to use it.", '', '', '#E05000', 'bold'); } } function free_spin(username) { if (prizes_left()) { if (free_spin_available || username == cb.room_slug) { free_spin_available = false; spin(username); if (cb.settings.free_spin_delay > 0) { free_spin_queue++; cb.setTimeout(activate_free_spin, cb.settings.free_spin_delay * 1000); } } else if (cb.settings.free_spin_delay > 0) { cb.chatNotice("No free spin is currently available.", username, '', '#B200FF', 'bold'); } else { cb.chatNotice("Free spins are disabled.", username, '', '#B200FF', 'bold'); } } else { cb.chatNotice("There are no prizes left on the wheel. Game over.", username, '', '#B200FF', 'bold'); } } function spin(username) { if (prizes_left()) { num_spins++; var rnd; var wheel_to_spin = 0; for (var tier = 1; tier <= MAX_TIER; tier++) { if (prizes_left(tier) && num_spins > tierdata[tier].unlock_after) { rnd = Math.floor(Math.random() * tierdata[tier].one_in); if (rnd == 0) wheel_to_spin = tier; } } if (wheel_to_spin == 0) { for (var tier = 1; tier <= MAX_TIER; tier++) { if (prizes_left(tier)) { wheel_to_spin = tier; break; } } } spin_tier(username, tierdata[wheel_to_spin]); } } function spin_tier(username, tierobj) { var rnd = Math.floor(Math.random() * tierobj.prizes.length); var prize = tierobj.prizes[rnd]; // take prizes out if (tierobj.allow_reuse == false || tierobj.avoid_most_recent > 0) { tierobj.prizes.splice(rnd, 1); tierobj.recent_prizes.push(prize); } // put prizes back in if (tierobj.allow_reuse == true) { if (tierobj.prizes.length == 0) { while (tierobj.recent_prizes.length > 0) { tierobj.prizes.push(tierobj.recent_prizes.shift()); } } else if (tierobj.recent_prizes.length > tierobj.avoid_most_recent) { tierobj.prizes.push(tierobj.recent_prizes.shift()); } } cb.chatNotice(username + " spins the wheel! The wheel lands on: " + prize + "!", '', '', '#E05000', 'bold'); if (!prizes_left()) cb.chatNotice("That was the last prize. Thanks for playing!", '', '', '#E05000', 'bold'); } function infotext_prizes() { var infotext = ''; if (prizes_left()) { infotext += "PRIZE LIST:"; for (var tier = 1; tier <= MAX_TIER; tier++) { if (tierdata[tier].enabled) { infotext += "\n" + tierdata[tier].description + ' Prizes'; if (tierdata[tier].unlock_after > num_spins) infotext += ' (unlocked after ' + (tierdata[tier].unlock_after - num_spins) + ' more spin' + (tierdata[tier].unlock_after - num_spins == 1 ? '' : 's' ) + ')'; infotext += ":"; for (var i = 0; i < tierdata[tier].prizes.length; i++) { infotext += "\n" + (i + 1) + ': ' infotext += tierdata[tier].prizes[i]; } for (var i = 0; i < tierdata[tier].recent_prizes.length; i++) { infotext += "\n" + (tierdata[tier].prizes.length + i + 1) + ': ' infotext += tierdata[tier].recent_prizes[i]; if (tierdata[tier].allow_reuse == true) { infotext += " (recently won, check back later)"; } else { infotext += " (already won, no longer available)"; } } } } } else { infotext += "Sorry, there are no prizes left on the wheel." } return infotext; } function infotext_general() { var infotext = ''; infotext += "The prize wheel is active!\n"; if (cb.settings.cost_to_spin > 0) infotext += "Tip " + cb.settings.cost_to_spin + " token" + (cb.settings.cost_to_spin == 1 ? '' : 's') + " at once to spin the wheel at any time.\n"; if (cb.settings.free_spin_delay > 0) { infotext += "Type !spin to use a free spin if one is available."; if (free_spin_available) { infotext += " A free spin is available now!\n"; } else { infotext += " No free spin is currently available.\n"; } } if (cb.settings.cost_to_spin == 0 && cb.settings.free_spin_delay == 0) { infotext += "The broadcaster is in control of the wheel.\n"; } infotext += "Type !prizes to see a list of available prizes."; return infotext; } function show_prizes(username) { var output = infotext_prizes(); if (username) { cb.chatNotice(output, username, '', '#B200FF', 'bold'); } else { cb.chatNotice(output, '', '', '#E05000', 'bold'); } } function show_general(username) { if (prizes_left()) { var output = ''; if (username) output += "Welcome, " + username + "! "; output += infotext_general(); if (username) { cb.chatNotice(output, username, '', '#B200FF', 'bold'); } else { cb.chatNotice(output, '', '', '#E05000', 'bold'); } } } function advertise() { show_general(); if (cb.settings.advertisement_interval > 0) cb.setTimeout(advertise, cb.settings.advertisement_interval * 1000); } cb.onEnter(function (user) { if (cb.settings.advertisement_welcome == 'Yes') show_general(user.user); }); cb.onMessage(function(msg) { if(msg['m'].match(/^!p/i)) { msg['X-Spam'] = true; show_prizes(msg.user); } else if(msg['m'].match(/^!s/i)) { msg['X-Spam'] = true; free_spin(msg.user); } return msg; }); cb.onTip(function (tip) { if (parseInt(tip.amount) >= cb.settings.cost_to_spin) { if (prizes_left()) { spin(tip.from_user); } else { cb.chatNotice("There are no prizes left on the wheel. Game over.", tip.from_user, '', '#B200FF', 'bold'); } } }); init_prizes(); advertise(); if (cb.settings.free_spin_delay > 0) { free_spin_queue++; cb.setTimeout(activate_free_spin, cb.settings.free_spin_delay * 1000); }
© Copyright Chaturbate 2011- 2026. All Rights Reserved.