Merge pull request #1 from Jiiks/master

Rebase branch
This commit is contained in:
Alex 2016-04-09 10:46:58 +01:00
commit 4d6467b1e0
13 changed files with 2298 additions and 1486 deletions

73
Plugins/clock.plugin.js Normal file
View File

@ -0,0 +1,73 @@
//META{"name":"clockPlugin"}*//
//Original clock code from http://cssdeck.com/labs/minimal-css3-digital-clock
var clockPlugin = function () {};
clockPlugin.prototype.start = function () {
BdApi.clearCSS("clockPluginCss");
BdApi.injectCSS("clockPluginCss", '#clockPluginClock { position:absolute; color:#FFF; background:#333333; padding:0 12px 0 10px; min-width:70px; }');
var self = this;
this.clock = $("<div/>", { id: "clockPluginClock" });
$("body").append(this.clock);
this.pad = function(x) {
return x < 10 ? '0'+x : x;
};
this.ticktock = function() {
var d = new Date();
var h = self.pad(d.getHours());
var m = self.pad(d.getMinutes());
var s = self.pad(d.getSeconds());
var current_time = [h,m,s].join(':');
self.clock.html(current_time);
};
this.ticktock();
this.interval = setInterval(this.ticktock, 1000);
};
clockPlugin.prototype.load = function () {
};
clockPlugin.prototype.unload = function () {}
;
clockPlugin.prototype.stop = function () {
BdApi.clearCSS("clockPluginCss");
clearInterval(this.interval);
this.clock.remove();
};
clockPlugin.prototype.onMessage = function () {
};
clockPlugin.prototype.onSwitch = function () {
};
clockPlugin.prototype.observer = function (e) {
};
clockPlugin.prototype.getSettingsPanel = function () {
return "";
};
clockPlugin.prototype.getName = function () {
return "Clock Plugin";
};
clockPlugin.prototype.getDescription = function () {
return "Adds a clock to Discord";
};
clockPlugin.prototype.getVersion = function () {
return "0.1.0";
};
clockPlugin.prototype.getAuthor = function () {
return "Jiiks";
};

View File

@ -0,0 +1,49 @@
//META{"name":"dblClickEdit"}*//
var dblClickEdit = function () {};
dblClickEdit.prototype.onMessage = function () {
};
dblClickEdit.prototype.onSwitch = function () {
};
dblClickEdit.prototype.start = function () {
$(document).on("dblclick.dce", function(e) {
var target = $(e.target);
if(target.parents(".message").length > 0) {
var msg = target.parents(".message").first();
var opt = msg.find(".btn-option");
opt.click();
var popout = $(".option-popout");
if(popout.children().length == 2) {
popout.children().first().click();
} else {
popout.hide();
}
}
});
};
dblClickEdit.prototype.load = function () {};
dblClickEdit.prototype.unload = function () {
$(document).off("dblclick.dce");
};
dblClickEdit.prototype.stop = function () {
$(document).off("dblclick.dce");
};
dblClickEdit.prototype.getSettingsPanel = function () {
return "";
};
dblClickEdit.prototype.getName = function () {
return "Double click edit";
};
dblClickEdit.prototype.getDescription = function () {
return "Double click messages to edit them";
};
dblClickEdit.prototype.getVersion = function () {
return "0.1.0";
};
dblClickEdit.prototype.getAuthor = function () {
return "Jiiks";
};

View File

@ -0,0 +1,84 @@
//META{"name":"emoteBlacklist"}*//
var emoteBlacklist = function () {};
emoteBlacklist.prototype.onMessage = function () {
};
emoteBlacklist.prototype.onSwitch = function () {
};
emoteBlacklist.prototype.start = function () {
window.ebEnabled = true;
var self = this;
var em = localStorage["emoteBlacklist"];
if(em == undefined) return;
JSON.parse(em).forEach(function(emote) {
self.remove(emote);
self.add(emote);
});
};
emoteBlacklist.prototype.add = function(emote) {
window.bemotes.push(emote);
};
emoteBlacklist.prototype.remove = function(emote) {
var index = bemotes.indexOf(emote);
if(index > -1) {
window.bemotes.splice(index, 1);
}
}
emoteBlacklist.prototype.load = function () {};
emoteBlacklist.prototype.unload = function () {
};
emoteBlacklist.prototype.stop = function () {
window.ebEnabled = false;
this.clear();
};
emoteBlacklist.prototype.clear = function() {
var self = this;
var em = localStorage["emoteBlacklist"];
if(em == undefined) return;
var em = JSON.parse(em);
em.forEach(function(emote) {
self.remove(emote);
});
};
emoteBlacklist.prototype.getSettingsPanel = function () {
var em = localStorage["emoteBlacklist"];
var html = '';
html += '<h2>Emote Blacklist</2>';
html += '<textarea id="emoteBlistTa" style="width:100%; min-height:200px;">';
if(em != undefined) {
JSON.parse(em).forEach(function(item) {
html += item + "\n";
});
}
html += '</textarea>';
html += '<button onclick="emoteBlacklist.prototype.save()">Save</button>';
html += '<span>Add emote names here to blacklist(1 per line)</span>';
return html;
};
emoteBlacklist.prototype.save = function() {
this.clear();
var blist = [];
$("#emoteBlistTa").val().split("\n").forEach(function(item) {
blist.push(item);
});
localStorage["emoteBlacklist"] = JSON.stringify(blist);
if(window.ebEnabled) {
this.start();
}
};
emoteBlacklist.prototype.getName = function () {
return "Emote Blacklist";
};
emoteBlacklist.prototype.getDescription = function () {
return "Blacklist emotes locally";
};
emoteBlacklist.prototype.getVersion = function () {
return "0.1.0";
};
emoteBlacklist.prototype.getAuthor = function () {
return "Jiiks";
};

View File

