Apps Home
|
Create an App
tip jar
Author:
zerofighter91
Description
Source Code
Launch App
Current Users
Created by:
Zerofighter91
var Colours = { AliceBlue: "#F0F8FF", AntiqueWhite: "#FAEBD7", Aqua: "#00FFFF", Aquamarine: "#7FFFD4", Azure: "#F0FFFF", Beige: "#F5F5DC", Bisque: "#FFE4C4", Black: "#000000", BlanchedAlmond: "#FFEBCD", Blue: "#0000FF", BlueViolet: "#8A2BE2", Brown: "#A52A2A", BurlyWood: "#DEB887", CadetBlue: "#5F9EA0", Chartreuse: "#7FFF00", Chocolate: "#D2691E", Coral: "#FF7F50", CornflowerBlue: "#6495ED", Cornsilk: "#FFF8DC", Crimson: "#DC143C", Cyan: "#00FFFF", DarkBlue: "#00008B", DarkCyan: "#008B8B", DarkGoldenRod: "#B8860B", DarkGrey: "#A9A9A9", DarkGreen: "#006400", DarkKhaki: "#BDB76B", DarkMagenta: "#8B008B", DarkOliveGreen: "#556B2F", DarkOrange: "#FF8C00", DarkOrchid: "#9932CC", DarkRed: "#8B0000", DarkSalmon: "#E9967A", DarkSeaGreen: "#8FBC8F", DarkSlateBlue: "#483D8B", DarkSlateGrey: "#2F4F4F", DarkTurquoise: "#00CED1", DarkViolet: "#9400D3", DeepPink: "#FF1493", DeepSkyBlue: "#00BFFF", DimGrey: "#696969", DodgerBlue: "#1E90FF", FireBrick: "#B22222", FloralWhite: "#FFFAF0", ForestGreen: "#228B22", Fuschia: "#FF00FF", Gainsboro: "#DCDCDC", GhostWhite: "#F8F8FF", Gold: "#FFD700", GoldenRod: "#DAA520", Grey: "#808080", Green: "#008000", GreenYellow: "#ADFF2F", HoneyDew: "#F0FFF0", HotPink: "#FF69B4", IndianRed: "#CD5C5C", Indigo: "#4B0082", Ivory: "#FFFFF0", Khaki: "#F0E68C", Lavender: "#E6E6FA", LavenderBlush: "#FFF0F5", LawnGreen: "#7CFC00", LemonChiffon: "#FFFACD", LightBlue: "#ADD8E6", LightCoral: "#F08080", LightCyan: "#E0FFFF", LightGoldenRodYellow: "#FAFAD2", LightGrey: "#D3D3D3", LightGreen: "#90EE90", LightPink: "#FFB6C1", LightSalmon: "#FFA07A", LightSeaGreen: "#20B2AA", LightSkyBlue: "#87CEFA", LightSlateGrey: "#778899", LightSteelBlue: "#B0C4DE", LightYellow: "#FFFFE0", Lime: "#00FF00", LimeGreen: "#32CD32", Linen: "#FAF0E6", Magenta: "#FF00FF", Maroon: "#800000", MediumAquaMarine: "#66CDAA", MediumBlue: "#0000CD", MediumOrchid: "#BA55D3", MediumPurple: "#9370DB", MediumSeaGreen: "#3CB371", MediumSlateBlue: "#7B68EE", MediumSpringGreen: "#00FA9A", MediumTurquoise: "#48D1CC", MediumVioletRed: "#C71585", MidnightBlue: "#191970", MintCream: "#F5FFFA", MistyRose: "#FFE4E1", Moccasin: "#FFE4B5", NavajoWhite: "#FFDEAD", Navy: "#000080", OldLace: "#FDF5E6", Olive: "#808000", OliveDrab: "#6B8E23", Orange: "#FFA500", OrangeRed: "#FF4500", Orchid: "#DA70D6", PaleGoldenRod: "#EEE8AA", PaleGreen: "#98FB98", PaleTurquoise: "#AFEEEE", PaleVioletRed: "#DB7093", PapayaWhip: "#FFEFD5", PeachPuff: "#FFDAB9", Peru: "#CD853F", Pink: "#FFC0CB", Plum: "#DDA0DD", PowderBlue: "#B0E0E6", Purple: "#800080", Red: "#FF0000", RosyBrown: "#BC8F8F", RoyalBlue: "#4169E1", SaddleBrown: "#8B4513", Salmon: "#FA8072", SandyBrown: "#F4A460", SeaGreen: "#2E8B57", SeaShell: "#FFF5EE", Sienna: "#A0522D", Silver: "#C0C0C0", SkyBlue: "#87CEEB", SlateBlue: "#6A5ACD", SlateGrey: "#708090", Snow: "#FFFAFA", SpringGreen: "#00FF7F", SteelBlue: "#4682B4", Tan: "#D2B48C", Teal: "#008080", Thistle: "#D8BFD8", Tomato: "#FF6347", Turquoise: "#40E0D0", Violet: "#EE82EE", Wheat: "#F5DEB3", White: "#FFFFFF", WhiteSmoke: "#F5F5F5", Yellow: "#FFFF00", YellowGreen: "#9ACD32" }; var Groups = { TokenHolders: 'cyan', Tippers: 'blue', Fans: 'green', Moderators: 'red', }; var Utils = { GetTokenPlural: function(x) { if (x > 1) { return "Tokens"; } return "Token"; } }; /// <reference path="Utility.js" /> var Messenger = { Notice: function (str, colour, background, recipient, group) { if (recipient != null && group != null) cb.sendNotice(str, recipient, '', colour, 'bold', ''); else cb.sendNotice(str, recipient, background, colour, 'bold', group); }, Moderators: function (str) { this.Notice(str, Colours.Blue, '', '', Groups.Moderators); }, Error: function (str, recipient, group) { this.Notice(str, Colours.Red, '', recipient, group); }, WarningMessage: function (str, recipient, group) { this.Notice(str, Colours.Orange, '', recipient, group); }, Success: function (str, recipient, group) { this.Notice(str, Colours.DarkGreen, '', recipient, group); }, Info: function (str, recipient, group) { this.Notice(str, Colours.DarkViolet, '', recipient, group); } }; function Command(id, description, execute, canExecute) { var self = this; this.Id = id; this.Description = description; this.Execute = execute; this.CanExecute = canExecute; } var Permissions = { All: function (msg) { return true; }, Broadcaster: function (msg) { return msg.user == cb.room_slug; }, Moderators: function (msg) { return msg.is_mod; }, BroadcasterOrModerator: function (msg) { return msg.user == cb.room_slug || msg.is_mod; }, UserWithTokens: function (msg) { return msg.has_tokens; } }; function CommandManagerClass() { var self = this; this.Commands = {}; this.RegisterCommand = function (id, description, execute, canExecute) { if (arguments.length < 3) return false; if (self.Commands[id] == undefined) { if (canExecute == undefined) canExecute = Permissions.Broadcaster; self.Commands[id] = new Command(id, description, execute, canExecute); } return true; }; this.ParseCommand = function (msg) { var message = msg.m; var user = msg.user; if (message[0] == "/") { var commandId = message.substr(0, message.indexOf(" ") == -1 ? message.length : message.indexOf(" ")).trim(); cb.log("Parsing Command: " + commandId); var commandParams = message.substr(message.indexOf(" ") == -1 ? message.length : message.indexOf(" "), message.length - 1).trim(); cb.log("Params: " + (commandParams == "" ? "Empty" : commandParams)); if (commandId in self.Commands) { msg["X-spam"] = true; if (self.Commands[commandId].CanExecute(msg)) { self.Commands[commandId].Execute(commandParams, msg); return true; } else { Messenger.Error("You Cannot use this Command. Sorry", msg.user); return false; } } else { return false; } } else { return false; } }; this.GetHelp = function (msg) { var header = "====================" + "\n" + "= Command List " + "\n" + "====================" + "\n"; var footer = "===================="; var content = ""; for (var i in self.Commands) { if (self.Commands[i].CanExecute(msg)) content += self.Commands[i].Id + " - " + self.Commands[i].Description + "\n"; } if (content == "") { content = "No Commands have Been Registered" + "\n"; } return header + content + footer; }; } var CommandManager = new CommandManagerClass(); function LeaderboardClass() { var self = this; this.HighestSingleTip = { usr: "", a: 0 }; this.Total = []; this.Show = []; this.AddTip = function(usr, a) { if (self.HighestSingleTip.a < a) { self.HighestSingleTip.usr = usr; self.HighestSingleTip.a = a; } var trovato = false; var i; for (i = 0; i < self.Total.length; i++) { if (self.Total[i].usr == usr) { self.Total[i].a += a; trovato = true; } } var record; if (!trovato) { record = { usr: usr, a: a }; self.Total.push(record); } trovato = false; for ( i = 0; i < self.Show.length; i++ ) { if ( self.Show[i].usr == usr ) { self.Show[i].a += a; trovato = true; } } if ( !trovato ) { record = { usr: usr, a: a }; self.Show.push( record ); } var sortFunc = function(A, B) { if (A.a > B.a) { return -1; } else if (A.a < B.a) { return 1; } else { if (A.usr > B.usr) { return -1; } else if (A.usr < B.usr) { return 1; } return 0; } }; self.Show.sort( sortFunc ); self.Total.sort( sortFunc ); }; this.AsJson = function() { var obj = { ht: self.HighestSingleTip, lb: self.Total }; return JSON.stringify(obj); }; } var Leaderboard = new LeaderboardClass(); function SimpleTipJar() { var self = this; // #region Variables this.TipCount = 0; this.Goal = 0; this.HighestTip = 0; this.LastTip = 0; this.HighestTipper = "--"; this.LastTipper = "--"; // #endregion Variables this.Initialize = function () { self.CreateCommands(); self.CreateSettings(); self.RecoverSettings(); self.HandleEvents(); } // #region Initialization Methods this.CreateCommands = function () { cb.log( "Registering Commands" ); CommandManager.RegisterCommand( "/add", "Add tokens to the count. Example: '/add 10' will add 10 tokens to the count", self.Add ); CommandManager.RegisterCommand( "/remove", "Remove tokens to the count. Example: '/remove 10' will remove 10 tokens to the count", self.Remove ); CommandManager.RegisterCommand( "/set", "Set the tip jar to the specified value. Example: '/set 100' will set the token count to 100", self.Set ); CommandManager.RegisterCommand( "/reset", "Reset the tip jar to 0", self.Reset ); CommandManager.RegisterCommand( "/setgoal", "Set a Goal", self.SetGoal ); CommandManager.RegisterCommand( "/leaderboard", "Show the leasderboard for the show", self.Leaderboard, Permissions.All ); CommandManager.RegisterCommand( "/about", "Display the About page for the App", self.About, Permissions.All ); CommandManager.RegisterCommand( "/help", "Display the Help page for the App", self.Help, Permissions.All ); }; this.CreateSettings = function () { cb.log( "Creating Settings" ); var settings = []; settings.push( { name: 'Leaderboard', label: "Restore Total from String", type: 'str', minLength: 1, maxLength: 10000, required: false } ); cb.settings_choices = settings; }; this.RecoverSettings = function () { cb.log( "Creating Settings" ); if ( typeof cb.settings.Leaderboard != 'undefined' ) { if (cb.settings.Leaderboard != "") { var a = JSON.parse(cb.settings.Leaderboard); Leaderboard.Total = a.lb; Leaderboard.HighestSingleTip = a.ht; } } }; this.HandleEvents = function () { cb.log( "Handling Events" ); cb.onMessage( self.OnMessage ); cb.onTip( self.OnTip ); cb.onDrawPanel( self.OnDrawPanel ); }; // #endregion Initialization Methods // #region Event Handling this.OnMessage = function ( msg ) { if ( CommandManager.ParseCommand( msg ) ) { msg["X-Spam"] = true; } return msg; }; this.OnTip = function ( tip ) { var amount = parseInt( tip.amount ); self.TipCount += amount; self.LastTip = amount; self.LastTipper = tip.from_user; if ( self.LastTip > self.HighestTip ) { self.HighestTip = self.LastTip; self.HighestTipper = self.LastTipper; } if (self.TipCount >= self.Goal) { self.Goal = 0; } Leaderboard.AddTip( tip.from_user, amount ); cb.log( JSON.stringify( Leaderboard.Show ) ); cb.drawPanel(); }; this.OnDrawPanel = function () { if (self.TipCount > 0) { if (self.Goal != 0) { return { 'template': '3_rows_of_labels', 'row1_label': 'Tips Received :', 'row1_value': self.TipCount + "/" + self.Goal + " (" + self.TipCount - self.Goal + ")", 'row2_label': 'Highest Tip:', 'row2_value': self.HighestTipper + " (" + self.HighestTip + ")", 'row3_label': 'Latest Tip Received:', 'row3_value': self.LastTipper + " (" + self.LastTip + ")", }; } else { return { 'template': '3_rows_of_labels', 'row1_label': 'Tips Received :', 'row1_value': self.TipCount + " " + Utils.GetTokenPlural(self.TipCount), 'row2_label': 'Highest Tip:', 'row2_value': self.HighestTipper + " (" + self.HighestTip + ")", 'row3_label': 'Latest Tip Received:', 'row3_value': self.LastTipper + " (" + self.LastTip + ")", }; } } else { if (self.Goal != 0) { return { 'template': '3_rows_of_labels', 'row1_label': 'Tips Received :', 'row1_value': 0 + "/" + self.Goal + " (" + self.Goal + ")", 'row2_label': 'Highest Tip:', 'row2_value': self.HighestTipper + " (" + self.HighestTip + ")", 'row3_label': 'Latest Tip Received:', 'row3_value': self.LastTipper + " (" + self.LastTip + ")", }; } else { return { 'template': '3_rows_of_labels', 'row1_label': 'Tips Received :', 'row1_value': "None :(", 'row2_label': 'Highest Tip:', 'row2_value': self.HighestTipper + " (" + self.HighestTip + ")", 'row3_label': 'Latest Tip Received:', 'row3_value': self.LastTipper + " (" + self.LastTip + ")", }; } //return { // 'template': '3_rows_of_labels', // 'row1_label': 'Tips Received :', // 'row1_value': self.TipCount + " " + Utils.GetTokenPlural( self.TipCount ), // 'row2_label': 'Highest Tip:', // 'row2_value': self.HighestTipper + " (" + self.HighestTip + ")", // 'row3_label': 'Latest Tip Received:', // 'row3_value': self.LastTipper + " (" + self.LastTip + ")", //}; } }; // #endregion Event Handling // #region Command Methods this.Add = function ( params ) { var amount = parseInt( params ); self.TipCount += amount; cb.drawPanel(); Messenger.Info( "*** " + params + " Tokens have been added to the tip jar. ***" ); } this.Remove = function ( params ) { var amount = parseInt( params ); self.TipCount -= amount; if ( self.TipCount < 0 ) { self.TipCount = 0; } cb.drawPanel(); Messenger.Info( "*** " + params + " Tokens have been removed to the tip jar. ***" ); }; this.Set = function ( params ) { var amount = parseInt( params ); self.TipCount = amount; cb.drawPanel(); }; this.Reset = function ( params ) { self.TipCount = 0; cb.drawPanel(); Messenger.Info( "*** The Tip Jar has Been Resetted ***" ); }; this.SetGoal = function ( params ) { var goalAmount = parseInt( params ); self.Goal = goalAmount; Messenger.Success( "*** A Goal have been Setted! ***" ); cb.drawPanel(); }; this.Leaderboard = function ( params, msg ) { cb.log( JSON.stringify( arguments ) ); switch ( params ) { case "save": { if ( Permissions.Broadcaster( msg ) ) { Messenger.Info( Leaderboard.AsJson(), cb.room_slug ); } else { Messenger.Error( "You Cannot use this Command. Sorry", msg.user ); } break; } case "show": { var content = "========================" + "\n" + "= Tippers Total for the show: " + "\n" + "========================" + "\n"; if ( Leaderboard.Show.length > 0 ) { for ( var i = 0; i < Leaderboard.Show.length; i++ ) { content += "= " + i + 1 + ". " + Leaderboard.Show[i].usr + " - " + Leaderboard.Show[i].a + " " + Utils.GetTokenPlural( Leaderboard.Show[i].a ) + "\n"; } } else { content += "= No One Tipped Yet :( " + "\n"; } content += "========================"; var user = Permissions.Broadcaster( msg ) ? '' : msg.user; Messenger.Success( content, user ); break; } case "total": { var content = "========================" + "\n" + "= All Time Total: " + "\n" + "========================" + "\n"; if ( Leaderboard.Total.length > 0 ) { for ( var i = 0; i < Leaderboard.Total.length; i++ ) { content += "= " + i + 1 + ". " + Leaderboard.Total[i].usr + " - " + Leaderboard.Total[i].a + " " + Utils.GetTokenPlural( Leaderboard.Total[i].a ) + "\n"; } } else { content += "= No One Tipped Yet :( " + "\n"; } content += "========================"; var user = Permissions.Broadcaster( msg ) ? '' : msg.user; Messenger.Success( content, user ); break; } case "restore": { cb.log( "ToDo: Implement Restore" ); break; } default: { var content = "========================" + "\n" + "= Tippers Total for the show: " + "\n" + "========================" + "\n"; if ( Leaderboard.Show.length > 0 ) { for ( var i = 0; i < Leaderboard.Show.length; i++ ) { content += "= " + i + 1 + ". " + Leaderboard.Show[i].usr + " - " + Leaderboard.Show[i].a + " " + Utils.GetTokenPlural( Leaderboard.Show[i].a ) + "\n"; } } else { content += "= No One Tipped Yet :( " + "\n"; } content += "========================"; var user = Permissions.Broadcaster( msg ) ? '' : msg.user; Messenger.Success( content, user ); break; } } }; // #endregion Command Methods } var app = new SimpleTipJar(); app.Initialize();
© Copyright Chaturbate 2011- 2026. All Rights Reserved.