Reward pot chase
Author: chasexmayhem

You are viewing version 119616. There is a newer version of this app. See the latest version of this app.

Description Source Code Launch App Current Users

Short Description:

chase“s sweets tip jar

Full Description

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";
}
};

///

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.