@ -48,7 +48,8 @@ Minimal mode makes elements smaller and hides certain elements.
Only display voice channels
**Public Servers:**
A menu for displaying public servers. [Serverlist](https://github.com/Jiiks/BetterDiscordApp/blob/master/data/serverlist.json)
A modal window for public servers [DiscordServers.com](https://www.discordservers.com/)
![ss](http://puu.sh/o9oNl.png)
**Custom CSS**
BetterDiscord supports custom CSS for styling Discord to your liking.
@ -57,7 +58,7 @@ BetterDiscord supports custom CSS for styling Discord to your liking.
BetterDiscord comes with a theme loader for loading your own or downloading themes made by others.
**Plugins**
BetterDiscord comes with a JavaSCript plugin loader for loading your own or downloading plugins made by others.
BetterDiscord comes with a JavaScript plugin loader for loading your own or downloading plugins made by others.
**Spoilers**
Add spoilers to your chat, simply add [!s] to your message.
@ -66,7 +67,8 @@ Add spoilers to your chat, simply add [!s] to your message.
Save chatlogs locally.(soon)
## Adding your server to public servers
Edit the [Serverlist](https://github.com/Jiiks/BetterDiscordApp/blob/master/data/serverlist.json) and submit a pull request.
As of JS1.60 the public server list is supplied by [DiscordServers.com](https://www.discordservers.com/)
Add your server there and it will appear in the list!
## BetterDiscord Uses the following API's
* https://twitchemotes.com/apidocs for Twitch emotes
@ -76,12 +78,13 @@ Edit the [Serverlist](https://github.com/Jiiks/BetterDiscordApp/blob/master/data
* MacOS Installer by [Candunc](https://github.com/Candunc)
* Emote titles by [pendo324](https://github.com/pendo324)
* Majority of FFZ emote work by [Pohky] (https://github.com/pohky)
* Majority of BTTV emote work by [EhsanKia] (https://github.com/EhsanKia)
## License
The MIT License (MIT)
Copyright (c) 2015 Jiiks | [Jiiks.net] (https://jiiks.net)
Copyright (c) 2015-2016 Jiiks | [Jiiks.net] (https://jiiks.net)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

File diff suppressed because one or more lines are too long

2
css/main.min.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -46,6 +46,42 @@
"Gunther",
"James",
"Chris",
"AyyLmao"
"AyyLmao",
"Bella",
"Jaxx",
"Baka",
"AYYLMAO",
"inverse",
"Kancolle",
"Poppins",
"Besen",
"Kirby",
"Megaman",
"MegaMan",
"GameBoy",
"Steve",
"Kawaii",
"Sona",
"Noice",
"Goat",
"Uhhh",
"Uhhhhh",
"Bueno",
"Pantsu",
"AAAHHH!!!",
"Dante",
"Moin",
"Herro",
"Asuna",
"Zyra",
"Midna",
"Pokeball",
"PokeBall",
"Nice!",
"FAIL",
"Gaben",
"Alexis",
"Gerald",
"Senpai"
]
}

View File

@ -1,998 +1 @@
{
"servers": {
"BetterDiscord": {
"code": "0Tmfo5ZbORCRqbAd",
"description": "BetterDiscord Server",
"icon": null,
"language": "EN",
"title": "BetterDiscord"
},
"3DS": {
"code": "0UFdpe0x69ZguQw8",
"description": "3DS",
"icon": null,
"language": "EN",
"title": "3DS"
},
"4chan": {
"code": "0jTw4blvTy1p64eL",
"description": "4chan Discord",
"icon": null,
"language": "EN",
"title": "4chan"
},
"American truck simulator multiplayer": {
"code": "0dFHyDoIgbSUXSpX",
"description": "a gamming server that allows 18+ content and plays ats mp",
"icon": null,
"language": "EN",
"title": "American Truck Simulator"
},
"a RinkuTalk's chat for ALL gamers": {
"code": "0c2ds5wYPS0qMqF5",
"description": "A new community for ALL gamers",
"icon": null,
"language": "EN",
"title": "a RinkuTalk's chat for ALL gamers"
},
"Bacon_Space": {
"code": "0X6sQJODTVdEYwL0",
"description": "The official Server For Bacon_Space",
"icon": null,
"language": "EN",
"title": "Bacon_Space"
},
"Black Desert Online": {
"code": "0hpSA0xzUj07ABop",
"description": "BDO",
"icon": null,
"language": "EN",
"title": "Black Desert Online"
},
"ALTEDM": {
"code": "0Y6Is461Ze5ae0w1",
"description": "ALTEDM",
"icon": null,
"language": "EN",
"title": "ALTEDM"
},
"ARMA": {
"code": "0aGPuCZqmGNA7xiu",
"description": "ARMA",
"icon": null,
"language": "EN",
"title": "ARMA"
},
"Abusement Park": {
"code": "0YEnlwRYgAEvNz98",
"description": "Abusement Park",
"icon": null,
"language": "EN",
"title": "Abusement Park"
},
"Adventurer's Guild": {
"code": "0MRCBg85iz6XrZu2",
"description": "Adventurer's Guild",
"icon": null,
"language": "EN",
"title": "Adventurer's Guild"
},
"Animu and Mango": {
"code": "0TrxVUwZsSuz9S4j",
"description": "Animu and Mango",
"icon": null,
"language": "EN",
"title": "Animu and Mango"
},
"Anime-Discuss": {
"code": "0ccNdvWBCEuw87eD",
"description": "Anime-Discuss",
"icon": null,
"language": "EN",
"title": "Anime-Discuss"
},
"Anime Discord": {
"code": "0jsnS27eGHesxVRA",
"description": "General Anime Server",
"icon": null,
"language": "EN",
"title": "Anime Discord"
},
"Binding of Isaac": {
"code": "0gonaBVBNISU8zhS",
"description": "For all Isaac talk",
"icon": null,
"language": "EN",
"title": "Binding of Isaac"
},
"Blade and Soul": {
"code": "0TaItTx9qrQce4iU",
"description": "Blade and Soul",
"icon": null,
"language": "EN",
"title": "Blade and Soul"
},
"Blade Symphony": {
"code": "0gaDaXebgoD4CJ3a",
"description": "Blade Symphony",
"icon": null,
"language": "EN",
"title": "Blade Symphony"
},
"BloodBorne": {
"code": "0rWbfWTmpUVHaC9Z",
"description": "BloodBorne",
"icon": null,
"language": "EN",
"title": "BloodBorne"
},
"Borderlands": {
"code": "0mxtC2FGDw7JkCyb",
"description": "Everything Borderlands",
"icon": null,
"language": "EN",
"title": "Borderlands"
},
"Cell Geek House": {
"code": "0eMZO3uY2Gk15xD7",
"description": "Cell Geek House / Cell Cyber Arena",
"icon": null,
"language": "EN",
"title": "Cell Geek House"
},
"CS:GO": {
"code": "0TIJM4joeU3XmRWO",
"description": "CS:GO",
"icon": null,
"language": "EN",
"title": "CS:GO"
},
"ChristOutreachOnline": {
"code": "0aFmfZpsrBo0bD1d",
"description": "ChristOutreachOnline",
"icon": null,
"language": "EN",
"title": "ChristOutreachOnline"
},
"Closers Dimension Conflict": {
"code": "0S3aWQEkIlWcA2CD",
"description": "Closers Dimension Conflict",
"icon": null,
"language": "EN",
"title": "Closers Dimension Conflict"
},
"Comic Book General": {
"code": "0aNAiNnGVDNURGbI",
"description": "Comic Book General",
"icon": null,
"language": "EN",
"title": "Comic Book General"
},
"Crowfall MMO": {
"code": "0MDCm6IEmg1BF8Ui",
"description": "Crowfall MMO",
"icon": null,
"language": "EN",
"title": "Crowfall MMO"
},
"Dark souls": {
"code": "0rmIDReRI5pRvVwL",
"description": "Souls games in general",
"icon": null,
"language": "EN",
"title": "Dark souls"
},
"Don't Panic Gaming": {
"code": "0bXgOt3dBY4skhqx",
"description": "Community for Esports, Competitive, Co-Op, & MMO games. Everyone is welcome!",
"icon": null,
"language": "EN",
"title": "Don't Panic Gaming"
},
"DOTA2": {
"code": "0Pj5D1QKnYAR4GQ7",
"description": "DOTA 2",
"icon": null,
"language": "EN",
"title": "DOTA 2"
},
"DUTCH": {
"code": "0Vb7szHL7DblhTFt",
"description": "[NL] FPS/MOBA",
"icon": null,
"language": "NL",
"title": "DUTCH"
},
"Devilion MMO": {
"code": "0Mgy9tqnN39ctFsm",
"description": "Devilion MMO",
"icon": null,
"language": "EN",
"title": "Devilion MMO"
},
"Diablo 3": {
"code": "0aOBBxGmOoM5IJ25",
"description": "Diablo 3",
"icon": null,
"language": "EN",
"title": "Diablo 3"
},
"Diablo": {
"code": "0TAtzhBDJhJiC9Ie",
"description": "Diablo",
"icon": null,
"language": "EN",
"title": "Diablo"
},
"Discord & Chill": {
"code": "0kXd4CnI26mZzkun",
"description": "Discord & Chill",
"icon": null,
"language": "EN",
"title": "Discord & Chill"
},
"DiscordDevs": {
"code": "0ESuwoZe4M2Xcpeu",
"description": "DiscordDevs",
"icon": null,
"language": "EN",
"title": "DiscordDevs"
},
"DiscordLinux": {
"code": "0XKEBLSe6ccP5uYT",
"description": "DiscordLinux",
"icon": null,
"language": "EN",
"title": "DiscordLinux"
},
"Distance": {
"code": "0SlqqvzfIbgVqJB6",
"description": "Distance",
"icon": null,
"language": "EN",
"title": "Distance"
},
"Dofus": {
"code": "0RDH0dqUoTRFbwy9",
"description": "Dofus",
"icon": null,
"language": "EN",
"title": "Dofus"
},
"Dragon Nest DNSWorld": {
"code": "0VcwAnzwc0KNfgML",
"description": "Dragon Nest DNSWorld",
"icon": null,
"language": "EN",
"title": "Dragon Nest DNSWorld"
},
"Dragon Nest NA": {
"code": "0aoJVkoXoNwFEUea",
"description": "Dragon Nest NA",
"icon": null,
"language": "EN",
"title": "Dragon Nest NA"
},
"E-Sports India": {
"code": "0YlFAx7vf5bUixZQ",
"description": "E-Sports India",
"icon": null,
"language": "EN",
"title": "E-Sports India"
},
"ElDewrito": {
"code": "0TKY0SDEUHBum0w3",
"description": "Halo Online ElDewrito",
"icon": null,
"language": "EN",
"title": "ElDewrito"
},
"Elite Dangerous": {
"code": "0V5hfT4eO8fN9Q6K",
"description": "Elite Dangerous",
"icon": null,
"language": "EN",
"title": "Elite Dangerous"
},
"Enter The Gungeon": {
"code": "0ryTXuSfkjkPnJzG",
"description": "The Official Enter The Gungeon Discord server!",
"icon": null,
"language": "EN",
"title": "Enter The Gungeon"
},
"Evolve": {
"code": "0UqXI9nyH0aVU7rr",
"description": "Evolve",
"icon": null,
"language": "EN",
"title": "Evolve"
},
"FIFA": {
"code": "0npfNGZdJzQwQWfH",
"description": "FIFA Community",
"icon": null,
"language": "EN",
"title": "FIFA"
},
"FFXIV (chaos)XIV Cerberus": {
"code": "0ZxYbZOJBFGPHFCA",
"description": "FFXIV (chaos)XIV Cerberus",
"icon": null,
"language": "EN",
"title": "FFXIV (chaos)XIV Cerberus"
},
"FFXIV - Adamantoise": {
"code": "0a7yOKD02XGkhkX1",
"description": "FFXIV - Adamantoise",
"icon": null,
"language": "EN",
"title": "FFXIV - Adamantoise"
},
"FFXIV - Leviathan": {
"code": "0aBJkEDJGsBMDNON",
"description": "FFXIV - Leviathan",
"icon": null,
"language": "EN",
"title": "FFXIV - Leviathan"
},
"FFXIV - Odin": {
"code": "0aBuERD9ZVV8BFqq",
"description": "FFXIV - Odin",
"icon": null,
"language": "EN",
"title": "FFXIV - Odin"
},
"FFXIV - Siren": {
"code": "0MZiEDmQueFAGTmV",
"description": "FFXIV - Siren",
"icon": null,
"language": "EN",
"title": "FFXIV - Siren"
},
"FFXIV - Ultros": {
"code": "0alCJcRuekEnn3Ha",
"description": "FFXIV - Ultros",
"icon": null,
"language": "EN",
"title": "FFXIV - Ultros"
},
"FFXIV Heavensward": {
"code": "0HCCgO4RbqVjgShp",
"description": "FFXIV Heavensward",
"icon": null,
"language": "EN",
"title": "FFXIV Heavensward"
},
"Fuckboii squad #1": {
"code": "0V2bHFWgHEZt0GsE",
"description": "Fuckboii squad #1",
"icon": null,
"language": "EN",
"title": "Fuckboii squad #1"
},
"Games are Magic": {
"code": "0THXqgmFNlha7B6g",
"description": "Games are Magic",
"icon": null,
"language": "EN",
"title": "Games are Magic"
},
"GamerLust": {
"code": "0cvtNUFEng8cC0M5",
"description": "SG-based Gaming Group for Asia",
"icon": null,
"language": "EN",
"title": "GamerLust"
},
"Guild Wars 2": {
"code": "0b5yVCmhcVt4C6mr",
"description": "Guild Wars 2",
"icon": null,
"language": "EN",
"title": "Guild Wars 2"
},
"Hearthstone": {
"code": "0TwrUZr5zGyFd7HX",
"description": "Hearthstone",
"icon": null,
"language": "EN",
"title": "Hearthstone"
},
"Heroes of the Storm": {
"code": "0SLRrvrOn5DdcrHU",
"description": "Heroes of the Storm",
"icon": null,
"language": "EN",
"title": "Heores of the Storm"
},
"Highschool DxD": {
"code": "0guT1EI9HilMr4dg",
"description": "Highschool DxD",
"icon": null,
"language": "EN",
"title": "Highschool DxD"
},
"Hip Slick & Geek": {
"code": "0Uk8GIZtbNLEbhaP",
"description": "Hip Slick & Geek",
"icon": null,
"language": "EN",
"title": "Hip Slick & Geek"
},
"HiT KiLL": {
"code": "0fKc5put2GOk7Ha1",
"description": "Clã Profissional Brasileiro",
"icon": null,
"language": "BR",
"title": "HiT KiLL"
},
"Insurgency": {
"code": "0YOLsfWWZSvS0jHe",
"description": "Insurgency",
"icon": null,
"language": "EN",
"title": "Insurgency"
},
"Japanese Media Management": {
"code": "0XKJW7TObKLajoKc",
"description": "Japanese Media Management",
"icon": null,
"language": "EN",
"title": "Japanese Media Management"
},
"Kantai Collection": {
"code": "0eyxqn2G56wtSSlx",
"description": "Kantai Collection",
"icon": null,
"language": "EN",
"title": "Kantai Collection"
},
"KappaPride": {
"code": "0ijf4nNsflGI8zYR",
"description": "#Kappa",
"icon": null,
"language": "EN",
"title": "KappaPride"
},
"Keep Talking and Nobody Explodes": {
"code": "0mq6FkTuEuF2i7Gc",
"description": "Don't Explode!",
"icon": null,
"language": "EN",
"title": "Keep Talking and Nobody Explodes"
},
"Killing Floor 2": {
"code": "0YmeWp0IqRUndLXx",
"description": "Killing Floor 2",
"icon": null,
"language": "EN",
"title": "Killing Floor 2"
},
"Kiri's Bubble": {
"code": "0pnEgYqTNP4MlRam",
"description": "Anime, games & weebyness!",
"icon": null,
"language": "EN",
"title": "Kiri's Bubble"
},
"LeagueConnect": {
"code": "0rZblC446P2ivDcq",
"description": "/r/leagueconnect ~ Find summoners to play with!",
"icon": null,
"language": "EN",
"title": "LeagueConnect"
},
"League of Legends": {
"code": "0T8zCRzGTxbLjlhw",
"description": "League of Legends",
"icon": null,
"language": "EN",
"title": "League of Legends"
},
"Left 4 Dead 2": {
"code": "0YmpIAl4WCls4SLK",
"description": "Left 4 Dead 2",
"icon": null,
"language": "EN",
"title": "Left 4 Dead 2"
},
"Let's Play": {
"code": "0jPHFPiVA2lxKFvN",
"description": "For all kind of Let's Players and viewers.",
"icon": null,
"language": "ALL",
"title": "Let's Play"
},
"Lost Saga": {
"code": "0XVkwnDAeKgT2Cbv",
"description": "Lost Saga",
"icon": null,
"language": "EN",
"title": "Lost Saga"
},
"Mario Kart": {
"code": "0TtGzmNdU5ZxCkgv",
"description": "Mario Kart",
"icon": null,
"language": "EN",
"title": "Mario Kart"
},
"Meebo and Friends": {
"code": "0ZP2BxUIC1eQSp4K",
"description": "Meebo and Friends",
"icon": null,
"language": "EN",
"title": "Meebo and Friends"
},
"Minecraft": {
"code": "0VAzP14IRxYaC97V",
"description": "Minecraft",
"icon": null,
"language": "EN",
"title": "Minecraft"
},
"MovieClub": {
"code": "0Tx4H0SMzT5Qv46T",
"description": "MovieClub",
"icon": null,
"language": "EN",
"title": "MovieClub"
},
"NadekoLog": {
"code": "0ehQwTK2RBjAxzEY",
"description": "Server for NadekoBot",
"icon": null,
"language": "EN",
"title": "NadekoLog"
},
"NerdChat": {
"code": "0Z83mQOMvdEpNbBg",
"description": "NerdChat",
"icon": null,
"language": "EN",
"title": "NerdChat"
},
"Osu!": {
"code": "0Y1676AR4QQfPn4x",
"description": "Osu!",
"icon": null,
"language": "EN",
"title": "Osu!"
},
"Overwatch": {
"code": "0aP2XiSkO7ekjro4",
"description": "Overwatch",
"icon": null,
"language": "EN",
"title": "Overwatch"
},
"PKA/Painkiller": {
"code": "0Ud6KT05Ly2NMd3f",
"description": "PKA/Painkiller",
"icon": null,
"language": "EN",
"title": "PKA/Painkiller"
},
"PSO": {
"code": "0tj67PFj37QfKumq",
"description": "Discord Server for Phantasy Star Online.",
"icon": null,
"language": "EN",
"title": "PSO"
},
"PSO2": {
"code": "0tj67PFj37QfKumq",
"description": "Discord Server for Phantasy Star Online 2.",
"icon": null,
"language": "EN",
"title": "PSO2"
},
"PORTUGUESE": {
"code": "",
"description": "PORTUGUESE",
"icon": null,
"language": "PT",
"title": "PORTUGUESE"
},
"Path of Exile": {
"code": "0aPhfOWXrsfz4wk2",
"description": "Path of Exile",
"icon": null,
"language": "EN",
"title": "Path of Exile"
},
"Project Zomboid": {
"code": "0OjlJ7zhCLhDTCti",
"description": "Project Zomboid",
"icon": null,
"language": "EN",
"title": "Project Zomboid"
},
"R6:Siege Community": {
"code": "0eyCK2wAW2LziLem",
"description": "Rainbow 6: Siege Community",
"icon": null,
"language": "EN",
"title": "R6: Siege Community"
},
"Ragnarok Online": {
"code": "0hr7izZb0BhnyN8L",
"description": "Ragnarok Online",
"icon": null,
"language": "EN",
"title": "Ragnarok Online"
},
"Reflex": {
"code": "0SrnNbgr3f6Mz9kt",
"description": "Reflex",
"icon": null,
"language": "EN",
"title": "Reflex"
},
"Rampage Knights": {
"code": "0q1Yv1bYDsRYK3TH",
"description": "Rampage Knights",
"icon": null,
"language": "EN",
"title": "Rampage Knights"
},
"RepZ": {
"code": "0gAFLYLhoOvyeqBA",
"description": "RepZ Clan Discord Server",
"icon": null,
"language": "EN",
"title": "RepZ"
},
"Rhythm Games Community": {
"code": "0SrIUyiiarDafGL2",
"description": "Rhythm Games Community",
"icon": null,
"language": "EN",
"title": "Rhythm Games Community"
},
"Rising Thunder": {
"code": "0WTdWwnuayUuFQYH",
"description": "Rising Thunder",
"icon": null,
"language": "EN",
"title": "Rising Thunder"
},
"Rocket League": {
"code": "0TDkiRRfZwNBNfA5",
"description": "Rocket League",
"icon": null,
"language": "EN",
"title": "Rocket League"
},
"SWEDISH": {
"code": "0VnT8iwVFHLNARyZ",
"description": "SWEDISH",
"icon": null,
"language": "SWE",
"title": "SWEDISH"
},
"Secrets of Grindea": {
"code": "0OKNQ4xrrE0PRQQM",
"description": "Secrets of Grindea",
"icon": null,
"language": "EN",
"title": "Secrets of Grindea"
},
"Smash Brothers /r/ssbm": {
"code": "0Xeas8JqXwdpX0lR",
"description": "Smash Brothers /r/ssbm",
"icon": null,
"language": "EN",
"title": "Smash Brothers"
},
"Smash Brothers": {
"code": "0PAW8nxQx9UbYVTq",
"description": "Smash Brothers - Australian Smash",
"icon": null,
"language": "EN",
"title": "Smash Brothers"
},
"Smite": {
"code": "0U54RVEbDtnOU2wa",
"description": "Smite",
"icon": null,
"language": "EN",
"title": "Smite"
},
"Social Hub": {
"code": "0VIWePEAZcdNDQM5",
"description": "Social Hub",
"icon": null,
"language": "EN",
"title": "Social Hub"
},
"SoulsBorne": {
"code": "0gzazVW6NC6TCIJC",
"description": "All things soulsborne",
"icon": null,
"language": "EN",
"title": "SoulsBorne"
},
"Splatoon Central": {
"code": "0d2oP2Iw3a4HmOvT",
"description": "Casual and Competitive Splatoon",
"icon": null,
"language": "EN",
"title": "Splatoon"
},
"Starcraft": {
"code": "0Vjzi81e7LFaUhPR",
"description": "Starcraft",
"icon": null,
"language": "EN",
"title": "Starcraft"
},
"Sword of Vermilion": {
"code": "0b0ZitR25ZeGGiLT",
"description": "Sword of Vermilion",
"icon": null,
"language": "EN",
"title": "Sword of Vermilion"
},
"TCG": {
"code": "0aGuULuB9C2JbHs4",
"description": "TCG Central",
"icon": null,
"language": "EN",
"title": "TCG"
},
"TheWinggas": {
"code": "0agnV89C8NpXnJbl",
"description": "Winggas for days",
"icon": null,
"language": "EN",
"title": "TheWinggas"
},
"Team Fortress 2": {
"code": "0jpmB1FuxD21gXAK",
"description": "Team Fortress 2",
"icon": null,
"language": "EN",
"title": "Team Fortress 2"
},
"Terraria": {
"code": "0U4zNFIJpDCL7GQs",
"description": "Terraria",
"icon": null,
"language": "EN",
"title": "Terraria"
},
"The Fierce Force": {
"code": "0Yr48oAoyY3TSdcE",
"description": "League of Legends, Tree of Savior, and other various games!",
"icon": null,
"language": "EN",
"title": "The Fierce Force"
},
"The MKW Wiimm-fi Chats": {
"code": "0SdlpwUtv7ozFqXg",
"description": "The MKW Wiimm-fi Chats",
"icon": null,
"language": "EN",
"title": "The MKW Wiimm-fi Chats"
},
"The Music Bar": {
"code": "0TBYxuT95eWrk9RI",
"description": "The Music Bar",
"icon": null,
"language": "EN",
"title": "The Music Bar"
},
"The Prickly Cactus": {
"code": "0nkHMl1nnNymyVju",
"description": "Social Interaction",
"icon": null,
"language": "EN",
"title": "The Prickly Cactus"
},
"The Sims": {
"code": "0YjcYngtdfkBMAxn",
"description": "The Sims",
"icon": null,
"language": "EN",
"title": "The Sims"
},
"The Deviant Network": {
"code": "0inuUAPt3Wrsfplv",
"description": "The Deviant Network",
"icon": null,
"language": "EN",
"title": "The Deviant Network"
},
"The Division Community": {
"code": "0lh5FmzP4CG785uV",
"description": "The Division Community",
"icon": null,
"language": "EN",
"title": "The Division Community"
},
"Torture Room": {
"code": "0cjW7fqk1DDiV0VQ",
"description": "The Official Torture Room :D",
"icon": null,
"language": "EN",
"title": "Torture Room"
},
"Touhou": {
"code": "0U6KAap475vPWss7",
"description": "Touhou",
"icon": null,
"language": "EN",
"title": "Touhou"
},
"Tree Of Savior": {
"code": "0QFW9NDirWiV9RZh",
"description": "Tree Of Savior",
"icon": null,
"language": "EN",
"title": "Tree Of Savior"
},
"Tripulse Community": {
"code": "0RfRA4njAeYbZAdl",
"description": "Tripulse Community",
"icon": null,
"language": "EN",
"title": "Tripulse Community"
},
"The Witness": {
"code": "0nLAMjaMh2VgCrSS",
"description": "The Witness",
"icon": null,
"language": "EN",
"title": "The Witness"
},
"Unofficial Gearbox Discord": {
"code": "0Ut1Gt2sJo6GTFXa",
"description": "Unofficial Gearbox Discord",
"icon": null,
"language": "EN",
"title": "Unofficial Gearbox Discord"
},
"Unofficial Monstercat": {
"code": "0XzWvesV0VyuKDXW",
"description": "Unofficial Monstercat",
"icon": null,
"language": "EN",
"title": "Unofficial Monstercat"
},
"Unofficial Nintendo": {
"code": "0VUyTH6zFt3zU3QW",
"description": "Unofficial Nintendo",
"icon": null,
"language": "EN",
"title": "Unofficial Nintendo"
},
"Unofficial PC Master Race": {
"code": "0VEW0OVOGMjjSmzP",
"description": "Unofficial PC Master Race",
"icon": null,
"language": "EN",
"title": "Unofficial PC Master Race"
},
"Unreal Tournament 4": {
"code": "0UgVfEa2r2CwcjJg",
"description": "Unreal Tournament 4",
"icon": null,
"language": "EN",
"title": "Unreal Tournament 4"
},
"Wakfu": {
"code": "0WL9EEf55J99YJJX",
"description": "Wakfu",
"icon": null,
"language": "EN",
"title": "Wakfu"
},
"Warframe": {
"code": "0Qj6myIvIZgVf5zr",
"description": "Warframe",
"icon": null,
"language": "EN",
"title": "Warframe"
},
"Wildstar": {
"code": "0TrMr9NtcKujZXLh",
"description": "Wildstar",
"icon": null,
"language": "EN",
"title": "Wildstar"
},
"World of Tanks": {
"code": "0tm6LMVPkok6gKP8",
"description": "World of Tanks community server",
"icon": null,
"language": "EN",
"title": "World of Tanks"
},
"[EU]Rocket League": {
"code": "0W70FqxbCli27BfR",
"description": "[EU]Rocket League",
"icon": null,
"language": "EN",
"title": "[EU]Rocket League"
},
"[UK] FPS/RTS/RPG": {
"code": "0TzxyhJax4nDbITe",
"description": "[UK] FPS/RTS/RPG",
"icon": null,
"language": "EN",
"title": "[UK] FPS/RTS/RPG"
},
"Game Development": {
"code": "0dlKnYoTVkWaLYOd",
"description": "Game Development",
"icon": null,
"language": "EN",
"title": "Game Development"
},
"9D Awaken": {
"code": "0lQg5MHMLN5dV7F7",
"description": "9dragons awaken beta group",
"icon": null,
"language": "EN",
"title": "9dragons awaken beta group"
},
"Rivals of Aether": {
"code": "0M4F1870WAbAPTbg",
"description": "Rivals of Aether",
"icon": null,
"language": "EN",
"title": "Rivals of Aether"
},
"BOUNDARIES UNDERTALE": {
"code": "0kOFr0tF9gwI5I4d",
"description": "An Undertale RP server",
"icon": null,
"language": "EN",
"title": "=||BOUNDARIES UNDERTALE||="
},
"WE DIDNT NAME THIS SERVER AT ALL": {
"code": "0VdAmanOQSBH5Jbs",
"description": "a voice server for fans and hosts of the new podcast youtube channel we didnt name this podcast at all",
"icon": null,
"language": "EN",
"title": "We didnt name this server at all"
},
"Metal Gear Network": {
"code": "0PsGOLmD8akgwIB0",
"description": "Metal Gear Network // Metal Gear Series as well as games in the Konami/Kojima universe",
"icon": null,
"language": "EN",
"title": "Metal Gear Network"
},
"All the games!": {
"code": "0qKvbnYBZO1Vb4cB",
"description": "This server is for people who wanna play games together or just talk about anime or whatever!",
"icon": null,
"language": "EN",
"title": "All the games!"
},
"League of Legends (España)": {
"code": "0pQ5IG864BvI4MZp",
"description": "Servidor de League of Legends para la comunidad española.",
"icon": null,
"language": "SP",
"title": "League of Legends (España)"
},
"Dirty Bomb": {
"code": "0gP8aNVcec8Og5Tm",
"description": "Official Dirty Bomb Discord!",
"icon": null,
"language": "EN",
"title": "Dirty Bomb"
},
"[Division]": {
"code": "0ZuJtFPiGu0YtDjO",
"description": "Void Elsword Guild Server.",
"icon": null,
"language": "EN",
"title": "Division"
}
}
}
{ "servers": { } }

1040
data/serverlist_archive.json Normal file

File diff suppressed because it is too large Load Diff

1024
js/main.js

File diff suppressed because it is too large Load Diff

55
js/main.min.js vendored
View File

@ -1,53 +1,62 @@
var settingsPanel,emoteModule,utils,quickEmoteMenu,opublicServers,voiceMode,pluginModule,themeModule;var jsVersion=1.58;var supportedVersion="0.2.5";var mainObserver;var twitchEmoteUrlStart="https://static-cdn.jtvnw.net/emoticons/v1/";var twitchEmoteUrlEnd="/1.0";var ffzEmoteUrlStart="https://cdn.frankerfacez.com/emoticon/";var ffzEmoteUrlEnd="/1";var bttvEmoteUrlStart="https://cdn.betterttv.net/emote/";var bttvEmoteUrlEnd="/1x";var mainCore;var settings={"Save logs locally":{"id":"bda-gs-0","info":"Saves chat logs locally","implemented":false},"Public Servers":{"id":"bda-gs-1","info":"Display public servers button","implemented":true},"Minimal Mode":{"id":"bda-gs-2","info":"Hide elements and reduce the size of elements.","implemented":true},"Voice Mode":{"id":"bda-gs-4","info":"Only show voice chat","implemented":true},"Hide Channels":{"id":"bda-gs-3","info":"Hide channels in minimal mode","implemented":true},"Quick Emote Menu":{"id":"bda-es-0","info":"Show quick emote menu for adding emotes","implemented":true},"Show Emotes":{"id":"bda-es-7","info":"Show any emotes","implemented":true},"FrankerFaceZ Emotes":{"id":"bda-es-1","info":"Show FrankerFaceZ Emotes","implemented":true},"BetterTTV Emotes":{"id":"bda-es-2","info":"Show BetterTTV Emotes","implemented":true},"Emote Autocomplete":{"id":"bda-es-3","info":"Autocomplete emote commands","implemented":false},"Emote Auto Capitalization":{"id":"bda-es-4","info":"Autocapitalize emote commands","implemented":true},"Override Default Emotes":{"id":"bda-es-5","info":"Override default emotes","implemented":false},"Show Names":{"id":"bda-es-6","info":"Show emote names on hover","implemented":true},"Show emote modifiers":{"id":"bda-es-8","info":"Enable/Disable emote mods","implemented":true}};var links={"Jiiks.net":{"text":"Jiiks.net","href":"http://jiiks.net","target":"_blank"},"twitter":{"text":"Twitter","href":"http://twitter.com/jiiksi","target":"_blank"},"github":{"text":"Github","href":"http://github.com/jiiks","target":"_blank"}};var defaultCookie={"version":jsVersion,"bda-gs-0":false,"bda-gs-1":true,"bda-gs-2":false,"bda-gs-3":false,"bda-gs-4":false,"bda-es-0":true,"bda-es-1":true,"bda-es-2":true,"bda-es-3":false,"bda-es-4":false,"bda-es-5":true,"bda-es-6":true,"bda-es-7":true,"bda-es-8":true,"bda-jd":true};var bdchangelog={"changes":{"api":{"title":"Emote modifiers!","text":"You can use the following modifiers to modify emotes: <br> <strong>spin</strong>, <strong>spin2</strong>, <strong>spin3</strong>, <strong>flip</strong>, <strong>pulse</strong>, <strong>spinflip</strong>. <br> Example usage: Kappa:spin","img":""}}};var settingsCookie={};var bdaf=false;var bdafo=false;function Core(){}
var settingsPanel,emoteModule,utils,quickEmoteMenu,opublicServers,voiceMode,pluginModule,themeModule,customCssEditor;var jsVersion=1.62;var supportedVersion="0.2.5";var mainObserver;var twitchEmoteUrlStart="https://static-cdn.jtvnw.net/emoticons/v1/";var twitchEmoteUrlEnd="/1.0";var ffzEmoteUrlStart="https://cdn.frankerfacez.com/emoticon/";var ffzEmoteUrlEnd="/1";var bttvEmoteUrlStart="https://cdn.betterttv.net/emote/";var bttvEmoteUrlEnd="/1x";var mainCore;var settings={"Save logs locally":{"id":"bda-gs-0","info":"Saves chat logs locally","implemented":false,"hidden":false},"Public Servers":{"id":"bda-gs-1","info":"Display public servers button","implemented":true,"hidden":false},"Minimal Mode":{"id":"bda-gs-2","info":"Hide elements and reduce the size of elements.","implemented":true,"hidden":false},"Voice Mode":{"id":"bda-gs-4","info":"Only show voice chat","implemented":true,"hidden":false},"Hide Channels":{"id":"bda-gs-3","info":"Hide channels in minimal mode","implemented":true,"hidden":false},"Emote Menu":{"id":"bda-es-0","info":"Show Twitch/Favourite emotes in emote menu","implemented":true,"hidden":false},"Emoji Menu":{"id":"bda-es-9","info":"Show/Hide Discord emoji menu","implemented":true,"hidden":false},"Show Emotes":{"id":"bda-es-7","info":"Show any emotes","implemented":true,"hidden":false},"FrankerFaceZ Emotes":{"id":"bda-es-1","info":"Show FrankerFaceZ Emotes","implemented":true,"hidden":false},"BetterTTV Emotes":{"id":"bda-es-2","info":"Show BetterTTV Emotes","implemented":true,"hidden":false},"Emote Autocomplete":{"id":"bda-es-3","info":"Autocomplete emote commands","implemented":false,"hidden":false},"Emote Auto Capitalization":{"id":"bda-es-4","info":"Autocapitalize emote commands","implemented":true,"hidden":false},"Override Default Emotes":{"id":"bda-es-5","info":"Override default emotes","implemented":false,"hidden":false},"Show Names":{"id":"bda-es-6","info":"Show emote names on hover","implemented":true,"hidden":false},"Show emote modifiers":{"id":"bda-es-8","info":"Enable/Disable emote mods","implemented":true,"hidden":false},"Voice Disconnect":{"id":"bda-dc-0","info":"Disconnect from voice server when closing Discord","implemented":true,"hidden":false},"Custom css live update":{"id":"bda-css-0","info":"","implemented":true,"hidden":true},"Custom css auto udpate":{"id":"bda-css-1","info":"","implemented":true,"hidden":true},};var links={"Jiiks.net":{"text":"Jiiks.net","href":"http://jiiks.net","target":"_blank"},"twitter":{"text":"Twitter","href":"http://twitter.com/jiiksi","target":"_blank"},"github":{"text":"Github","href":"http://github.com/jiiks","target":"_blank"}};var defaultCookie={"version":jsVersion,"bda-gs-0":false,"bda-gs-1":true,"bda-gs-2":false,"bda-gs-3":false,"bda-gs-4":false,"bda-es-0":true,"bda-es-1":true,"bda-es-2":true,"bda-es-3":false,"bda-es-4":false,"bda-es-5":true,"bda-es-6":true,"bda-es-7":true,"bda-es-8":true,"bda-jd":true,"bda-es-8":true,"bda-dc-0":false,"bda-css-0":false,"bda-css-1":false,"bda-es-9":true};var bdchangelog={"changes":{"emotemenu":{"title":"v1.62 : Brand new emote menu that fits in Discord emoji menu!","text":"The emote menu has been replaced by a new one that injects itself in the Discord emoji menu!","img":""},"cccss":{"title":"v1.61 : New custom CSS editor","text":"The custom CSS editor now has options and can be detached!","img":""},"vdc":{"title":"v1.61 : Voice Disconnect","text":"Disconnect from voice server when closing Discord!","img":""},"pslist":{"title":"v1.60 : New public server list!","text":'New and shiny public server list powered by <a href="https://www.discordservers.com/" target="_blank">DiscordServers.com</a>!',"img":""},"api":{"title":"v1.59 : New plugin api callback","text":"Use the `observer(e)` callback instead of creating your own MutationObserver","img":""},"emotemods":{"title":"v1.59 : New emote mods!","text":"The following emote mods have been added: :shake2, :shake3, :flap","img":""},"minmode":{"title":"v1.59: Minimal mode","text":"Minimal mode embed fixed size has been removed","img":""}},"fixes":{"modal":{"title":"v1.62 : Fixed modals","text":"Fixed broken modal introduced by 0.0.287","imt":""},"emotes":{"title":"v1.59 : Native sub emote mods","text":"Emote mods now work with native sub emotes!","img":""},"emotes2":{"title":"v1.59 : Emote mods and custom emotes","text":"Emote mods will no longer interfere with custom emotes using :","img":""}}};var settingsCookie={};function Core(){}
Core.prototype.init=function(){var self=this;if(version<supportedVersion){this.alert("Not Supported","BetterDiscord v"+version+"(your version)"+" is not supported by the latest js("+jsVersion+").<br><br> Please download the latest version from <a href='https://betterdiscord.net' target='_blank'>BetterDiscord.net</a>");return;}
utils=new Utils();var sock=new BdWSocket();sock.start();utils.getHash();emoteModule=new EmoteModule();quickEmoteMenu=new QuickEmoteMenu();voiceMode=new VoiceMode();emoteModule.init();this.initSettings();this.initObserver();function gwDefer(){console.log(new Date().getTime()+" Defer");if($(".guilds-wrapper .guilds").children().length>0){console.log(new Date().getTime()+" Defer Loaded");var guilds=$(".guilds>li:first-child");guilds.after($("<li></li>",{id:"bd-pub-li",css:{"height":"20px","display":settingsCookie["bda-gs-1"]==true?"":"none"}}).append($("<div/>",{class:"guild-inner",css:{"height":"20px","border-radius":"4px"}}).append($("<a/>").append($("<div/>",{css:{"line-height":"20px","font-size":"12px"},text:"public",id:"bd-pub-button"})))));var showChannelsButton=$("<button/>",{class:"btn",id:"bd-show-channels",text:"R",css:{"cursor":"pointer"},click:function(){settingsCookie["bda-gs-3"]=false;$("body").removeClass("bd-minimal-chan");self.saveSettings();}});$(".guilds-wrapper").prepend(showChannelsButton);opublicServers=new PublicServers();pluginModule=new PluginModule();pluginModule.loadPlugins();if(typeof(themesupport2)!=="undefined"){themeModule=new ThemeModule();themeModule.loadThemes();}
settingsPanel=new SettingsPanel();settingsPanel.init();quickEmoteMenu.init(false);$("#tc-settings-button").on("click",function(){settingsPanel.show();});$("#bd-pub-button").on("click",function(){opublicServers.show();});opublicServers.init();emoteModule.autoCapitalize();if(settingsCookie["version"]<jsVersion){var cl=self.constructChangelog();$("body").append(cl);settingsCookie["version"]=jsVersion;self.saveSettings();}
utils=new Utils();var sock=new BdWSocket();sock.start();utils.getHash();emoteModule=new EmoteModule();quickEmoteMenu=new QuickEmoteMenu();voiceMode=new VoiceMode();emoteModule.init();this.initSettings();this.initObserver();function gwDefer(){console.log(new Date().getTime()+" Defer");if($(".guilds-wrapper .guilds").children().length>0){console.log(new Date().getTime()+" Defer Loaded");var guilds=$(".guilds>li:first-child");var showChannelsButton=$("<button/>",{class:"btn",id:"bd-show-channels",text:"R",css:{"cursor":"pointer"},click:function(){settingsCookie["bda-gs-3"]=false;$("body").removeClass("bd-minimal-chan");self.saveSettings();}});$(".guilds-wrapper").prepend(showChannelsButton);opublicServers=new PublicServers();customCssEditor=new CustomCssEditor();pluginModule=new PluginModule();pluginModule.loadPlugins();if(typeof(themesupport2)!=="undefined"){themeModule=new ThemeModule();themeModule.loadThemes();}
settingsPanel=new SettingsPanel();settingsPanel.init();quickEmoteMenu.init(false);$("#tc-settings-button").on("click",function(){settingsPanel.show();});window.addEventListener("beforeunload",function(){if(settingsCookie["bda-dc-0"]){$('.btn.btn-disconnect').click();}});opublicServers.init();emoteModule.autoCapitalize();if(settingsCookie["version"]<jsVersion){var cl=self.constructChangelog();$("body").append(cl);settingsCookie["version"]=jsVersion;self.saveSettings();}
$("head").append("<style>.CodeMirror{ min-width:100%; }</style>");$("head").append('<style id="bdemotemenustyle"></style>');}else{setTimeout(gwDefer,100);}}
$(document).ready(function(){setTimeout(gwDefer,1000);});};Core.prototype.initSettings=function(){if($.cookie("better-discord")==undefined){settingsCookie=defaultCookie;this.saveSettings();}else{this.loadSettings();for(var setting in defaultCookie){if(settingsCookie[setting]==undefined){settingsCookie[setting]=defaultCookie[setting];this.saveSettings();}}}};Core.prototype.saveSettings=function(){$.cookie("better-discord",JSON.stringify(settingsCookie),{expires:365,path:'/'});};Core.prototype.loadSettings=function(){settingsCookie=JSON.parse($.cookie("better-discord"));};var botlist=["119598467310944259"];Core.prototype.initObserver=function(){mainObserver=new MutationObserver(function(mutations){mutations.forEach(function(mutation){if(mutation.target.getAttribute('class')!=null){if(mutation.target.classList.contains('title-wrap')||mutation.target.classList.contains('chat')){quickEmoteMenu.obsCallback();voiceMode.obsCallback();if(typeof pluginModule!=="undefined")pluginModule.channelSwitch();}
$(document).ready(function(){setTimeout(gwDefer,1000);});};Core.prototype.initSettings=function(){if($.cookie("better-discord")==undefined){settingsCookie=defaultCookie;this.saveSettings();}else{this.loadSettings();for(var setting in defaultCookie){if(settingsCookie[setting]==undefined){settingsCookie[setting]=defaultCookie[setting];this.saveSettings();}}}};Core.prototype.saveSettings=function(){$.cookie("better-discord",JSON.stringify(settingsCookie),{expires:365,path:'/'});};Core.prototype.loadSettings=function(){settingsCookie=JSON.parse($.cookie("better-discord"));};var botlist=["119598467310944259"];Core.prototype.initObserver=function(){mainObserver=new MutationObserver(function(mutations){mutations.forEach(function(mutation){if($(mutation.target).find(".emoji-picker").length){var fc=mutation.target.firstChild;if(fc.classList.contains("popout")){quickEmoteMenu.obsCallback($(fc));}}
if(typeof pluginModule!=="undefined")pluginModule.rawObserver(mutation);if(mutation.target.getAttribute('class')!=null){if(mutation.target.classList.contains('title-wrap')||mutation.target.classList.contains('chat')){voiceMode.obsCallback();if(typeof pluginModule!=="undefined")pluginModule.channelSwitch();}
if(mutation.target.getAttribute('class').indexOf('scroller messages')!=-1){if(typeof pluginModule!=="undefined")pluginModule.newMessage();}}
emoteModule.obsCallback(mutation);});});mainObserver.observe(document,{childList:true,subtree:true});};Core.prototype.constructChangelog=function(){var changeLog=''+'<div id="bd-wn-modal" class="modal" style="opacity:1;">'+' <div class="modal-inner">'+' <div id="bdcl" class="change-log"> '+' <div class="header">'+' <strong>What\'s new in BetterDiscord JS'+jsVersion+'</strong>'+' <button class="close" onclick=\'$("#bd-wn-modal").remove();\'></button>'+' </div><!--header-->'+' <div class="scroller-wrap">'+' <div class="scroller">';if(bdchangelog.changes!=null){changeLog+=''+'<h1 class="changelog-added">'+' <span>New Stuff</span>'+'</h1>'+'<ul>';for(var change in bdchangelog.changes){change=bdchangelog.changes[change];changeLog+=''+'<li>'+' <strong>'+change.title+'</strong>'+' <div>'+change.text+'</div>'+'</li>';}
emoteModule.obsCallback(mutation);});});mainObserver.observe(document,{childList:true,subtree:true});};Core.prototype.constructChangelog=function(){var changeLog=''+'<div id="bd-wn-modal" class="modal" style="opacity:1;">'+' <div class="modal-inner">'+' <div id="bdcl" class="markdown-modal change-log"> '+' <div class="markdown-modal-header">'+' <strong>What\'s new in BetterDiscord JS'+jsVersion+'</strong>'+' <button class="markdown-modal-close" onclick=\'$("#bd-wn-modal").remove();\'></button>'+' </div><!--header-->'+' <div class="scroller-wrap">'+' <div class="scroller">';if(bdchangelog.changes!=null){changeLog+=''+'<h1 class="changelog-added">'+' <span>New Stuff</span>'+'</h1>'+'<ul>';for(var change in bdchangelog.changes){change=bdchangelog.changes[change];changeLog+=''+'<li>'+' <strong>'+change.title+'</strong>'+' <div>'+change.text+'</div>'+'</li>';}
changeLog+='</ul>';}
if(bdchangelog.fixes!=null){changeLog+=''+'<h1 class="changelog-fixed">'+' <span>Fixed</span>'+'</h1>'+'<ul>';for(var fix in bdchangelog.fixes){fix=bdchangelog.fixes[fix];changeLog+=''+'<li>'+' <strong>'+fix.title+'</strong>'+' <div>'+fix.text+'</div>'+'</li>';}
changeLog+='</ul>';}
if(bdchangelog.upcoming!=null){changeLog+=''+'<h1 class="changelog-in-progress">'+' <span>Coming Soon</span>'+'</h1>'+'<ul>';for(var upc in bdchangelog.upcoming){upc=bdchangelog.upcoming[upc];changeLog+=''+'<li>'+' <strong>'+upc.title+'</strong>'+' <div>'+upc.text+'</div>'+'</li>';}
changeLog+='</ul>';}
changeLog+=''+' </div><!--scoller-->'+' </div><!--scroller-wrap-->'+' <div class="footer">'+' </div><!--footer-->'+' </div><!--change-log-->'+' </div><!--modal-inner-->'+'</div><!--modal-->';return changeLog;};Core.prototype.alert=function(title,text){$("body").append(''+'<div class="bd-alert">'+' <div class="bd-alert-header">'+' <span>'+title+'</span>'+' <div class="bd-alert-closebtn" onclick="$(this).parent().parent().remove();">×</div>'+' </div>'+' <div class="bd-alert-body">'+' <div class="scroller-wrap dark fade">'+' <div class="scroller">'+text+'</div>'+' </div>'+' </div>'+'</div>');};var emotesFfz={};var emotesBTTV={};var emotesTwitch={"emotes":{"emote":{"image_id":0}}};var subEmotesTwitch={};function EmoteModule(){}
EmoteModule.prototype.init=function(){};EmoteModule.prototype.getBlacklist=function(){$.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/"+_hash+"/data/emotefilter.json",function(data){bemotes=data.blacklist;});};EmoteModule.prototype.obsCallback=function(mutation){var self=this;if(!settingsCookie["bda-es-7"])return;$(".emoji").each(function(){var t=$(this);if(t.attr("src").indexOf(".png")!=-1){t.replaceWith("<span>"+t.attr("alt")+"</span>");}});for(var i=0;i<mutation.addedNodes.length;++i){var next=mutation.addedNodes.item(i);if(next){var nodes=self.getNodes(next);for(var node in nodes){if(nodes.hasOwnProperty(node)){self.injectEmote(nodes[node]);}}}}};EmoteModule.prototype.getNodes=function(node){var next;var nodes=[];var treeWalker=document.createTreeWalker(node,NodeFilter.SHOW_TEXT,null,false);while(next=treeWalker.nextNode()){nodes.push(next);}
EmoteModule.prototype.init=function(){};EmoteModule.prototype.getBlacklist=function(){$.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/"+_hash+"/data/emotefilter.json",function(data){bemotes=data.blacklist;});};EmoteModule.prototype.obsCallback=function(mutation){var self=this;if(!settingsCookie["bda-es-7"])return;$(".emoji").each(function(){var t=$(this);if(t.attr("src").indexOf(".png")!=-1){var next=t.next();var newText=t.attr("alt");if(next.size()>0){if(next.prop("tagName")=="SPAN"){newText+=next.text();next.remove();}}
if(t.parent().prop("tagName")!="SPAN"){t.replaceWith("<span>"+newText+"</span>");}else{t.replaceWith(newText);}}});for(var i=0;i<mutation.addedNodes.length;++i){var next=mutation.addedNodes.item(i);if(next){var nodes=self.getNodes(next);for(var node in nodes){if(nodes.hasOwnProperty(node)){self.injectEmote(nodes[node]);}}}}};EmoteModule.prototype.getNodes=function(node){var next;var nodes=[];var treeWalker=document.createTreeWalker(node,NodeFilter.SHOW_TEXT,null,false);while(next=treeWalker.nextNode()){nodes.push(next);}
return nodes;};var bemotes=[];var spoilered=[];EmoteModule.prototype.injectEmote=function(node){if(typeof emotesTwitch==='undefined')return;if(!node.parentElement)return;var parent=node.parentElement;if(parent.tagName!="SPAN")return;if(!$(parent.parentElement).hasClass("markup")&&!$(parent.parentElement).hasClass("message-content")){return;}
var edited=false;if($(parent.parentElement).hasClass("edited")){parent=parent.parentElement.parentElement.firstChild;edited=true;}
function inject(){var parentInnerHTML=parent.innerHTML;var words=parentInnerHTML.split(/\s+/g);if(!words)return;words.some(function(word){if(word.slice(0,4)=="[!s]"){parentInnerHTML=parentInnerHTML.replace("[!s]","");var markup=$(parent).parent();var reactId=markup.attr("data-reactid");if(spoilered.indexOf(reactId)>-1){return;}
markup.addClass("spoiler");markup.on("click",function(){$(this).removeClass("spoiler");spoilered.push($(this).attr("data-reactid"));});return;}
if(word.length<4){return;}
if(word=="ClauZ"){parentInnerHTML=parentInnerHTML.replace("ClauZ",'<img src="https://cdn.frankerfacez.com/emoticon/70852/1" style="width:25px; transform:translate(-29px, -14px);"></img>');return;}
if($.inArray(word,bemotes)!=-1)return;var useEmoteCss=false;var sWord=word;var emoteClass="";var allowedClasses=["emoteflip","emotespin","emotepulse","emotespinflip","emotespin2","emotespin3"];if(word.indexOf(":")>-1){userEmoteCss=true;sWord=word.split(":")[0];if(settingsCookie["bda-es-8"]){emoteClass="emote"+word.split(":")[1];if(allowedClasses.indexOf(emoteClass)<0){emoteClass="";}}}
if(emotesTwitch.emotes.hasOwnProperty(sWord)){var len=Math.round(sWord.length / 4);var name=sWord.substr(0,len)+"\uFDD9"+sWord.substr(len,len)+"\uFDD9"+sWord.substr(len*2,len)+"\uFDD9"+sWord.substr(len*3);var url=twitchEmoteUrlStart+emotesTwitch.emotes[sWord].image_id+twitchEmoteUrlEnd;parentInnerHTML=parentInnerHTML.replace(word,'<div class="emotewrapper"><img class="emote '+emoteClass+'" alt="'+name+'" src="'+url+'"/><input onclick=\'quickEmoteMenu.favorite(\"'+name+'\", \"'+url+'\");\' class="fav" title="Favorite!" type="button"></div>');return;}
var useEmoteCss=false;var sWord=word;var emoteClass="";var allowedClasses=["emoteflip","emotespin","emotepulse","emotespin2","emotespin3","emote1spin","emote2spin","emote3spin","emotetr","emotebl","emotebr","emoteshake","emoteshake2","emoteshake3","emoteflap"];if(word.indexOf(":")>-1){var split=word.split(/:(?!.*:)/);if(split[0]!=""&&split[1]!=""){userEmoteCss=true;sWord=split[0];if(settingsCookie["bda-es-8"]){emoteClass="emote"+split[1];if(allowedClasses.indexOf(emoteClass)<0){emoteClass="";}}}}
if($.inArray(sWord,bemotes)!=-1)return;if(emotesTwitch.emotes.hasOwnProperty(sWord)){var len=Math.round(sWord.length / 4);var name=sWord.substr(0,len)+"\uFDD9"+sWord.substr(len,len)+"\uFDD9"+sWord.substr(len*2,len)+"\uFDD9"+sWord.substr(len*3);var url=twitchEmoteUrlStart+emotesTwitch.emotes[sWord].image_id+twitchEmoteUrlEnd;parentInnerHTML=parentInnerHTML.replace(word,'<div class="emotewrapper"><img class="emote '+emoteClass+'" alt="'+name+'" src="'+url+'"/><input onclick=\'quickEmoteMenu.favorite(\"'+name+'\", \"'+url+'\");\' class="fav" title="Favorite!" type="button"></div>');return;}
if(subEmotesTwitch.hasOwnProperty(sWord)){var len=Math.round(sWord.length / 4);var name=sWord.substr(0,len)+"\uFDD9"+sWord.substr(len,len)+"\uFDD9"+sWord.substr(len*2,len)+"\uFDD9"+sWord.substr(len*3);var url=twitchEmoteUrlStart+subEmotesTwitch[sWord]+twitchEmoteUrlEnd;parentInnerHTML=parentInnerHTML.replace(word,'<div class="emotewrapper"><img class="emote '+emoteClass+'" alt="'+name+'" src="'+url+'"/><input onclick=\'quickEmoteMenu.favorite(\"'+name+'\", \"'+url+'\");\' class="fav" title="Favorite!" type="button"></div>');return;}
if(typeof emotesFfz!=='undefined'&&settingsCookie["bda-es-1"]){if(emotesFfz.hasOwnProperty(sWord)){var len=Math.round(sWord.length / 4);var name=sWord.substr(0,len)+"\uFDD9"+sWord.substr(len,len)+"\uFDD9"+sWord.substr(len*2,len)+"\uFDD9"+sWord.substr(len*3);var url=ffzEmoteUrlStart+emotesFfz[sWord]+ffzEmoteUrlEnd;parentInnerHTML=parentInnerHTML.replace(word,'<div class="emotewrapper"><img class="emote '+emoteClass+'" alt="'+name+'" src="'+url+'"/><input onclick=\'quickEmoteMenu.favorite(\"'+name+'\", \"'+url+'\");\' class="fav" title="Favorite!" type="button"></div>');return;}}
if(typeof emotesBTTV!=='undefined'&&settingsCookie["bda-es-2"]){if(emotesBTTV.hasOwnProperty(sWord)){var len=Math.round(sWord.length / 4);var name=sWord.substr(0,len)+"\uFDD9"+sWord.substr(len,len)+"\uFDD9"+sWord.substr(len*2,len)+"\uFDD9"+sWord.substr(len*3);var url=emotesBTTV[sWord];parentInnerHTML=parentInnerHTML.replace(word,'<div class="emotewrapper"><img class="emote '+emoteClass+'" alt="'+name+'" src="'+url+'"/><input onclick=\'quickEmoteMenu.favorite(\"'+name+'\", \"'+url+'\");\' class="fav" title="Favorite!" type="button"></div>');return;}}
if(typeof emotesBTTV2!=='undefined'&&settingsCookie["bda-es-2"]){if(emotesBTTV2.hasOwnProperty(sWord)){var len=Math.round(sWord.length / 4);var name=sWord.substr(0,len)+"\uFDD9"+sWord.substr(len,len)+"\uFDD9"+sWord.substr(len*2,len)+"\uFDD9"+sWord.substr(len*3);var url=bttvEmoteUrlStart+emotesBTTV2[sWord]+bttvEmoteUrlEnd;parentInnerHTML=parentInnerHTML.replace(word,'<div class="emotewrapper"><img class="emote '+emoteClass+'" alt="'+name+'" src="'+url+'"/><input onclick=\'quickEmoteMenu.favorite(\"'+name+'\", \"'+url+'\");\' class="fav" title="Favorite!" type="button"></div>');return;}}});if(parent.parentElement==null)return;var oldHeight=parent.parentElement.offsetHeight;parent.innerHTML=parentInnerHTML.replace(new RegExp("\uFDD9","g"),"");var newHeight=parent.parentElement.offsetHeight;var scrollPane=$(".scroller.messages").first();scrollPane.scrollTop(scrollPane.scrollTop()+(newHeight-oldHeight));}
if(edited){setTimeout(inject,250);}else{inject();}};EmoteModule.prototype.autoCapitalize=function(){var self=this;$('body').delegate($(".channel-textarea-inner textarea"),'keyup change paste',function(){if(!settingsCookie["bda-es-4"])return;var text=$(".channel-textarea-inner textarea").val();if(text==undefined)return;var lastWord=text.split(" ").pop();if(lastWord.length>3){if(lastWord=="danSgame")return;var ret=self.capitalize(lastWord.toLowerCase());if(ret!==null&&ret!==undefined){$(".channel-textarea-inner textarea").val(text.replace(lastWord,ret));}}});};EmoteModule.prototype.capitalize=function(value){var res=emotesTwitch.emotes;for(var p in res){if(res.hasOwnProperty(p)&&value==(p+'').toLowerCase()){return p;}}};var publicServers={"servers":{"server":{"code":0,"icon":null,"title":"title","language":"EN","description":"description"}}};function PublicServers(){}
PublicServers.prototype.getPanel=function(){return this.container;};PublicServers.prototype.init=function(){var self=this;this.container=$("<div/>",{id:"bd-ps-container",style:"display:none"});var header=$("<div/>",{id:"bd-ps-header"});$("<h2/>",{text:"Public Servers"}).appendTo(header);$("<span/>",{id:"bd-ps-close",style:"cursor:pointer;",text:"X"}).appendTo(header);header.appendTo(this.getPanel());var psbody=$("<div/>",{id:"bd-ps-body"});psbody.appendTo(this.getPanel());var table=$("<table/>",{border:"0"});var thead=$("<thead/>");thead.appendTo(table);var headers=$("<tr/>",{}).append($("<th/>",{text:"Name"})).append($("<th/>",{text:"Code"})).append($("<th/>",{text:"Language"})).append($("<th/>",{text:"Description"})).append($("<th/>",{text:"Join"}));headers.appendTo(thead);var tbody=$("<tbody/>",{id:"bd-ps-tbody"});tbody.appendTo(table);table.appendTo(psbody);$("body").append(this.getPanel());$("#bd-ps-close").on("click",function(){self.show();});var servers=publicServers.servers;for(var server in servers){if(servers.hasOwnProperty(server)){var s=servers[server];var code=s.code;var title=s.title;var language=s.language;var description=s.description;this.addServer(server,code,title,language,description);}}};PublicServers.prototype.addServer=function(name,code,title,language,description){var self=this;var tableBody=$("#bd-ps-tbody");var desc=$("<td/>").append($("<div/>",{class:"bd-ps-description",text:description}));var tr=$("<tr/>");tr.append($("<td/>",{text:title}));tr.append($("<td/>",{css:{"-webkit-user-select":"initial","user-select":"initial"},text:code}));tr.append($("<td/>",{text:language}));tr.append(desc);tr.append($("<td/>").append($("<button/>",{text:"Join",css:{"height":"30px","display":"block","margin-top":"10px","background-color":"#36393E","border":"1px solid #404040","outline":"1px solid #000","color":"#EDEDED"},click:function(){self.joinServer(code);}})));tableBody.append(tr);};PublicServers.prototype.show=function(){this.getPanel().toggle();var li=$("#bd-pub-li");li.removeClass();if(this.getPanel().is(":visible")){li.addClass("active");}};PublicServers.prototype.joinServer=function(code){$(".guilds-add").click();$(".action.join .btn").click();$(".create-guild-container input").val(code);$(".form.join-server .btn-primary").click();};var emoteBtn,emoteMenu;var eiarr=[1,3,4,6,7,8,10,11,12,13,14];function QuickEmoteMenu(){}
QuickEmoteMenu.prototype.init=function(reload){emoteBtn=null;$(".channel-textarea").first().removeClass("emotemenu-enabled");if(!emoteMenu){this.initEmoteList();}
var menuOpen;emoteBtn=$("<div/>",{id:"twitchcord-button-container",style:"display:none"}).append($("<button/>",{id:"twitchcord-button",onclick:"return false;"}));$(".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form").append(emoteBtn);emoteMenu.detach();emoteBtn.append(emoteMenu);$("#twitchcord-button").on("click",function(){menuOpen=!menuOpen;if(menuOpen){$("#bdemotemenustyle").html('.twitchcord-button-open { background-image:url(https://static-cdn.jtvnw.net/emoticons/v1/'+eiarr[Math.floor(Math.random()*eiarr.length)]+'/1.0) !important; }');emoteMenu.addClass("emotemenu-open");$(this).addClass("twitchcord-button-open");}else{emoteMenu.removeClass();$(this).removeClass();}
return false;});$(document).off("click.bdem").on("click.bdem",function(){if(menuOpen){menuOpen=!menuOpen;emoteMenu.removeClass();$("#twitchcord-button").removeClass();}});$("#emote-menu").on("click",function(){$("#rmenu").hide();return false;});if(settingsCookie["bda-es-0"]){$(".channel-textarea").first().addClass("emotemenu-enabled");emoteBtn.show();}
var emoteIcon=$(".emote-icon");emoteIcon.off();emoteIcon.on("click",function(){var emote=$(this).attr("title");var ta=$(".channel-textarea-inner textarea");ta.val(ta.val().slice(-1)==" "?ta.val()+emote:ta.val()+" "+emote);});var fe=localStorage["bdfavemotes"];if(fe!=undefined){favoriteEmotes=JSON.parse(atob(fe));this.updateFavorites();}};var bdfw={};QuickEmoteMenu.prototype.obsCallback=function(){if(!emoteBtn)return;if(!$(".content.flex-spacer.flex-horizontal .flex-spacer.flex-vertical form"))return;var tcbtn=$("#twitchcord-button-container");if(tcbtn.parent().prop("tagName")==undefined){quickEmoteMenu=new QuickEmoteMenu();quickEmoteMenu.init(true);}};var favoriteEmotes={};QuickEmoteMenu.prototype.initEmoteList=function(){emoteMenu=$("<div/>",{id:"emote-menu"});var emoteMenuHeader=$("<div/>",{id:"emote-menu-header"});var emoteMenuBody=$("<div/>",{id:"emote-menu-inner"});var emoteMenuBodyFav=$("<div/>",{id:"emote-menu-inner-fav",css:{"display":"none"}});var globalTab=$("<div/>",{class:"emote-menu-tab emote-menu-tab-selected",id:"emgb",text:"Global",click:function(){$("#emfa").removeClass("emote-menu-tab-selected");$("#emgb").addClass("emote-menu-tab-selected");$("#emote-menu-inner-fav").hide();$("#emote-menu-inner").show();}});var favoriteTab=$("<div/>",{class:"emote-menu-tab",id:"emfa",text:"Favorite",click:function(){$("#emgb").removeClass("emote-menu-tab-selected");$("#emfa").addClass("emote-menu-tab-selected");$("#emote-menu-inner").hide();$("#emote-menu-inner-fav").show();}});emoteMenuHeader.append(globalTab);emoteMenuHeader.append(favoriteTab);emoteMenu.append(emoteMenuHeader);var swrapper=$("<div/>",{class:"scroller-wrap"});var scroller=$("<div/>",{class:"scroller"});swrapper.append(scroller);scroller.append(emoteMenuBody);scroller.append(emoteMenuBodyFav);emoteMenu.append(swrapper);for(var emote in emotesTwitch.emotes){if(emotesTwitch.emotes.hasOwnProperty(emote)){var id=emotesTwitch.emotes[emote].image_id;emoteMenuBody.append($("<div/>",{class:"emote-container"}).append($("<img/>",{class:"emote-icon",id:emote,alt:"",src:"https://static-cdn.jtvnw.net/emoticons/v1/"+id+"/1.0",title:emote})));}}};QuickEmoteMenu.prototype.favorite=function(name,url){if(!favoriteEmotes.hasOwnProperty(name)){favoriteEmotes[name]=url;}
this.updateFavorites();};QuickEmoteMenu.prototype.updateFavorites=function(){if(!$("#rmenu").length){$("body").append('<div id="rmenu"><ul><a href="#">Remove</a></ul></div>');$(document).on("click",function(){$("#rmenu").hide();});}
$("#rmenu").on("click",function(e){$(this).hide();return false;});var self=this;var emoteMenuBody=$("#emote-menu-inner-fav");emoteMenuBody.empty();for(var emote in favoriteEmotes){var url=favoriteEmotes[emote];var econtainer=$("<div/>",{class:"emote-container"});var icon=$("<img/>",{class:"emote-icon",alt:"",src:url,title:emote}).appendTo(econtainer);emoteMenuBody.append(econtainer);icon.off("click").on("click",function(e){var emote=$(this).attr("title");var ta=$(".channel-textarea-inner textarea");ta.val(ta.val().slice(-1)==" "?ta.val()+emote:ta.val()+" "+emote);});icon.off("contextmenu").on("contextmenu",function(e){var title=$(this).attr("title");var menu=$("#rmenu");menu.find("a").off("click").on("click",function(){delete favoriteEmotes[title];self.updateFavorites();});menu.hide();menu.css({top:e.pageY,left:e.pageX});menu.show();return false;});}
window.localStorage["bdfavemotes"]=btoa(JSON.stringify(favoriteEmotes));};var settingsButton=null;var panel=null;function SettingsPanel(){utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/codemirror.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/mode/css/css.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.min.js");}
if(edited){setTimeout(inject,250);}else{inject();}};EmoteModule.prototype.autoCapitalize=function(){var self=this;$('body').delegate($(".channel-textarea-inner textarea"),'keyup change paste',function(){if(!settingsCookie["bda-es-4"])return;var text=$(".channel-textarea-inner textarea").val();if(text==undefined)return;var lastWord=text.split(" ").pop();if(lastWord.length>3){if(lastWord=="danSgame")return;var ret=self.capitalize(lastWord.toLowerCase());if(ret!==null&&ret!==undefined){$(".channel-textarea-inner textarea").val(text.replace(lastWord,ret));}}});};EmoteModule.prototype.capitalize=function(value){var res=emotesTwitch.emotes;for(var p in res){if(res.hasOwnProperty(p)&&value==(p+'').toLowerCase()){return p;}}};function PublicServers(){}
PublicServers.prototype.getPanel=function(){return this.container;};PublicServers.prototype.init=function(){var self=this;var guilds=$(".guilds>li:first-child");guilds.after($("<li></li>",{id:"bd-pub-li",css:{"height":"20px","display":settingsCookie["bda-gs-1"]==true?"":"none"}}).append($("<div/>",{class:"guild-inner",css:{"height":"20px","border-radius":"4px"}}).append($("<a/>").append($("<div/>",{css:{"line-height":"20px","font-size":"12px"},text:"public",id:"bd-pub-button"})))));$("#bd-pub-button").on("click",function(){self.show();});var panelBase="";panelBase+="<div id=\"pubs-container\">";panelBase+=" <div id=\"pubs-spinner\">";panelBase+=" <span class=\"spinner\" type=\"wandering-cubes\"><span class=\"spinner-inner spinner-wandering-cubes\"><span class=\"spinner-item\"><\/span><span class=\"spinner-item\"><\/span><\/span><\/span>";panelBase+=" <\/div>";panelBase+=" <div id=\"pubs-header\">";panelBase+=" <h2 id=\"pubs-header-title\">Public Servers<\/h2>";panelBase+=" <button id=\"sbtn\">Search<\/button>";panelBase+=" <input id=\"sterm\" type=\"text\" placeholder=\"Search term...\"\/>";panelBase+=" <\/div>";panelBase+=" <div class=\"scroller-wrap\">";panelBase+=" <div class=\"scroller\">";panelBase+=" <div id=\"slist\" class=\"servers-listing\">";panelBase+=" ";panelBase+=" <\/div>";panelBase+=" <\/div>";panelBase+=" <\/div>";panelBase+=" <div id=\"pubs-footer\">";panelBase+=" <div>Server list provided by <a href=\"https:\/\/www.discordservers.com\/\" target=\"_blank\">DiscordServers.com<\/a><\/div>";panelBase+=" <\/div>";panelBase+="<\/div>";this.container=panelBase;if($("#bd-pub-li").length<1){setTimeout(function(){self.init();},250);}};PublicServers.prototype.show=function(){var self=this;$("body").append(this.getPanel());var dataset={"sort":[{"online":"desc"}],"from":0,"size":20,"query":{"filtered":{"query":{"match_all":{}}}}};$("#sbtn").on("click",function(){self.search();});$("#sterm").on("keyup",function(e){if(e.keyCode==13){self.search();}});this.loadServers(dataset,false);var self=this;$(document).on("mouseup.bdps",function(e){if(!$("#bd-pub-button").is(e.target)&&!$("#pubs-container").is(e.target)&&$("#pubs-container").has(e.target).length===0){self.hide();}});};PublicServers.prototype.hide=function(){$("#pubs-container").remove();$(document).off("mouseup.bdps");};PublicServers.prototype.loadServers=function(dataset,search){var self=this;$("#sbtn").prop("disabled",true);$("#sterm").prop("disabled",true);$("#slist").empty();$("#pubs-spinner").show();$.ajax({type:"POST",dataType:"json",url:"https://search-discordservers-izrtub5nprzrl76ugyy6hdooe4.us-west-1.es.amazonaws.com/app/_search",crossDomain:true,data:JSON.stringify(dataset),success:function(data){var hits=data.hits.hits;if(search){$("#pubs-header-title").text("Public Servers - Search Results: "+hits.length);}else{$("#pubs-header-title").text("Public Servers");}
hits.forEach(function(hit){var source=hit._source;var icode=source.invite_code;var html='<div class="server-row">';html+='<div class="server-icon" style="background-image:url('+source.icon+')"></div>';html+='<div class="server-info server-name">';html+='<span>'+source.name+' by '+source.owner.name+'</span>';html+='</div>';html+='<div class="server-info server-members">';html+='<span>'+source.online+'/'+source.members+' Members</span>';html+='</div>';html+='<div class="server-info server-region">';html+='<span>'+source.region+'</span>';html+='</div>';html+='<div class="server-info">';html+='<button data-server-invite-code='+icode+'>Join</button>';html+='</div>';html+='</div>';$("#slist").append(html);$("button[data-server-invite-code="+icode+"]").on("click",function(){self.joinServer(icode);});});},done:function(){$("#pubs-spinner").hide();$("#sbtn").prop("disabled",false);$("#sterm").prop("disabled",false);},always:function(){$("#pubs-spinner").hide();$("#sbtn").prop("disabled",false);$("#sterm").prop("disabled",false);},error:function(){$("#pubs-spinner").hide();$("#sbtn").prop("disabled",false);$("#sterm").prop("disabled",false);},complete:function(){$("#pubs-spinner").hide();$("#sbtn").prop("disabled",false);$("#sterm").prop("disabled",false);}});};PublicServers.prototype.search=function(){var dataset={"sort":[{"online":"desc"}],"from":0,"size":20,"query":{"filtered":{"query":{"match_all":{}}}}};var filter={"filter":{"and":[{"query":{"match_phrase_prefix":{"name":$("#sterm").val()}}}]}};if($("#sterm").val()){$.extend(dataset,filter);}
this.loadServers(dataset,true);};PublicServers.prototype.joinServer=function(code){$(".guilds-add").click();$(".action.join .btn").click();$(".create-guild-container input").val(code);$(".form.join-server .btn-primary").click();};function QuickEmoteMenu(){}
QuickEmoteMenu.prototype.init=function(){$(document).on("mousedown",function(e){if(e.target.id!="rmenu")$("#rmenu").remove();});var fe=localStorage["bdfavemotes"];if(fe!=undefined){this.favoriteEmotes=JSON.parse(atob(fe));}
var qmeHeader="";qmeHeader+="<div id=\"bda-qem\">";qmeHeader+=" <button class=\"active\" id=\"bda-qem-twitch\" onclick='quickEmoteMenu.switchHandler(this); return false;'>Twitch<\/button>";qmeHeader+=" <button id=\"bda-qem-favourite\" onclick='quickEmoteMenu.switchHandler(this); return false;'>Favourite<\/button>";qmeHeader+=" <button id=\"bda-qem-emojis\" onclick='quickEmoteMenu.switchHandler(this); return false;'>Emojis<\/buttond>";qmeHeader+="<\/div>";this.qmeHeader=qmeHeader;var teContainer="";teContainer+="<div id=\"bda-qem-twitch-container\">";teContainer+=" <div class=\"scroller-wrap fade\">";teContainer+=" <div class=\"scroller\">";teContainer+=" <div class=\"emote-menu-inner\">";for(var emote in emotesTwitch.emotes){if(emotesTwitch.emotes.hasOwnProperty(emote)){var id=emotesTwitch.emotes[emote].image_id;teContainer+="<div class=\"emote-container\">";teContainer+=" <img class=\"emote-icon\" id=\""+emote+"\" alt=\"\" src=\"https://static-cdn.jtvnw.net/emoticons/v1/"+id+"/1.0\" title=\""+emote+"\">";teContainer+=" </img>";teContainer+="</div>";}}
teContainer+=" <\/div>";teContainer+=" <\/div>";teContainer+=" <\/div>";teContainer+="<\/div>";this.teContainer=teContainer;var faContainer="";faContainer+="<div id=\"bda-qem-favourite-container\">";faContainer+=" <div class=\"scroller-wrap fade\">";faContainer+=" <div class=\"scroller\">";faContainer+=" <div class=\"emote-menu-inner\">";for(var emote in this.favoriteEmotes){var url=this.favoriteEmotes[emote];faContainer+="<div class=\"emote-container\">";faContainer+=" <img class=\"emote-icon\" alt=\"\" src=\""+url+"\" title=\""+emote+"\" oncontextmenu='quickEmoteMenu.favContext(event, this);'>";faContainer+=" </img>";faContainer+="</div>";}
faContainer+=" <\/div>";faContainer+=" <\/div>";faContainer+=" <\/div>";faContainer+="<\/div>";this.faContainer=faContainer;};QuickEmoteMenu.prototype.favContext=function(e,em){e.stopPropagation();var menu=$('<div/>',{id:"rmenu","data-emoteid":$(em).prop("title"),text:"Remove"});menu.css({top:e.pageY-$("#bda-qem-favourite-container").offset().top,left:e.pageX-$("#bda-qem-favourite-container").offset().left});$(em).parent().append(menu);menu.on("click",function(e){e.preventDefault();e.stopPropagation();$(this).remove();console.log($(this).data("emoteid"));delete quickEmoteMenu.favoriteEmotes[$(this).data("emoteid")];quickEmoteMenu.updateFavorites();return false;});return false;};QuickEmoteMenu.prototype.switchHandler=function(e){this.switchQem($(e).attr("id"));};QuickEmoteMenu.prototype.switchQem=function(id){var twitch=$("#bda-qem-twitch");var fav=$("#bda-qem-favourite");var emojis=$("#bda-qem-emojis");twitch.removeClass("active");fav.removeClass("active");emojis.removeClass("active");$(".emoji-picker").hide();$("#bda-qem-favourite-container").hide();$("#bda-qem-twitch-container").hide();switch(id){case"bda-qem-twitch":twitch.addClass("active");$("#bda-qem-twitch-container").show();break;case"bda-qem-favourite":fav.addClass("active");$("#bda-qem-favourite-container").show();break;case"bda-qem-emojis":emojis.addClass("active");$(".emoji-picker").show();break;}
this.lastTab=id;var emoteIcon=$(".emote-icon");emoteIcon.off();emoteIcon.on("click",function(){var emote=$(this).attr("title");var ta=$(".channel-textarea-inner textarea");ta.val(ta.val().slice(-1)==" "?ta.val()+emote:ta.val()+" "+emote);});};QuickEmoteMenu.prototype.obsCallback=function(e){if(!settingsCookie["bda-es-9"]){e.addClass("bda-qme-hidden");}else{e.removeClass("bda-qme-hidden");}
if(!settingsCookie["bda-es-0"])return;var self=this;e.prepend(this.qmeHeader);e.append(this.teContainer);e.append(this.faContainer);if(this.lastTab==undefined){this.lastTab="bda-qem-favourite";}
this.switchQem(this.lastTab);};QuickEmoteMenu.prototype.favorite=function(name,url){if(!this.favoriteEmotes.hasOwnProperty(name)){this.favoriteEmotes[name]=url;}
this.updateFavorites();};QuickEmoteMenu.prototype.updateFavorites=function(){var faContainer="";faContainer+="<div id=\"bda-qem-favourite-container\">";faContainer+=" <div class=\"scroller-wrap fade\">";faContainer+=" <div class=\"scroller\">";faContainer+=" <div class=\"emote-menu-inner\">";for(var emote in this.favoriteEmotes){var url=this.favoriteEmotes[emote];faContainer+="<div class=\"emote-container\">";faContainer+=" <img class=\"emote-icon\" alt=\"\" src=\""+url+"\" title=\""+emote+"\" oncontextmenu='quickEmoteMenu.favContext(event, this);'>";faContainer+=" </img>";faContainer+="</div>";}
faContainer+=" <\/div>";faContainer+=" <\/div>";faContainer+=" <\/div>";faContainer+="<\/div>";this.faContainer=faContainer;$("#bda-qem-favourite-container").replaceWith(faContainer);window.localStorage["bdfavemotes"]=btoa(JSON.stringify(this.favoriteEmotes));};function CustomCssEditor(){}
CustomCssEditor.prototype.init=function(){var self=this;self.hideBackdrop=false;self.editor=CodeMirror.fromTextArea(document.getElementById("bd-custom-css-ta"),{lineNumbers:true,mode:'css',indentUnit:4,theme:'neat'});self.editor.on("change",function(cm){var css=cm.getValue();self.applyCustomCss(css,false,false);});var attachEditor="";attachEditor+="<div id=\"bd-customcss-attach-controls\">";attachEditor+=" <ul class=\"checkbox-group\">";attachEditor+=" <li>";attachEditor+=" <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\">";attachEditor+=" <div class=\"checkbox-inner\"><input id=\"bda-css-0\" type=\"checkbox\" "+(settingsCookie["bda-css-0"]?"checked":"")+"><span><\/span><\/div>";attachEditor+=" <span title=\"Update client css while typing\">Live Update<\/span>";attachEditor+=" <\/div>";attachEditor+=" <\/li>";attachEditor+=" <li>";attachEditor+=" <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\">";attachEditor+=" <div class=\"checkbox-inner\"><input id=\"bda-css-1\" type=\"checkbox\" "+(settingsCookie["bda-css-1"]?"checked":"")+"><span><\/span><\/div>";attachEditor+=" <span title=\"Autosave css to localstorage when typing\">Autosave<\/span>";attachEditor+=" <\/div>";attachEditor+=" <\/li>";attachEditor+=" <li>";attachEditor+=" <div class=\"checkbox\" onclick=\"settingsPanel.updateSetting(this);\">";attachEditor+=" <div class=\"checkbox-inner\"><input id=\"bda-css-2\" type=\"checkbox\" "+(customCssEditor.hideBackdrop?"checked":"")+"><span><\/span><\/div>";attachEditor+=" <span title=\"Hide the callout backdrop to disable modal close events\">Hide Backdrop<\/span>";attachEditor+=" <\/div>";attachEditor+=" <\/li>";attachEditor+=" <\/ul>";attachEditor+=" <div id=\"bd-customcss-detach-controls-buttons\">";attachEditor+=" <button class=\"btn btn-primary\" id=\"bd-customcss-detached-update\" onclick=\"return false;\">Update<\/button>";attachEditor+=" <button class=\"btn btn-primary\" id=\"bd-customcss-detached-save\" onclick=\"return false;\">Save<\/button>";attachEditor+=" <button class=\"btn btn-primary\" id=\"bd-customcss-detached-detach\" onclick=\"customCssEditor.detach(); return false;\">Detach</button>";attachEditor+=" <\/div>";attachEditor+="<\/div>";this.attachEditor=attachEditor;$("#bd-customcss-innerpane").append(attachEditor);$("#bd-customcss-detached-update").on("click",function(){self.applyCustomCss(self.editor.getValue(),true,false);return false;});$("#bd-customcss-detached-save").on("click",function(){self.applyCustomCss(self.editor.getValue(),false,true);return false;});var detachEditor="";detachEditor+="<div id=\"bd-customcss-detach-container\">";detachEditor+=" <div id=\"bd-customcss-detach-editor\">";detachEditor+=" <\/div>";detachEditor+="<\/div>";this.detachedEditor=detachEditor;};CustomCssEditor.prototype.attach=function(){$("#editor-detached").hide();$("#app-mount").removeClass("bd-detached-editor");$("#bd-customcss-pane").append($("#bd-customcss-innerpane"));$("#bd-customcss-detached-detach").show();$("#bd-customcss-detach-container").remove();};CustomCssEditor.prototype.detach=function(){var self=this;this.attach();$("#editor-detached").show();$("#bd-customcss-detached-detach").hide();$("#app-mount").addClass("bd-detached-editor");$(".app").parent().append(this.detachedEditor);$("#bd-customcss-detach-editor").append($("#bd-customcss-innerpane"));};CustomCssEditor.prototype.applyCustomCss=function(css,forceupdate,forcesave){if($("#customcss").length==0){$("head").append('<style id="customcss"></style>');}
if(forceupdate||settingsCookie["bda-css-0"]){$("#customcss").html(css);}
if(forcesave||settingsCookie["bda-css-1"]){localStorage.setItem("bdcustomcss",btoa(css));}};var settingsButton=null;var panel=null;function SettingsPanel(){utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/codemirror.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.9.0/mode/css/css.min.js");utils.injectJs("https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.4.2/Sortable.min.js");}
SettingsPanel.prototype.init=function(){var self=this;self.construct();var body=$("body");if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show();}else{$("#twitchcord-button-container").hide();}
if(settingsCookie["bda-gs-2"]){body.addClass("bd-minimal");}else{body.removeClass("bd-minimal");}
if(settingsCookie["bda-gs-3"]){body.addClass("bd-minimal-chan");}else{body.removeClass("bd-minimal-chan");}
if(settingsCookie["bda-gs-4"]){voiceMode.enable();}
if(settingsCookie["bda-es-6"]){emoteNamePopup=$("<div class='tipsy tipsy-se' style='display: block; top: 82px; left: 1630.5px; visibility: visible; opacity: 0.8;'><div class='tipsy-inner'></div></div>");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css('left',x.left-25);$(emoteNamePopup).css('top',x.top-32);$("div[data-reactid='.0.1.1']").append($(emoteNamePopup));});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove();});}else{$(document).off('mouseover','.emote');}};SettingsPanel.prototype.applyCustomCss=function(css){if($("#customcss").length==0){$("head").append('<style id="customcss"></style>');}
bdafo=(css.indexOf("april2nd")>-1);$("#customcss").html(css);localStorage.setItem("bdcustomcss",btoa(css));};var customCssInitialized=false;var lastTab="";SettingsPanel.prototype.changeTab=function(tab){var self=this;lastTab=tab;var controlGroups=$("#bd-control-groups");$(".bd-tab").removeClass("selected");$(".bd-pane").hide();$("#"+tab).addClass("selected");$("#"+tab.replace("tab","pane")).show();switch(tab){case"bd-settings-tab":break;case"bd-customcss-tab":if(!customCssInitialized){var editor=CodeMirror.fromTextArea(document.getElementById("bd-custom-css-ta"),{lineNumbers:true,mode:'css',indentUnit:4,theme:'neat'});editor.on("change",function(cm){var css=cm.getValue();self.applyCustomCss(css);});customCssInitialized=true;}
break;case"bd-plugins-tab":break;case"bd-themes-tab":controlGroups.html("<span>Coming soon</span>");break;}};SettingsPanel.prototype.updateSetting=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id");cb.prop("checked",enabled);settingsCookie[id]=enabled;if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show();}else{$("#twitchcord-button-container").hide();}
if(settingsCookie["bda-es-6"]){emoteNamePopup=$("<div class='tipsy tipsy-se' style='display: block; top: 82px; left: 1630.5px; visibility: visible; opacity: 0.8;'><div class='tipsy-inner'></div></div>");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css('left',x.left-25);$(emoteNamePopup).css('top',x.top-32);$("div[data-reactid='.0.1.1']").append($(emoteNamePopup));});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove();});}else{$(document).off('mouseover','.emote');}};var customCssInitialized=false;var lastTab="";SettingsPanel.prototype.changeTab=function(tab){var self=this;lastTab=tab;var controlGroups=$("#bd-control-groups");$(".bd-tab").removeClass("selected");$(".bd-pane").hide();$("#"+tab).addClass("selected");$("#"+tab.replace("tab","pane")).show();switch(tab){case"bd-settings-tab":break;case"bd-customcss-tab":if(!customCssInitialized){customCssEditor.init();customCssInitialized=true;}
break;case"bd-plugins-tab":break;case"bd-themes-tab":controlGroups.html("<span>Coming soon</span>");break;}};SettingsPanel.prototype.updateSetting=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id");cb.prop("checked",enabled);if(id=="bda-css-2"){$("#app-mount").removeClass("bd-hide-bd");customCssEditor.hideBackdrop=enabled;if(enabled){$("#app-mount").addClass("bd-hide-bd")}}
settingsCookie[id]=enabled;if(settingsCookie["bda-es-0"]){$("#twitchcord-button-container").show();}else{$("#twitchcord-button-container").hide();}
if(settingsCookie["bda-gs-2"]){$("body").addClass("bd-minimal");}else{$("body").removeClass("bd-minimal");}
if(settingsCookie["bda-gs-3"]){$("body").addClass("bd-minimal-chan");}else{$("body").removeClass("bd-minimal-chan");}
if(settingsCookie["bda-gs-1"]){$("#bd-pub-li").show();}else{$("#bd-pub-li").hide();}
if(settingsCookie["bda-gs-4"]){voiceMode.enable();}else{voiceMode.disable();}
if(settingsCookie["bda-es-6"]){emoteNamePopup=$("<div class='tipsy tipsy-se' style='display: block; top: 82px; left: 1630.5px; visibility: visible; opacity: 0.8;'><div class='tipsy-inner'></div></div>");$(document).on("mouseover",".emote",function(){var x=$(this).offset();var title=$(this).attr("alt");$(emoteNamePopup).find(".tipsy-inner").text(title);$(emoteNamePopup).css('left',x.left-25);$(emoteNamePopup).css('top',x.top-32);$("div[data-reactid='.0.1.1']").append($(emoteNamePopup));});$(document).on("mouseleave",".emote",function(){$(".tipsy").remove();});}else{$(document).off('mouseover','.emote');}
mainCore.saveSettings();};SettingsPanel.prototype.construct=function(){var self=this;panel=$("<div/>",{id:"bd-pane",class:"settings-inner",css:{"display":"none"}});var settingsInner=''+'<div class="scroller-wrap">'+' <div class="scroller settings-wrapper settings-panel">'+' <div class="tab-bar TOP">'+' <div class="tab-bar-item bd-tab" id="bd-settings-tab" onclick="settingsPanel.changeTab(\'bd-settings-tab\');">Settings</div>'+' <div class="tab-bar-item bd-tab" id="bd-customcss-tab" onclick="settingsPanel.changeTab(\'bd-customcss-tab\');">Custom CSS</div>'+' <div class="tab-bar-item bd-tab" id="bd-plugins-tab" onclick="settingsPanel.changeTab(\'bd-plugins-tab\');">Plugins</div>'+' <div class="tab-bar-item bd-tab" id="bd-themes-tab" onclick="settingsPanel.changeTab(\'bd-themes-tab\');">Themes</div>'+' </div>'+' <div class="bd-settings">'+''+' <div class="bd-pane control-group" id="bd-settings-pane" style="display:none;">'+' <ul class="checkbox-group">';for(var setting in settings){var sett=settings[setting];var id=sett["id"];if(sett["implemented"]){settingsInner+=''+'<li>'+'<div class="checkbox" onclick="settingsPanel.updateSetting(this);" >'+'<div class="checkbox-inner">'+'<input type="checkbox" id="'+id+'" '+(settingsCookie[id]?"checked":"")+'>'+'<span></span>'+'</div>'+'<span>'+setting+" - "+sett["info"]+'</span>'+'</div>'+'</li>';}}
var ccss=atob(localStorage.getItem("bdcustomcss"));self.applyCustomCss(ccss);settingsInner+='</ul>'+' </div>'+''+' <div class="bd-pane control-group" id="bd-customcss-pane" style="display:none;">'+' <textarea id="bd-custom-css-ta">'+ccss+'</textarea>'+' </div>'+''+' <div class="bd-pane control-group" id="bd-plugins-pane" style="display:none;">'+' <table class="bd-g-table">'+' <thead><tr><th>Name</th><th>Description</th><th>Author</th><th>Version</th><th></th><th></th></tr></thead><tbody>';$.each(bdplugins,function(){var plugin=this["plugin"];settingsInner+=''+'<tr>'+' <td>'+plugin.getName()+'</td>'+' <td width="99%"><textarea>'+plugin.getDescription()+'</textarea></td>'+' <td>'+plugin.getAuthor()+'</td>'+' <td>'+plugin.getVersion()+'</td>'+' <td><button class="bd-psb" onclick="pluginModule.showSettings(\''+plugin.getName()+'\'); return false;"></button></td>'+' <td>'+' <div class="checkbox" onclick="pluginModule.handlePlugin(this);">'+' <div class="checkbox-inner">'+' <input id="'+plugin.getName()+'" type="checkbox" '+(pluginCookie[plugin.getName()]?"checked":"")+'>'+' <span></span>'+' </div>'+' </div>'+' </td>'+'</tr>';});settingsInner+='</tbody></table>'+' </div>'+' <div class="bd-pane control-group" id="bd-themes-pane" style="display:none;">';if(typeof(themesupport2)==="undefined"){settingsInner+=''+' Your version does not support themes. Download the latest version.';}else{settingsInner+=''+' <table class="bd-g-table">'+' <thead><tr><th>Name</th><th>Description</th><th>Author</th><th>Version</th><th></th></tr></thead><tbody>';$.each(bdthemes,function(){settingsInner+=''+'<tr>'+' <td>'+this["name"].replace(/_/g," ")+'</td>'+' <td width="99%"><textarea>'+this["description"]+'</textarea></td>'+' <td>'+this["author"]+'</td>'+' <td>'+this["version"]+'</td>'+' <td>'+' <div class="checkbox" onclick="themeModule.handleTheme(this);">'+' <div class="checkbox-inner">'+' <input id="ti'+this["name"]+'" type="checkbox" '+(themeCookie[this["name"]]?"checked":"")+'>'+' <span></span>'+' </div>'+' </div>'+' </td>'+'</tr>';});settingsInner+='</tbody></table>';}
mainCore.saveSettings();};SettingsPanel.prototype.construct=function(){var self=this;panel=$("<div/>",{id:"bd-pane",class:"settings-inner",css:{"display":"none"}});var settingsInner=''+'<div class="scroller-wrap">'+' <div class="scroller settings-wrapper settings-panel">'+' <div class="tab-bar TOP">'+' <div class="tab-bar-item bd-tab" id="bd-settings-tab" onclick="settingsPanel.changeTab(\'bd-settings-tab\');">Settings</div>'+' <div class="tab-bar-item bd-tab" id="bd-customcss-tab" onclick="settingsPanel.changeTab(\'bd-customcss-tab\');">Custom CSS</div>'+' <div class="tab-bar-item bd-tab" id="bd-plugins-tab" onclick="settingsPanel.changeTab(\'bd-plugins-tab\');">Plugins</div>'+' <div class="tab-bar-item bd-tab" id="bd-themes-tab" onclick="settingsPanel.changeTab(\'bd-themes-tab\');">Themes</div>'+' </div>'+' <div class="bd-settings">'+' <div class="bd-pane control-group" id="bd-settings-pane" style="display:none;">'+' <ul class="checkbox-group">';for(var setting in settings){var sett=settings[setting];var id=sett["id"];if(sett["implemented"]&&!sett["hidden"]){settingsInner+=''+'<li>'+'<div class="checkbox" onclick="settingsPanel.updateSetting(this);" >'+'<div class="checkbox-inner">'+'<input type="checkbox" id="'+id+'" '+(settingsCookie[id]?"checked":"")+'>'+'<span></span>'+'</div>'+'<span>'+setting+" - "+sett["info"]+'</span>'+'</div>'+'</li>';}}
var ccss=atob(localStorage.getItem("bdcustomcss"));customCssEditor.applyCustomCss(ccss,true,false);settingsInner+='</ul>'+' </div>'+''+' <div class="bd-pane control-group" id="bd-customcss-pane" style="display:none;">'+' <div id="editor-detached" style="display:none;">'+' <h3>Editor Detached</h3>'+' <button class="btn btn-primary" onclick="customCssEditor.attach(); return false;">Attach</button>'+' </div>'+' <div id="bd-customcss-innerpane"><textarea id="bd-custom-css-ta">'+ccss+'</textarea></div>'+' </div>'+''+' <div class="bd-pane control-group" id="bd-plugins-pane" style="display:none;">'+' <table class="bd-g-table">'+' <thead><tr><th>Name</th><th>Description</th><th>Author</th><th>Version</th><th></th><th></th></tr></thead><tbody>';$.each(bdplugins,function(){var plugin=this["plugin"];settingsInner+=''+'<tr>'+' <td>'+plugin.getName()+'</td>'+' <td width="99%"><textarea>'+plugin.getDescription()+'</textarea></td>'+' <td>'+plugin.getAuthor()+'</td>'+' <td>'+plugin.getVersion()+'</td>'+' <td><button class="bd-psb" onclick="pluginModule.showSettings(\''+plugin.getName()+'\'); return false;"></button></td>'+' <td>'+' <div class="checkbox" onclick="pluginModule.handlePlugin(this);">'+' <div class="checkbox-inner">'+' <input id="'+plugin.getName()+'" type="checkbox" '+(pluginCookie[plugin.getName()]?"checked":"")+'>'+' <span></span>'+' </div>'+' </div>'+' </td>'+'</tr>';});settingsInner+='</tbody></table>'+' </div>'+' <div class="bd-pane control-group" id="bd-themes-pane" style="display:none;">';if(typeof(themesupport2)==="undefined"){settingsInner+=''+' Your version does not support themes. Download the latest version.';}else{settingsInner+=''+' <table class="bd-g-table">'+' <thead><tr><th>Name</th><th>Description</th><th>Author</th><th>Version</th><th></th></tr></thead><tbody>';$.each(bdthemes,function(){settingsInner+=''+'<tr>'+' <td>'+this["name"].replace(/_/g," ")+'</td>'+' <td width="99%"><textarea>'+this["description"]+'</textarea></td>'+' <td>'+this["author"]+'</td>'+' <td>'+this["version"]+'</td>'+' <td>'+' <div class="checkbox" onclick="themeModule.handleTheme(this);">'+' <div class="checkbox-inner">'+' <input id="ti'+this["name"]+'" type="checkbox" '+(themeCookie[this["name"]]?"checked":"")+'>'+' <span></span>'+' </div>'+' </div>'+' </td>'+'</tr>';});settingsInner+='</tbody></table>';}
settingsInner+=''+' </div>'+''+' </div>'+' </div>'+' <div style="background:#2E3136; color:#ADADAD; height:30px; position:absolute; bottom:0; left:0; right:0;">'+' <span style="line-height:30px;margin-left:10px;">BetterDiscord v'+version+'(JSv'+jsVersion+') by Jiiks</span>'+' <span style="float:right;line-height:30px;margin-right:10px;"><a href="http://betterdiscord.net" target="_blank">BetterDiscord.net</a></span>'+' </div>'+'</div>';function showSettings(){$(".tab-bar-item").removeClass("selected");settingsButton.addClass("selected");$(".form .settings-right .settings-inner").first().hide();panel.show();if(lastTab==""){self.changeTab("bd-settings-tab");}else{self.changeTab(lastTab);}}
settingsButton=$("<div/>",{class:"tab-bar-item",text:"BetterDiscord",id:"bd-settings-new",click:showSettings});panel.html(settingsInner);function defer(){if($(".btn.btn-settings").length<1){setTimeout(defer,100);}else{$(".btn.btn-settings").first().on("click",function(){function innerDefer(){if($(".modal-inner").first().is(":visible")){panel.hide();var tabBar=$(".tab-bar.SIDE").first();$(".tab-bar.SIDE .tab-bar-item").click(function(){$(".form .settings-right .settings-inner").first().show();$("#bd-settings-new").removeClass("selected");panel.hide();});tabBar.append(settingsButton);$(".form .settings-right .settings-inner").last().after(panel);$("#bd-settings-new").removeClass("selected");}else{setTimeout(innerDefer,100);}}
innerDefer();});}}
@ -56,7 +65,7 @@ Utils.prototype.getTextArea=function(){return $(".channel-textarea-inner textare
VoiceMode.prototype.obsCallback=function(){var self=this;if(settingsCookie["bda-gs-4"]){self.disable();setTimeout(function(){self.enable();},300);}};VoiceMode.prototype.enable=function(){$(".scroller.guild-channels ul").first().css("display","none");$(".scroller.guild-channels header").first().css("display","none");$(".app.flex-vertical").first().css("overflow","hidden");$(".chat.flex-vertical.flex-spacer").first().css("visibility","hidden").css("min-width","0px");$(".flex-vertical.channels-wrap").first().css("flex-grow","100000");$(".guild-header .btn.btn-hamburger").first().css("visibility","hidden");};VoiceMode.prototype.disable=function(){$(".scroller.guild-channels ul").first().css("display","");$(".scroller.guild-channels header").first().css("display","");$(".app.flex-vertical").first().css("overflow","");$(".chat.flex-vertical.flex-spacer").first().css("visibility","").css("min-width","");$(".flex-vertical.channels-wrap").first().css("flex-grow","");$(".guild-header .btn.btn-hamburger").first().css("visibility","");};var pluginCookie={};function PluginModule(){}
PluginModule.prototype.loadPlugins=function(){this.loadPluginData();$.each(bdplugins,function(){var plugin=this["plugin"];plugin.load();var name=plugin.getName();var enabled=false;if(pluginCookie.hasOwnProperty(name)){enabled=pluginCookie[name];}else{pluginCookie[name]=false;}
if(enabled){plugin.start();}});};PluginModule.prototype.handlePlugin=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id");cb.prop("checked",enabled);if(enabled){bdplugins[id]["plugin"].start();pluginCookie[id]=true;}else{bdplugins[id]["plugin"].stop();pluginCookie[id]=false;}
this.savePluginData();};PluginModule.prototype.showSettings=function(plugin){if(bdplugins[plugin]!=null){if(typeof bdplugins[plugin].plugin.getSettingsPanel==="function"){var panel=bdplugins[plugin].plugin.getSettingsPanel();$(".modal-inner").off("click.bdpsm").on("click.bdpsm",function(e){if($("#bd-psm-id").length){$(".bd-psm").remove();}else{$(".bd-psm").attr("id","bd-psm-id");}});$(".modal").append('<div class="bd-psm"><div class="scroller-wrap" style="height:100%"><div id="bd-psm-s" class="scroller" style="padding:10px;"></div></div></div>');$("#bd-psm-s").append(panel);}}};PluginModule.prototype.loadPluginData=function(){var cookie=$.cookie("bd-plugins");if(cookie!=undefined){pluginCookie=JSON.parse($.cookie("bd-plugins"));}};PluginModule.prototype.savePluginData=function(){$.cookie("bd-plugins",JSON.stringify(pluginCookie),{expires:365,path:'/'});};PluginModule.prototype.newMessage=function(){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.onMessage==="function"){this.plugin.onMessage();}});};PluginModule.prototype.channelSwitch=function(){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.onSwitch==="function"){this.plugin.onSwitch();}});};PluginModule.prototype.socketEvent=function(e,data){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.socketEvent==="function"){this.plugin.socketEvent(data);}});};var themeCookie={};function ThemeModule(){}
this.savePluginData();};PluginModule.prototype.showSettings=function(plugin){if(bdplugins[plugin]!=null){if(typeof bdplugins[plugin].plugin.getSettingsPanel==="function"){var panel=bdplugins[plugin].plugin.getSettingsPanel();$(".modal-inner").off("click.bdpsm").on("click.bdpsm",function(e){if($("#bd-psm-id").length){$(".bd-psm").remove();}else{$(".bd-psm").attr("id","bd-psm-id");}});$(".modal").append('<div class="bd-psm"><div class="scroller-wrap" style="height:100%"><div id="bd-psm-s" class="scroller" style="padding:10px;"></div></div></div>');$("#bd-psm-s").append(panel);}}};PluginModule.prototype.loadPluginData=function(){var cookie=$.cookie("bd-plugins");if(cookie!=undefined){pluginCookie=JSON.parse($.cookie("bd-plugins"));}};PluginModule.prototype.savePluginData=function(){$.cookie("bd-plugins",JSON.stringify(pluginCookie),{expires:365,path:'/'});};PluginModule.prototype.newMessage=function(){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.onMessage==="function"){this.plugin.onMessage();}});};PluginModule.prototype.channelSwitch=function(){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.onSwitch==="function"){this.plugin.onSwitch();}});};PluginModule.prototype.socketEvent=function(e,data){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.socketEvent==="function"){this.plugin.socketEvent(data);}});};PluginModule.prototype.rawObserver=function(e){$.each(bdplugins,function(){if(!pluginCookie[this.plugin.getName()])return;if(typeof this.plugin.observer==="function"){this.plugin.observer(e);}});};var themeCookie={};function ThemeModule(){}
ThemeModule.prototype.loadThemes=function(){this.loadThemeData();$.each(bdthemes,function(){var name=this["name"];var enabled=false;if(themeCookie.hasOwnProperty(name)){if(themeCookie[name]){enabled=true;}}else{themeCookie[name]=false;}
if(enabled){$("head").append('<style id="'+name+'">'+unescape(bdthemes[name]["css"])+'</style>');}});};ThemeModule.prototype.handleTheme=function(checkbox){var cb=$(checkbox).children().find('input[type="checkbox"]');var enabled=!cb.is(":checked");var id=cb.attr("id").substring(2);cb.prop("checked",enabled);if(enabled){$("head").append('<style id="'+id+'">'+unescape(bdthemes[id]["css"])+'</style>');themeCookie[id]=true;}else{$("#"+id).remove();themeCookie[id]=false;}
this.saveThemeData();};ThemeModule.prototype.loadThemeData=function(){var cookie=$.cookie("bd-themes");if(cookie!=undefined){themeCookie=JSON.parse($.cookie("bd-themes"));}};ThemeModule.prototype.saveThemeData=function(){$.cookie("bd-themes",JSON.stringify(themeCookie),{expires:365,path:'/'});};var bdSocket;var bdws;function BdWSocket(){bdws=this;}