/** * @name EmojiStatistics * @author DevilBro * @authorId 278543574059057154 * @version 3.0.2 * @description Shows you an Overview of Emojis and Emoji Servers * @invite Jx3TjNS * @donate https://www.paypal.me/MircoWittrien * @patreon https://www.patreon.com/MircoWittrien * @website https://mwittrien.github.io/ * @source https://github.com/mwittrien/BetterDiscordAddons/tree/master/Plugins/EmojiStatistics/ * @updateUrl https://mwittrien.github.io/BetterDiscordAddons/Plugins/EmojiStatistics/EmojiStatistics.plugin.js */ module.exports = (_ => { const changeLog = { }; return !window.BDFDB_Global || (!window.BDFDB_Global.loaded && !window.BDFDB_Global.started) ? class { constructor (meta) {for (let key in meta) this[key] = meta[key];} getName () {return this.name;} getAuthor () {return this.author;} getVersion () {return this.version;} getDescription () {return `The Library Plugin needed for ${this.name} is missing. Open the Plugin Settings to download it. \n\n${this.description}`;} downloadLibrary () { BdApi.Net.fetch("https://mwittrien.github.io/BetterDiscordAddons/Library/0BDFDB.plugin.js").then(r => { if (!r || r.status != 200) throw new Error(); else return r.text(); }).then(b => { if (!b) throw new Error(); else return require("fs").writeFile(require("path").join(BdApi.Plugins.folder, "0BDFDB.plugin.js"), b, _ => BdApi.showToast("Finished downloading BDFDB Library", {type: "success"})); }).catch(error => { BdApi.alert("Error", "Could not download BDFDB Library Plugin. Try again later or download it manually from GitHub: https://mwittrien.github.io/downloader/?library"); }); } load () { if (!window.BDFDB_Global || !Array.isArray(window.BDFDB_Global.pluginQueue)) window.BDFDB_Global = Object.assign({}, window.BDFDB_Global, {pluginQueue: []}); if (!window.BDFDB_Global.downloadModal) { window.BDFDB_Global.downloadModal = true; BdApi.showConfirmationModal("Library Missing", `The Library Plugin needed for ${this.name} is missing. Please click "Download Now" to install it.`, { confirmText: "Download Now", cancelText: "Cancel", onCancel: _ => {delete window.BDFDB_Global.downloadModal;}, onConfirm: _ => { delete window.BDFDB_Global.downloadModal; this.downloadLibrary(); } }); } if (!window.BDFDB_Global.pluginQueue.includes(this.name)) window.BDFDB_Global.pluginQueue.push(this.name); } start () {this.load();} stop () {} getSettingsPanel () { let template = document.createElement("template"); template.innerHTML = `
The Library Plugin needed for ${this.name} is missing.\nPlease click Download Now to install it.
`; template.content.firstElementChild.querySelector("a").addEventListener("click", this.downloadLibrary); return template.content.firstElementChild; } } : (([Plugin, BDFDB]) => { var emojiReplicaList, EmojiPicker; return class EmojiStatistics extends Plugin { onLoad () { this.modulePatches = { after: [ "EmojiPicker", "EmojiPickerHeader" ] }; this.css = ` .${this.name}-table ${BDFDB.dotCN._emojistatisticsiconcell} { justify-content: center; width: 48px; padding: 0; } .${this.name}-table ${BDFDB.dotCN._emojistatisticsnamecell} { width: 300px; } .${this.name}-table ${BDFDB.dotCN._emojistatisticsamountcell} { width: 120px; } ${BDFDB.dotCNS.emojipicker + BDFDB.dotCN.emojipickerheader} { grid-template-columns: auto 24px 24px; } ${BDFDB.dotCNS.emojipicker + BDFDB.dotCN._emojistatisticsstatisticsbutton} { width: 24px; height: 24px; margin-right: 12px; grid-column: 2/3; } ${BDFDB.dotCNS.emojipicker + BDFDB.dotCN.emojipickerdiversityselector} { grid-column: 3/4; } `; } onStart () { BDFDB.PatchUtils.forceAllUpdates(this); } onStop () { BDFDB.PatchUtils.forceAllUpdates(this); } processEmojiPicker (e) { EmojiPicker = e.instance; } processEmojiPickerHeader (e) { this.loadEmojiList(); e.returnvalue.props.children.splice(e.returnvalue.props.children.length - 2, 0, BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TooltipContainer, { text: this.labels.modal_header, children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Clickable, { className: BDFDB.disCN._emojistatisticsstatisticsbutton, children: BDFDB.ReactUtils.createElement("div", { className: BDFDB.disCN.emojipickerdiversityemojiitemimage, style: {backgroundImage: `url(${BDFDB.LibraryModules.EmojiStateUtils.getURL(BDFDB.LibraryModules.EmojiUtils.convertNameToSurrogate("mag_right"))})`} }) }), onClick: _ => { this.showEmojiInformationModal(); if (EmojiPicker && EmojiPicker.props.closePopout) EmojiPicker.props.closePopout(); } })); } loadEmojiList () { emojiReplicaList = {}; let guilds = BDFDB.LibraryStores.GuildStore.getGuilds(); for (let id in guilds) for (let emoji of BDFDB.LibraryStores.EmojiStore.getGuildEmoji(id)) { if (emoji.managed) emojiReplicaList[emoji.name] = emojiReplicaList[emoji.name] != undefined; } } showEmojiInformationModal () { BDFDB.ModalUtils.open(this, { size: "LARGE", header: this.labels.modal_header, children: BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.Table, { className: `${this.name}-table`, stickyHeader: true, sortData: false, columns: [ {key: "icon", cell: "icon", sortKey: "index"}, {key: "name", cell: "name"}, {key: "total", cell: "amount", reverse: true}, {key: "global", cell: "amount", reverse: true}, {key: "local", cell: "amount", reverse: true}, {key: "copies", cell: "amount", reverse: true} ].map(data => ({ key: data.sortKey || data.key, sort: true, reverse: data.reverse, cellClassName: BDFDB.disCN[`_emojistatistics${data.cell}cell`], renderHeader: _ => this.labels[`modal_titles${data.key}`], render: item => { if (data.key == "icon") return BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.GuildIcon, { guild: item.guild, size: BDFDB.LibraryComponents.GuildIcon.Sizes.MEDIUM }); else if (data.key == "name") return BDFDB.ReactUtils.createElement(BDFDB.LibraryComponents.TextScroller, { children: item.guild.name }); else return item[data.key]; } })), data: BDFDB.LibraryStores.SortedGuildStore.getFlattenedGuildIds().map(BDFDB.LibraryStores.GuildStore.getGuild).map((guild, i) => { let itemData = { index: i, guild: guild, global: 0, local: 0, copies: 0 } for (let emoji of BDFDB.LibraryStores.EmojiStore.getGuildEmoji(guild.id)) { if (emoji.managed) { itemData.global++; if (emojiReplicaList[emoji.name]) itemData.copies++; } else itemData.local++; } itemData.total = itemData.global + itemData.local; return itemData; }) }) }); } setLabelsByLanguage () { switch (BDFDB.LanguageUtils.getLanguage().id) { case "bg": // Bulgarian return { modal_header: "Статистика на емотикони", modal_titlescopies: "Копия", modal_titlesglobal: "Глобален", modal_titlesicon: "Икона", modal_titleslocal: "Местен", modal_titlesname: "Име на сървъра", modal_titlestotal: "Обща сума" }; case "da": // Danish return { modal_header: "Statistik over emojis", modal_titlescopies: "Kopier", modal_titlesglobal: "Global", modal_titlesicon: "Ikon", modal_titleslocal: "Lokal", modal_titlesname: "Server navn", modal_titlestotal: "Total" }; case "de": // German return { modal_header: "Emoji Statistiken", modal_titlescopies: "Kopien", modal_titlesglobal: "Global", modal_titlesicon: "Symbol", modal_titleslocal: "Lokal", modal_titlesname: "Servername", modal_titlestotal: "Gesamt" }; case "el": // Greek return { modal_header: "Στατιστικά στοιχεία emoji", modal_titlescopies: "Αντίγραφα", modal_titlesglobal: "Παγκόσμια", modal_titlesicon: "Εικόνισμα", modal_titleslocal: "Τοπικός", modal_titlesname: "Ονομα διακομιστή", modal_titlestotal: "Σύνολο" }; case "es": // Spanish return { modal_header: "Estadísticas de emojis", modal_titlescopies: "Copias", modal_titlesglobal: "Global", modal_titlesicon: "Icono", modal_titleslocal: "Local", modal_titlesname: "Nombre del servidor", modal_titlestotal: "Total" }; case "fi": // Finnish return { modal_header: "Emojien tilastot", modal_titlescopies: "Kopiot", modal_titlesglobal: "Maailmanlaajuinen", modal_titlesicon: "Kuvake", modal_titleslocal: "Paikallinen", modal_titlesname: "Palvelimen nimi", modal_titlestotal: "Kaikki yhteensä" }; case "fr": // French return { modal_header: "Statistiques des emojis", modal_titlescopies: "Copies", modal_titlesglobal: "Global", modal_titlesicon: "Icône", modal_titleslocal: "Local", modal_titlesname: "Nom du serveur", modal_titlestotal: "Total" }; case "hr": // Croatian return { modal_header: "Statistika emojija", modal_titlescopies: "Kopije", modal_titlesglobal: "Globalno", modal_titlesicon: "Ikona", modal_titleslocal: "Lokalno", modal_titlesname: "Ime poslužitelja", modal_titlestotal: "Ukupno" }; case "hu": // Hungarian return { modal_header: "A hangulatjelek statisztikája", modal_titlescopies: "Másolatok", modal_titlesglobal: "Globális", modal_titlesicon: "Ikon", modal_titleslocal: "Helyi", modal_titlesname: "Szerver név", modal_titlestotal: "Teljes" }; case "it": // Italian return { modal_header: "Statistiche di emoji", modal_titlescopies: "Copie", modal_titlesglobal: "Globale", modal_titlesicon: "Icona", modal_titleslocal: "Locale", modal_titlesname: "Nome del server", modal_titlestotal: "Totale" }; case "ja": // Japanese return { modal_header: "絵文字の統計", modal_titlescopies: "コピー", modal_titlesglobal: "グローバル", modal_titlesicon: "アイコン", modal_titleslocal: "地元", modal_titlesname: "サーバーの名前", modal_titlestotal: "合計" }; case "ko": // Korean return { modal_header: "이모티콘 통계", modal_titlescopies: "사본", modal_titlesglobal: "글로벌", modal_titlesicon: "상", modal_titleslocal: "현지", modal_titlesname: "서버 이름", modal_titlestotal: "합계" }; case "lt": // Lithuanian return { modal_header: "Emoji statistika", modal_titlescopies: "Kopijos", modal_titlesglobal: "Visuotinis", modal_titlesicon: "Piktograma", modal_titleslocal: "Vietinis", modal_titlesname: "Serverio pavadinimas", modal_titlestotal: "Iš viso" }; case "nl": // Dutch return { modal_header: "Statistieken van emoji's", modal_titlescopies: "Kopieën", modal_titlesglobal: "Globaal", modal_titlesicon: "Icoon", modal_titleslocal: "Lokaal", modal_titlesname: "Server naam", modal_titlestotal: "Totaal" }; case "no": // Norwegian return { modal_header: "Statistikk over emoji", modal_titlescopies: "Kopier", modal_titlesglobal: "Global", modal_titlesicon: "Ikon", modal_titleslocal: "Lokalt", modal_titlesname: "Server navn", modal_titlestotal: "Total" }; case "pl": // Polish return { modal_header: "Statystyki emotikonów", modal_titlescopies: "Kopie", modal_titlesglobal: "Światowy", modal_titlesicon: "Ikona", modal_titleslocal: "Lokalny", modal_titlesname: "Nazwa serwera", modal_titlestotal: "Całkowity" }; case "pt-BR": // Portuguese (Brazil) return { modal_header: "Estatísticas de emojis", modal_titlescopies: "Cópias", modal_titlesglobal: "Global", modal_titlesicon: "Ícone", modal_titleslocal: "Local", modal_titlesname: "Nome do servidor", modal_titlestotal: "Total" }; case "ro": // Romanian return { modal_header: "Statistici ale emoji-urilor", modal_titlescopies: "Copii", modal_titlesglobal: "Global", modal_titlesicon: "Pictogramă", modal_titleslocal: "Local", modal_titlesname: "Numele serverului", modal_titlestotal: "Total" }; case "ru": // Russian return { modal_header: "Статистика смайлов", modal_titlescopies: "Копии", modal_titlesglobal: "Глобальный", modal_titlesicon: "Икона", modal_titleslocal: "Местный", modal_titlesname: "Название сервера", modal_titlestotal: "Всего" }; case "sv": // Swedish return { modal_header: "Statistik för emojis", modal_titlescopies: "Kopior", modal_titlesglobal: "Global", modal_titlesicon: "Ikon", modal_titleslocal: "Lokal", modal_titlesname: "Server namn", modal_titlestotal: "Total" }; case "th": // Thai return { modal_header: "สถิติของอิโมจิ", modal_titlescopies: "สำเนา", modal_titlesglobal: "ทั่วโลก", modal_titlesicon: "ไอคอน", modal_titleslocal: "ท้องถิ่น", modal_titlesname: "ชื่อเซิร์ฟเวอร์", modal_titlestotal: "รวม" }; case "tr": // Turkish return { modal_header: "Emojilerin istatistikleri", modal_titlescopies: "Kopya sayısı", modal_titlesglobal: "Küresel", modal_titlesicon: "Simge", modal_titleslocal: "Yerel", modal_titlesname: "Sunucu adı", modal_titlestotal: "Toplam" }; case "uk": // Ukrainian return { modal_header: "Статистика смайликів", modal_titlescopies: "Копії", modal_titlesglobal: "Глобальний", modal_titlesicon: "Піктограма", modal_titleslocal: "Місцеві", modal_titlesname: "Ім'я сервера", modal_titlestotal: "Разом" }; case "vi": // Vietnamese return { modal_header: "Thống kê biểu tượng cảm xúc", modal_titlescopies: "Bản sao", modal_titlesglobal: "Toàn cầu", modal_titlesicon: "Biểu tượng", modal_titleslocal: "Địa phương", modal_titlesname: "Tên máy chủ", modal_titlestotal: "Toàn bộ" }; case "zh-CN": // Chinese (China) return { modal_header: "表情符号统计", modal_titlescopies: "数量", modal_titlesglobal: "全球", modal_titlesicon: "图标", modal_titleslocal: "本地", modal_titlesname: "服务器名称", modal_titlestotal: "总计" }; case "zh-TW": // Chinese (Taiwan) return { modal_header: "表情符號統計", modal_titlescopies: "數量", modal_titlesglobal: "全球", modal_titlesicon: "圖示", modal_titleslocal: "本地", modal_titlesname: "伺服器名稱", modal_titlestotal: "總計" }; default: // English return { modal_header: "Emoji Statistics", modal_titlescopies: "Copies", modal_titlesglobal: "Global", modal_titlesicon: "Icon", modal_titleslocal: "Local", modal_titlesname: "Server Name", modal_titlestotal: "Total" }; } } }; })(window.BDFDB_Global.PluginUtils.buildPlugin(changeLog)); })();