Please download the latest version from BetterDiscord.net");
+
+ if (version < supportedVersion) {
+ this.alert("Not Supported", "BetterDiscord v" + version + "(your version)" + " is not supported by the latest js(" + jsVersion + ").
Please download the latest version from BetterDiscord.net");
return;
}
- this.utils = new Utils();
-
utils = new Utils();
+ var sock = new BdWSocket();
+ sock.start();
utils.getHash();
emoteModule = new EmoteModule();
quickEmoteMenu = new QuickEmoteMenu();
@@ -327,6 +261,7 @@ Core.prototype.loadSettings = function () {
settingsCookie = JSON.parse($.cookie("better-discord"));
};
+var botlist = ["119598467310944259"]; //Temp
Core.prototype.initObserver = function () {
mainObserver = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
@@ -456,8 +391,4 @@ Core.prototype.alert = function (title, text) {
' ' +
' ' +
'');
-};
-
-Core.prototype.getUtils = function() {
- return this.utils;
};
\ No newline at end of file
diff --git a/dev/js/01emoteModule.js b/dev/js/01emoteModule.js
deleted file mode 100644
index 1816e6b7..00000000
--- a/dev/js/01emoteModule.js
+++ /dev/null
@@ -1,274 +0,0 @@
-/* BetterDiscordApp EmoteModule JavaScript
- * Version: 1.5
- * Author: Jiiks | http://jiiks.net
- * Date: 26/08/2015 - 15:29
- * Last Update: 14/10/2015 - 09:48
- * https://github.com/Jiiks/BetterDiscordApp
- * Note: Due to conflicts autocapitalize only supports global emotes
- */
-
-/*
- * =Changelog=
- * -v1.5
- * --Twitchemotes.com api
- */
-
-function EmoteModule() {
- this.blacklist = [];
- this.spoilered = [];
- this.emotes = {
- twitchGlobal: emotesTwitch,
- twitchSub: subEmotesTwitch,
- bttvGlobal: emotesBTTV,
- bttvUser: emotesBTTV2,
- ffz: emotesFfz
- };
-}
-
-EmoteModule.prototype.init = function () {
- this.config = {
- twitch: {
- url: {
- start: "https://static-cdn.jtvnw.net/emoticons/v1/",
- end: "/1.0"
- }
- },
- ffz: {
- url: {
- start: "https://cdn.frankerfacez.com/emoticon/",
- end: "/1"
- }
- },
- bttv: {
- url: {
- start: "https://cdn.betterttv.net/emote/",
- end: "/1x"
- }
- }
- }
-};
-
-EmoteModule.prototype.getBlacklist = function () {
- var self = this;
- $.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/" + _hash + "/data/emotefilter.json", function (data) {
- self.blacklist = data.blacklist;
- });
-};
-
-EmoteModule.prototype.obsCallback = function (mutation) {
- var self = this;
-
- if (!BD.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("" + newText + "");
- } 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;
-};
-
-EmoteModule.prototype.injectEmote = function (node) {
-
- var self = this;
-
- 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 (self.spoilered.indexOf(reactId) > -1) {
- return;
- }
-
- markup.addClass("spoiler");
- markup.on("click", function () {
- $(this).removeClass("spoiler");
- self.spoilered.push($(this).attr("data-reactid"));
- });
-
- return;
- }
-
- if (word.length < 4) {
- return;
- }
-
- if (word == "ClauZ") {
- parentInnerHTML = parentInnerHTML.replace("ClauZ", '');
- 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(BD.settingsCookie["bda-es-8"]) {
- emoteClass = "emote" + split[1];
- if(allowedClasses.indexOf(emoteClass) < 0) {
- emoteClass = "";
- }
- }
- }
- }
- if ($.inArray(sWord, self.blacklist) != -1) return;
-
- 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 cfg = self.config;
- if (self.emotes.twitchGlobal.emotes.hasOwnProperty(sWord)) {
- var url = cfg.twitch.url.start + self.emotes.twitchGlobal.emotes[sWord].image_id + cfg.twitch.url.end;
- parentInnerHTML = parentInnerHTML.replace(word, '');
- return;
- }
-
- if (self.emotes.twitchSub.hasOwnProperty(sWord)) {
- var url = cfg.twitch.url.start + self.emotes.twitchSub[sWord] + cfg.twitch.url.end;
- parentInnerHTML = parentInnerHTML.replace(word, '');
- return;
- }
-
- if (typeof self.emotes.bttvGlobal !== 'undefined' && BD.settingsCookie["bda-es-2"]) {
- if (self.emotes.bttvGlobal.hasOwnProperty(sWord)) {
- var url = self.emotes.bttvGlobal[sWord];
- parentInnerHTML = parentInnerHTML.replace(word, '');
- return;
- }
- }
-
- if (typeof self.emotes.bttvUser !== 'undefined' && BD.settingsCookie["bda-es-2"]) {
- if (self.emotes.bttvUser.hasOwnProperty(sWord)) {
- var url = cfg.bttv.url.start + self.emotes.bttvUser[sWord] + cfg.bttv.url.end;
- parentInnerHTML = parentInnerHTML.replace(word, '');
- return;
- }
- }
-
- if (typeof self.emotes.ffz !== 'undefined' && BD.settingsCookie["bda-es-1"]) {
- if (self.emotes.ffz.hasOwnProperty(sWord)) {
- var url = cfg.ffz.url.start + self.emotes.ffz[sWord] + cfg.ffz.url.end;
- parentInnerHTML = parentInnerHTML.replace(word, '');
- 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 (!BD.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 = this.emotes.twitchGlobal.emotes;
- for (var p in res) {
- if (res.hasOwnProperty(p) && value == (p + '').toLowerCase()) {
- return p;
- }
- }
-};
\ No newline at end of file
diff --git a/dev/js/02emoteModule.js b/dev/js/02emoteModule.js
index 7a566065..f5724e33 100644
--- a/dev/js/02emoteModule.js
+++ b/dev/js/02emoteModule.js
@@ -26,28 +26,7 @@ var subEmotesTwitch = {};
function EmoteModule() {}
-EmoteModule.prototype.init = function () {
- this.config = {
- twitch: {
- url: {
- start: "https://static-cdn.jtvnw.net/emoticons/v1/",
- end: "/1.0"
- }
- },
- ffz: {
- url: {
- start: "https://cdn.frankerfacez.com/emoticon/",
- end: "/1"
- }
- },
- bttv: {
- url: {
- start: "https://cdn.betterttv.net/emote/",
- end: "/1x"
- }
- }
- }
-};
+EmoteModule.prototype.init = function () {};
EmoteModule.prototype.getBlacklist = function () {
$.getJSON("https://cdn.rawgit.com/Jiiks/betterDiscordApp/" + _hash + "/data/emotefilter.json", function (data) {
@@ -112,8 +91,6 @@ var spoilered = [];
EmoteModule.prototype.injectEmote = function (node) {
- var self = this;
-
if (typeof emotesTwitch === 'undefined') return;
if (!node.parentElement) return;
@@ -186,23 +163,36 @@ EmoteModule.prototype.injectEmote = function (node) {
}
if ($.inArray(sWord, bemotes) != -1) return;
- 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 cfg = self.config;
if (emotesTwitch.emotes.hasOwnProperty(sWord)) {
- var url = cfg.twitch.url.start + emotesTwitch.emotes[sWord].image_id + cfg.twitch.url.end;
+ 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, '');
return;
}
if (subEmotesTwitch.hasOwnProperty(sWord)) {
- var url = cfg.twitch.url.start + subEmotesTwitch[sWord] + cfg.twitch.url.end;
+ 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, '');
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, '');
+ 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, '');
return;
@@ -211,15 +201,9 @@ EmoteModule.prototype.injectEmote = function (node) {
if (typeof emotesBTTV2 !== 'undefined' && settingsCookie["bda-es-2"]) {
if (emotesBTTV2.hasOwnProperty(sWord)) {
- var url = cfg.bttv.url.start + emotesBTTV2[sWord] + cfg.bttv.url.end;
- parentInnerHTML = parentInnerHTML.replace(word, '');
- return;
- }
- }
-
- if (typeof emotesFfz !== 'undefined' && settingsCookie["bda-es-1"]) {
- if (emotesFfz.hasOwnProperty(sWord)) {
- var url = cfg.ffz.url.start + emotesFfz[sWord] + cfg.ffz.url.end;
+ 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, '');
return;
}
diff --git a/dev/js/03publicServers.js b/dev/js/03publicServers.js
index 94d87cad..1eef4824 100644
--- a/dev/js/03publicServers.js
+++ b/dev/js/03publicServers.js
@@ -222,4 +222,4 @@ PublicServers.prototype.joinServer = function (code) {
$(".action.join .btn").click();
$(".create-guild-container input").val(code);
$(".form.join-server .btn-primary").click();
-};
+};
\ No newline at end of file
diff --git a/dev/js/04quickEmoteMenu.js b/dev/js/04quickEmoteMenu.js
index 23c562ae..88e4b1ab 100644
--- a/dev/js/04quickEmoteMenu.js
+++ b/dev/js/04quickEmoteMenu.js
@@ -15,7 +15,7 @@ QuickEmoteMenu.prototype.init = function() {
$(document).on("mousedown", function(e) {
if(e.target.id != "rmenu") $("#rmenu").remove();
});
-
+ this.favoriteEmotes = {};
var fe = localStorage["bdfavemotes"];
if (fe != undefined) {
this.favoriteEmotes = JSON.parse(atob(fe));
diff --git a/dev/js/06settingsPanel.js b/dev/js/06settingsPanel.js
index cdf73e27..49d62b8e 100644
--- a/dev/js/06settingsPanel.js
+++ b/dev/js/06settingsPanel.js
@@ -2,10 +2,13 @@
* Version: 2.0
* Author: Jiiks | http://jiiks.net
* Date: 26/08/2015 - 11:54
- * Last Update: 10/04/2016
+ * Last Update: 27/11/2015 - 00:50
* https://github.com/Jiiks/BetterDiscordApp
*/
+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");
@@ -14,7 +17,7 @@ function SettingsPanel() {
SettingsPanel.prototype.init = function () {
var self = this;
- self.constructPanel();
+ self.construct();
var body = $("body");
if (settingsCookie["bda-es-0"]) {
@@ -45,7 +48,7 @@ SettingsPanel.prototype.init = function () {
if (settingsCookie["bda-es-6"]) {
//Pretty emote titles
emoteNamePopup = $("
\
- ';
};
\ No newline at end of file
diff --git a/dev/js/10themeModule.js b/dev/js/10themeModule.js
index a7c16293..12f33a5f 100644
--- a/dev/js/10themeModule.js
+++ b/dev/js/10themeModule.js
@@ -61,4 +61,4 @@ ThemeModule.prototype.saveThemeData = function () {
expires: 365,
path: '/'
});
-};
\ No newline at end of file
+};