//META{"name":"EmojiStatistics"}*// class EmojiStatistics { initConstructor () { this.labels = {}; this.patchModules = { "EmojiPicker":"componentDidMount" }; this.css = ` .emoji-tooltip { z-index: 2002; } .${this.getName()}-modal .titles { height: 20px; } .${this.getName()}-modal .emojiserver-entry { height: 50px; padding-top: 5px; padding-bottom: 5px; } .${this.getName()}-modal .emojiserver-entry .modal-emojiserver-icon { background-color: #484B51; background-size: cover; border-radius: 25px; color: #b9bbbe; display: inline-block; font-size: 16px; font-weight: 600; height: 35px; letter-spacing: .5px; overflow: hidden; padding-top: 15px; text-align: center; width: 50px; } .${this.getName()}-modal .titles-entry label, .${this.getName()}-modal .emojiserver-entry label { color: #b9bbbe; display: inline-block; flex: 1; font-size: 12px; font-weight: 600; letter-spacing: .5px; margin-left: 10px; margin-top: 20px; overflow: hidden; vertical-align: top; text-transform: uppercase; } .${this.getName()}-modal .emojiserver-entry label { height: 12px; overflow: hidden; } .${this.getName()}-modal .titles-entry label { margin-top: 0px; } .${this.getName()}-modal .titles-entry .modal-titlesicon-label { margin-left: 0px; text-align: center; width: 50px; } .${this.getName()}-modal .titles-entry .modal-titlesname-label, .${this.getName()}-modal .emojiserver-entry .modal-emojiname-label { width: 300px; } .${this.getName()}-modal .titles-entry .modal-sorttitle-label { cursor: pointer; } .${this.getName()}-modal .titles-entry .modal-titlestotal-label, .${this.getName()}-modal .titles-entry .modal-titlesglobal-label, .${this.getName()}-modal .titles-entry .modal-titleslocal-label, .${this.getName()}-modal .titles-entry .modal-titlescopies-label, .${this.getName()}-modal .emojiserver-entry .modal-emojitotal-label, .${this.getName()}-modal .emojiserver-entry .modal-emojiglobal-label, .${this.getName()}-modal .emojiserver-entry .modal-emojilocal-label, .${this.getName()}-modal .emojiserver-entry .modal-emojicopies-label { text-align: center; width: 82px; } .emojistatistics-button { background-image: url("/assets/f24711dae4f6d6b28335e866a93e9d9b.png"); background-position: -770px -374px; background-size: 924px 704px; cursor: pointer; height: 22px; margin-right: 10px; width: 22px; }`; this.emojiInformationModalMarkup = `

REPLACE_modal_header_text

`; this.emojiserverTitlesMarkup = `
`; this.emojiserverEntryMarkup = `
`; this.dividerMarkup = `
`; this.emojiButtonMarkup = `
`; this.defaults = { settings: { enableEmojiHovering: {value:true, description:"Show Information about Emojis on hover over an Emoji in the Emojipicker."}, enableEmojiStatisticsButton: {value:true, description:"Add a Button in the Emojipicker to open the Statistics Overview."} }, amounts: { hoverDelay: {value:1000, description:"Tooltip delay in millisec:"} } }; } getName () {return "EmojiStatistics";} getDescription () {return "Adds some helpful options to show you more information about emojis and emojiservers.";} getVersion () {return "2.7.8";} getAuthor () {return "DevilBro";} getSettingsPanel () { if (!this.started || typeof BDFDB !== "object") return; var settings = BDFDB.getAllData(this, "settings"); var amounts = BDFDB.getAllData(this, "amounts"); var settingshtml = `
${this.getName()}
`; for (let key in settings) { settingshtml += `

${this.defaults.settings[key].description}

`; } for (let key in amounts) { settingshtml += `

${this.defaults.amounts[key].description}

