BetterDiscordAddons/Plugins/EmojiStatistics/EmojiStatistics.plugin.js

471 lines
17 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @name EmojiStatistics
* @author DevilBro
* @authorId 278543574059057154
* @version 3.0.3
* @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 = `<div style="color: var(--header-primary); font-size: 16px; font-weight: 300; white-space: pre; line-height: 22px;">The Library Plugin needed for ${this.name} is missing.\nPlease click <a style="font-weight: 500;">Download Now</a> to install it.</div>`;
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.props.children.splice(e.returnvalue.props.children.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));
})();