Apps Home
|
Create an App
gticket
Author:
codeanon_master
Description
Source Code
Launch App
Current Users
Created by:
Codeanon_Master
cb.settings_choices = [ {name: 'price', label: 'Ticket price', type: 'int', defaultValue: 99, minvalue: 1}, {name: 'type', label: 'Type of purchase required', type: 'choice', choice1: 'Exact', choice2: 'Minimum', defaultValue: 'Minimum'}, {name: 'timer', label: 'Minutes on countdown timer', type: 'int', minValue: 1, defaultValue: 30}, {name: 'admins', label: 'Users who can use app commands', type: 'str', defaultValue: 'codeanon', required: false}, {name: 'vips', label: 'Users who can watch for free', type: 'str', required: false}, {name: 'fgcolor', label: '[COSMETICS] ---------------- Text color', type: 'str', required: false, defaultValue: '#990000'}, {name: 'subject', label: 'Room subject', type: 'str', defaultValue: 'Ticket show [status]! Buy a ticket for [price] tokens!', required: false}, {name: 'message', label: 'Message to be displayed when cam is hidden', type: 'str', minLength: 1, maxLength: 256, defaultValue: 'Tip [price] to view the show!'}, ]; cbs = JSON.parse(JSON.stringify(cb.settings)); var admins = cbs.admins ? cbs.admins.toLowerCase().trim().split(/\s*,\s*/) : []; admins.push(cb.room_slug); var viewers = cbs.vips ? cbs.vips.toLowerCase().trim().split(/\s*,\s*/) : []; var timer = countDown(() => {timer.cancelled = true; reminder()}, cbs.timer * 60); var exact = cbs.type === 'Exact'; var cam = { start: () => cb.limitCam_start(cbs.message.replace(/\[price\]/g, cbs.price), viewers), stop: () => cb.limitCam_stop(), addUsers: (array) => cb.limitCam_addUsers(array), removeUsers: (array) => cb.limitCam_removeUsers(array), removeAllUsers: () => cb.limitCam_removeAllUsers(), userHasAccess: (user) => cb.limitCam_userHasAccess(user), allUsersWithAccess: () => cb.limitCam_allUsersWithAccess(), isRunning: () => cb.limitCam_isRunning() }; cb.onTip((tip) => doTip(tip.amount, tip.from_user)); function doTip(tokens, user) { if (!viewers.includes(user) && (exact ? tokens == cbs.price : tokens >= cbs.price)) { viewers.push(user); if (cam.isRunning()) cam.addUsers([user]); say(':starslana ' + user + ' purchased a ticket for ' + cbs.price + ' tokens! :starslana'); cb.drawPanel(); } } cb.onDrawPanel(function () { return { template: '3_rows_11_22_32', 'row1_label': timer.timeLeft > 0 ? 'Show starts in ' + Math.ceil(timer.timeLeft/60) + ' minutes!' : 'Show starting momentarily!', 'row2_label': 'TICKET PRICE', 'row2_value': cbs.price, 'row3_label': 'TICKETS SOLD', 'row3_value': viewers.length }; }); cb.onMessage(function (msg) { if (msg.m.charAt(0) === '/') { msg['X-Spam'] = true; if (admins.includes(msg.user)) cmd(msg.m, msg.user); } }); function cmd(message, user) { var args = message.split(/\s+/); switch(args[0]) { case '/gtt': var n = Number(args[1]); if (n !== NaN) doTip(n, args[2] || 'The Invisible Mod'); break; case '/gt#': evaluate(args.slice(1).join(' '), user); break; case '/gtr': timer.isRunning ? reminder() : postReminder(); break; case '/gt_add': if (args[1]) { var users = args.slice(1).map(function (elm) { elm = elm.toLowerCase().replace(/,/g,''); if (!viewers.includes(elm)) viewers.push(elm); return elm; }); if (cam.isRunning()) cam.addUsers(users); say('Users added (' + users.join(', ') + ')', user); } break; case '/gt_remove': if (args[1]) { var users = args.slice(1).map(function (elm) { elm = elm.toLowerCase(); if (viewers.includes(elm)) viewers.splice(viewers.indexOf(elm), 1); return elm; }); if (cam.isRunning()) cam.removeUsers(users); say('Users added (' + users.join(', ') + ')', user); } break; case '/gt_start': cam.start(); say('Hidden show started.', user); updateSubject(); break; case '/gt_stop': cam.stop(); say('Hidden show stopped.', user); updateSubject(); break; case '/gt_timerGo': if (!timer.isRunning) { if (Number(args[1]) !== NaN) timer.seconds = Number(args[1]); timer.intCounter = timer.noticeInterval || 300; timer.go(); } say('Timer started.', user); break; case '/gt_timerStop': if (timer.isRunning) timer.cancel(); timer.timeLeft = timer.length; timer.intCounter = timer.interval; say('Timer cancelled.', user); break; case '/gt_timerSet': var n = Number(args[1]); if (n !== NaN) { timer.timeLeft = n say('Timer set to ' + n + ' seconds.' + (timer.isRunning ? '' : ' Type /gt_timerGo to start it.')); } break; } cb.drawPanel(); } function countDown(func, length, noticeInterval) { var obj = { seconds: length, timeLeft: length, interval: noticeInterval || 300, intCounter: noticeInterval || 300, cancelled: false, isRunning: false, }; obj.cancel = () => obj.cancelled = true; obj.go = function () { if (obj.timeLeft % 60 === 0) cb.drawPanel(); if (!obj.cancelled) { cb.log('TIMER: ' + obj.timeLeft); obj.isRunning = true; if (obj.timeLeft > 0) { if (obj.intCounter === 0 || obj.timeLeft === 300 || obj.timeLeft === 240 || obj.timeLeft === 180 || obj.timeLeft === 120 || obj.timeLeft === 60) { reminder(); obj.intCounter = timer.noticeInterval || 300; } else { obj.intCounter--; } obj.timeLeft--; cb.setTimeout(obj.go, 1000); } else { func(); obj.timeLeft = obj.seconds; cb.setTimeout(obj.go, 1000); } } else { cb.log('Timer cancelled.'); obj.isRunning = false; obj.cancelled = false; } }; return obj; } function reminder() { say(':starx\nOnly ' + Math.ceil(timer.timeLeft/60) + ' minutes until the show starts! Tip ' + (exact ? '' + cbs.price : 'at least ' + cbs.price) + ' tokens to buy a ticket!\n:starx'); timer.intCounter = timer.noticeInterval || 300; } function postReminder() { say(':starx\nShow starting momentarily! You can still purchase tickets for ' + cbs.price + ' tokens!\n:starx'); } function evaluate(str, user) { try { var result = eval(str); var notice = 'INPUT: ' + str + '\nTYPE: ' + typeof result + '\nVALUE: '; result === void 0 ? notice += 'undefined' : notice += JSON.stringify(result, null, '\u2007\u2007\u2007\u2007'); cb.setTimeout(() => {cb.sendNotice(newLines(notice), user, '', '#00CC00', '', '')}, 100); } catch (e) { cb.setTimeout(() => {cb.sendNotice(newLines(e.name + ': ' + e.message), user, '', '#FF0000', '', '')}, 100); } } function updateSubject() { var status = cam.isRunning() ? ' in progress' : ''; cb.changeRoomSubject(cbs.subject.replace(/\s*\[status\]/g, status).replace(/\[price\]/g, cbs.price).trim()); } function newLines(input) { return '\u25CF ' + input.replace(/\n/g, '\n\u25CF '); } function say(msg, user, color) { cb.sendNotice(newLines(msg), user, '', color || cbs.fgcolor , 'bold', ''); } //////////////////// if (cbs.timer) timer.go(); if (cbs.subject) updateSubject(); reminder();
© Copyright Chaturbate 2011- 2025. All Rights Reserved.