`; } settingshtml += `
`; var settingspanel = $(settingshtml)[0]; BDFDB.initElements(settingspanel); $(settingspanel) .on("click", BDFDB.dotCN.switchinner, () => {this.updateSettings(settingspanel);}) .on("input", ".amountInput", (e) => { var input = parseInt(e.currentTarget.value); if (!isNaN(input) && input > -1) BDFDB.saveData(e.currentTarget.getAttribute("option"), input, this, "amounts"); }); return settingspanel; } //legacy load () {} start () { var libraryScript = null; if (typeof BDFDB !== "object" || typeof BDFDB.isLibraryOutdated !== "function" || BDFDB.isLibraryOutdated()) { libraryScript = document.querySelector('head script[src="https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"]'); if (libraryScript) libraryScript.remove(); libraryScript = document.createElement("script"); libraryScript.setAttribute("type", "text/javascript"); libraryScript.setAttribute("src", "https://mwittrien.github.io/BetterDiscordAddons/Plugins/BDFDB.js"); document.head.appendChild(libraryScript); } this.startTimeout = setTimeout(() => {this.initialize();}, 30000); if (typeof BDFDB === "object" && typeof BDFDB.isLibraryOutdated === "function") this.initialize(); else libraryScript.addEventListener("load", () => {this.initialize();}); } initialize () { if (typeof BDFDB === "object") { BDFDB.loadMessage(this); this.GuildEmojis = BDFDB.WebModules.findByProperties("getGuildEmoji", "getDisambiguatedEmojiContext"); BDFDB.WebModules.forceAllUpdates(this); } else { console.error(this.getName() + ": Fatal Error: Could not load BD functions!"); } } stop () { if (typeof BDFDB === "object") { BDFDB.removeEles(".emoji-tooltip",".emojistatistics-button"); BDFDB.unloadMessage(this); } } // begin of own functions updateSettings (settingspanel) { var settings = {}; for (var input of settingspanel.querySelectorAll(BDFDB.dotCN.switchinner)) { settings[input.value] = input.checked; } BDFDB.saveAllData(settings, this, "settings"); } changeLanguageStrings () { this.emojiInformationModalMarkup = this.emojiInformationModalMarkup.replace("REPLACE_modal_header_text", this.labels.modal_header_text); this.emojiInformationModalMarkup = this.emojiInformationModalMarkup.replace("REPLACE_btn_ok_text", this.labels.btn_ok_text); this.emojiInformationModalMarkup = this.emojiInformationModalMarkup.replace("REPLACE_btn_all_text", this.labels.btn_all_text); this.emojiserverTitlesMarkup = this.emojiserverTitlesMarkup.replace("REPLACE_modal_titlesicon-label", this.labels.modal_titlesicon_text); this.emojiserverTitlesMarkup = this.emojiserverTitlesMarkup.replace("REPLACE_modal_titlesname_text", this.labels.modal_titlesname_text); this.emojiserverTitlesMarkup = this.emojiserverTitlesMarkup.replace("REPLACE_modal_titlestotal_text", this.labels.modal_titlestotal_text); this.emojiserverTitlesMarkup = this.emojiserverTitlesMarkup.replace("REPLACE_modal_titlesglobal_text", this.labels.modal_titlesglobal_text); this.emojiserverTitlesMarkup = this.emojiserverTitlesMarkup.replace("REPLACE_modal_titleslocal_text", this.labels.modal_titleslocal_text); this.emojiserverTitlesMarkup = this.emojiserverTitlesMarkup.replace("REPLACE_modal_titlescopies_text", this.labels.modal_titlescopies_text); } processEmojiPicker (instance, wrapper) { if (!wrapper.querySelector(".emojistatistics-button")) { this.loadEmojiList(); let settings = BDFDB.getAllData(this, "settings"); if (settings.enableEmojiStatisticsButton) { $(this.emojiButtonMarkup) .insertBefore(BDFDB.dotCN.emojipickerdiversityselector, wrapper) .off("click." + this.getName()) .on("click." + this.getName(), () => { instance._reactInternalFiber.return.return.return.return.stateNode.close(); this.showEmojiInformationModal(); }); } if (settings.enableEmojiHovering) { $(wrapper) .off("mouseenter." + this.getName()) .on("mouseenter." + this.getName(), BDFDB.dotCN.emojipickeremojiitem, e => { let data = this.emojiToServerList[e.target.style.getPropertyValue("background-image").replace('url("',"").replace('")',"")]; if (data) BDFDB.createTooltip(`${BDFDB.encodeToHTML(data.emoji)}\n${BDFDB.encodeToHTML(data.server)}`, e.target, {type:"right",selector:"emoji-tooltip",delay:BDFDB.getData("hoverDelay", this, "amounts")}); }); } } } loadEmojiList () { this.emojiReplicaList = {}; this.emojiToServerList = {}; for (let serverObj of BDFDB.readServerList()) { for (let emoji of this.GuildEmojis.getGuildEmoji(serverObj.id)) { this.emojiToServerList[emoji.url] = {emoji:emoji.allNamesString, server:serverObj.name}; if (emoji.managed) this.emojiReplicaList[emoji.name] = this.emojiReplicaList[emoji.name] != undefined; } } } showEmojiInformationModal () { var emojiInformationModal = $(this.emojiInformationModalMarkup); BDFDB.appendModal(emojiInformationModal); var entries = [], index = 0; for (let serverObj of BDFDB.readServerList()) { let amountGlobal = 0, amountLocal = 0, amountCopies = 0; for (let emoji of this.GuildEmojis.getGuildEmoji(serverObj.id)) { if (emoji.managed) { amountGlobal++; if (this.emojiReplicaList[emoji.name]) amountCopies++; } else { amountLocal++; } } var entry = $(this.emojiserverEntryMarkup); if (serverObj.icon) { entry.find(".modal-emojiserver-icon").css("background-image", "url('https://cdn.discordapp.com/icons/" + serverObj.id + "/" + serverObj.icon + ".png')"); } else { entry.find(".modal-emojiserver-icon").text(serverObj.div.querySelector("a").innerText); } entry.find(".modal-emojiname-label").text(serverObj.name); entry.find(".modal-emojitotal-label").text(amountGlobal+amountLocal); entry.find(".modal-emojiglobal-label").text(amountGlobal); entry.find(".modal-emojilocal-label").text(amountLocal); entry.find(".modal-emojicopies-label").text(amountCopies); entries.push({entry:entry, index:index++, name:serverObj.name, total:amountGlobal+amountLocal, global:amountGlobal, local:amountLocal, copies:amountCopies}); } var titleentry = $(this.emojiserverTitlesMarkup) .appendTo(".titles", emojiInformationModal) .on("click", ".modal-sorttitle-label ", (e2) => { var oldTitle = e2.target.innerText; var reverse = oldTitle.indexOf("▼") < 0 ? false : true; titleentry.find(".modal-titlesname-label").text(this.labels.modal_titlesname_text); titleentry.find(".modal-titlestotal-label").text(this.labels.modal_titlestotal_text); titleentry.find(".modal-titlesglobal-label").text(this.labels.modal_titlesglobal_text); titleentry.find(".modal-titleslocal-label").text(this.labels.modal_titleslocal_text); titleentry.find(".modal-titlescopies-label").text(this.labels.modal_titlescopies_text); var sortKey = "index"; if (oldTitle.indexOf("▲") < 0) { sortKey = e2.target.getAttribute("sortkey"); var title = this.labels["modal_titles" + sortKey + "_text"]; e2.target.innerText = oldTitle.indexOf("▼") < 0 ? title + "▼" : title + "▲"; } BDFDB.sortArrayByKey(entries, sortKey); if (reverse) entries.reverse(); this.updateAllEntries(emojiInformationModal, entries); }); this.updateAllEntries(emojiInformationModal, entries); } updateAllEntries (modal, entries) { var container = modal.find(".entries"); container.children().remove(); for (let i = 0; entries.length > i; i++) { if (i > 0) container.append(this.dividerMarkup); container.append(entries[i].entry); } } setLabelsByLanguage () { switch (BDFDB.getDiscordLanguage().id) { case "hr": //croatian return { modal_header_text: "Statistike o emojima", modal_titlesicon_text: "Ikona", modal_titlesname_text: "Naziv poslužitelja", modal_titlestotal_text: "Cjelokupni:", modal_titlesglobal_text: "Globalno:", modal_titleslocal_text: "Kokalne:", modal_titlescopies_text: "Kopije:", btn_ok_text: "OK" }; case "da": //danish return { modal_header_text: "Statistikker af emojis", modal_titlesicon_text: "Icon", modal_titlesname_text: "Servernavn", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Lokal:", modal_titlescopies_text: "Copies:", btn_ok_text: "OK" }; case "de": //german return { modal_header_text: "Statistiken über Emojis", modal_titlesicon_text: "Icon", modal_titlesname_text: "Servername", modal_titlestotal_text: "Gesamt:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Lokal:", modal_titlescopies_text: "Kopien:", btn_ok_text: "OK" }; case "es": //spanish return { modal_header_text: "Estadísticas de emojis", modal_titlesicon_text: "Icono", modal_titlesname_text: "Nombre del servidor", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Local:", modal_titlescopies_text: "Copias:", btn_ok_text: "OK" }; case "fr": //french return { modal_header_text: "Statistiques des emojis", modal_titlesicon_text: "Icône", modal_titlesname_text: "Nom du serveur", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Local:", modal_titlescopies_text: "Copies:", btn_ok_text: "OK" }; case "it": //italian return { modal_header_text: "Statistiche di emojis", modal_titlesicon_text: "Icona", modal_titlesname_text: "Nome del server", modal_titlestotal_text: "Totale:", modal_titlesglobal_text: "Globale:", modal_titleslocal_text: "Locale:", modal_titlescopies_text: "Copie:", btn_ok_text: "OK" }; case "nl": //dutch return { modal_header_text: "Statistieken van emojis", modal_titlesicon_text: "Icoon", modal_titlesname_text: "Servernaam", modal_titlestotal_text: "Totaal:", modal_titlesglobal_text: "Globaal:", modal_titleslocal_text: "Lokaal:", modal_titlescopies_text: "Kopieën:", btn_ok_text: "OK" }; case "no": //norwegian return { modal_header_text: "Statistikk av emojis", modal_titlesicon_text: "Ikon", modal_titlesname_text: "Servernavn", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Lokal:", modal_titlescopies_text: "Kopier:", btn_ok_text: "OK" }; case "pl": //polish return { modal_header_text: "Statystyki emoji", modal_titlesicon_text: "Ikona", modal_titlesname_text: "Nazwa", modal_titlestotal_text: "Całkowity:", modal_titlesglobal_text: "Światowy:", modal_titleslocal_text: "Lokalny:", modal_titlescopies_text: "Kopie:", btn_ok_text: "OK" }; case "pt-BR": //portuguese (brazil) return { modal_header_text: "Estatísticas de emojis", modal_titlesicon_text: "Ícone", modal_titlesname_text: "Nome do servidor", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Local:", modal_titlescopies_text: "Cópias:", btn_ok_text: "OK" }; case "fi": //finnish return { modal_header_text: "Tilastot emojista", modal_titlesicon_text: "Ikoni", modal_titlesname_text: "Palvelimen nimi", modal_titlestotal_text: "Koko:", modal_titlesglobal_text: "Globaali:", modal_titleslocal_text: "Paikallinen:", modal_titlescopies_text: "Kopiot:", btn_ok_text: "OK" }; case "sv": //swedish return { modal_header_text: "Statistik för emojis", modal_titlesicon_text: "Ikon", modal_titlesname_text: "Servernamn", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Lokal:", modal_titlescopies_text: "Kopior:", btn_ok_text: "OK" }; case "tr": //turkish return { modal_header_text: "Emojis istatistikleri", modal_titlesicon_text: "Icon", modal_titlesname_text: "Sunucuadı", modal_titlestotal_text: "Toplam:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Yerel:", modal_titlescopies_text: "Kopya:", btn_ok_text: "Okey" }; case "cs": //czech return { modal_header_text: "Statistiky emojis", modal_titlesicon_text: "Ikona", modal_titlesname_text: "Název serveru", modal_titlestotal_text: "Celkový:", modal_titlesglobal_text: "Globální:", modal_titleslocal_text: "Místní:", modal_titlescopies_text: "Kopie:", btn_ok_text: "OK" }; case "bg": //bulgarian return { modal_header_text: "Статистика на емотис", modal_titlesicon_text: "Икона", modal_titlesname_text: "Име на сървъра", modal_titlestotal_text: "Oбщо:", modal_titlesglobal_text: "Cветовен:", modal_titleslocal_text: "Mестен:", modal_titlescopies_text: "Копия:", btn_ok_text: "Добре" }; case "ru": //russian return { modal_header_text: "Статистика emojis", modal_titlesicon_text: "Значок", modal_titlesname_text: "Имя сервера", modal_titlestotal_text: "Всего:", modal_titlesglobal_text: "Mировой:", modal_titleslocal_text: "Местный:", modal_titlescopies_text: "Копии:", btn_ok_text: "ОК" }; case "uk": //ukrainian return { modal_header_text: "Статистика емідій", modal_titlesicon_text: "Ікона", modal_titlesname_text: "Ім'я сервера", modal_titlestotal_text: "Всього:", modal_titlesglobal_text: "Cвітовий:", modal_titleslocal_text: "Місцевий:", modal_titlescopies_text: "Копії:", btn_ok_text: "Добре" }; case "ja": //japanese return { modal_header_text: "エモジスの統計", modal_titlesicon_text: "アイコン", modal_titlesname_text: "サーバーの名前", modal_titlestotal_text: "合計:", modal_titlesglobal_text: "グローバル:", modal_titleslocal_text: "地元:", modal_titlescopies_text: "コピー:", btn_ok_text: "はい" }; case "zh-TW": //chinese (traditional) return { modal_header_text: "表情統計", modal_titlesicon_text: "圖標", modal_titlesname_text: "服務器名稱", modal_titlestotal_text: "總:", modal_titlesglobal_text: "全球:", modal_titleslocal_text: "本地:", modal_titlescopies_text: "副本:", btn_ok_text: "好" }; case "ko": //korean return { modal_header_text: "그림 이모티콘의 통계", modal_titlesicon_text: "상", modal_titlesname_text: "서버 이름", modal_titlestotal_text: "합계:", modal_titlesglobal_text: "글로벌:", modal_titleslocal_text: "지방의:", modal_titlescopies_text: "사본:", btn_ok_text: "승인" }; default: //default: english return { modal_header_text: "Statistics of emojis", modal_titlesicon_text: "Icon", modal_titlesname_text: "Servername", modal_titlestotal_text: "Total:", modal_titlesglobal_text: "Global:", modal_titleslocal_text: "Local:", modal_titlescopies_text: "Copies:", btn_ok_text: "OK" }; } } }