123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695 |
- const presence = new Presence({
- clientId: "684124119146692619",
- });
- // Timestamp
- function getTimeStamp() {
- return Math.floor(Date.now() / 1000);
- }
- // Variables
- let Routes: string[],
- Queries,
- DiscussionTitle: string,
- DiscussionAuthor: string,
- NewsTitle: string,
- PeopleName: string,
- TeamName: string,
- UserName: string,
- BookmarkType: string,
- BookmarkSize: string;
- presence.on("UpdateData", async () => {
- // Presence Data
- const presenceData: PresenceData = {
- largeImageKey:
- "https://cdn.rcd.gg/PreMiD/websites/M/Mangalib/assets/logo.png",
- };
- // Setup Routes & Query
- Routes = document.location.href
- .replace(document.location.search, "")
- .split("/")
- .splice(3);
- Queries = Object.fromEntries(
- document.location.search
- .slice(1)
- .split("&")
- .map((k, _, a) => {
- const item: string[] = k.replace(/\[(.*?)\]+/g, "").split("="),
- Keys = a
- .map(i => i.replace(/\[(.*?)\]+/g, "").split("="))
- .filter(i => i[0] === item[0]);
- if (Keys.length === 1) return item;
- else return [item[0], Keys.map(i => i[1])];
- })
- );
- // Website Pages
- switch (Routes[0]) {
- case "": {
- // Homepage
- presenceData.smallImageText = "reading";
- presenceData.smallImageKey = Assets.Search;
- presenceData.details = "Главная";
- presenceData.startTimestamp = 0;
- // Page Section
- if (Queries.section === "my-updates")
- presenceData.state = "Мои обновления";
- else presenceData.state = "Все обновления";
- break;
- }
- case "manga-list": {
- // List of mangas
- presenceData.smallImageText = "reading";
- presenceData.smallImageKey = Assets.Search;
- presenceData.details = "Каталог манги";
- if (!Array.isArray(Queries.types)) Queries.types = [Queries.types];
- // Search Types
- if (Queries.types && Queries.types.length === 1) {
- // Types size === 1
- switch (Queries.types[0]) {
- case "4":
- presenceData.state = "Ищет OEL-мангу";
- break;
- case "5":
- presenceData.state = "Ищет Манхву";
- break;
- case "6":
- presenceData.state = "Ищет Маньхуа";
- break;
- case "8":
- presenceData.state = "Ищет Румангу";
- break;
- case "9":
- presenceData.state = "Ищет Западный комикс";
- break;
- default:
- presenceData.state = "Ищет Мангу";
- break;
- }
- } else if (Queries.types && Queries.types.length > 1) {
- // Types size > 1
- const mangas: string[] = [];
- for (const item in Queries.types.sort()) {
- switch (item) {
- case "4":
- mangas.push("OEL-мангу");
- break;
- case "5":
- mangas.push("Манхву");
- break;
- case "6":
- mangas.push("Маньхуа");
- break;
- case "8":
- mangas.push("Румангу");
- break;
- case "9":
- mangas.push("Западный комикс");
- break;
- default:
- mangas.push("Мангу");
- break;
- }
- }
- presenceData.state = `Ищет: ${mangas.join(", ")}`;
- } else presenceData.state = "Ищет Мангу";
- break;
- }
- case "forum": {
- // Forum page
- presenceData.details = "Форум";
- // Subpages of forums
- switch (Routes[1]) {
- case "": {
- // Main forum page
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- if (Queries.subscription) presenceData.state = "Мои подписки";
- if (Queries.user_id) presenceData.state = "Мои темы";
- switch (Queries.category) {
- case "all":
- presenceData.state = "Все категории";
- break;
- case "1":
- presenceData.state = "Баги и проблемы";
- break;
- case "2":
- presenceData.state = "Предложения для сайта";
- break;
- case "3":
- presenceData.state = "Поиск тайтлов";
- break;
- case "4":
- presenceData.state = "Поиск кадров";
- break;
- case "5":
- presenceData.state = "Обсуждение Манги";
- break;
- case "6":
- presenceData.state = "Обсуждение Аниме";
- break;
- case "7":
- presenceData.state = "Обсуждение Ранобэ";
- break;
- case "8":
- presenceData.state = "Видеоигры";
- break;
- case "9":
- presenceData.state = "Переводчикам";
- break;
- case "10":
- presenceData.state = "Как переводить мангу";
- break;
- case "11":
- presenceData.state = "Как рисовать мангу";
- break;
- case "12":
- presenceData.state = "Общение";
- break;
- case "13":
- presenceData.state = "Другое";
- break;
- }
- break;
- }
- case "discussion-create": {
- // Discussion create
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.state = "Создает новую тему";
- break;
- }
- case "discussion": {
- // Discussion page
- if (Routes[2] && !Routes[3]) {
- // Opened discussion
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- const titleElement = document.querySelector(
- ".discussion .discussion__title"
- ),
- authorElement = document.querySelector(
- ".discussion .discussion-creator__username"
- );
- DiscussionTitle = titleElement && titleElement.textContent;
- DiscussionAuthor = authorElement && authorElement.textContent;
- if (DiscussionAuthor && DiscussionTitle)
- presenceData.state = `Тема: ${DiscussionTitle}| Автор: ${DiscussionAuthor}`;
- } else if (Routes[3] && Routes[3] === "edit") {
- // Editor discussion
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.state = DiscussionTitle
- ? `Редактирует тему: ${DiscussionTitle}`
- : "Редактирует тему";
- }
- break;
- }
- // No default
- }
- break;
- }
- case "faq": {
- // Faq page
- if (Routes[1] === "article") {
- // Faq Editor
- presenceData.details = "Faq";
- presenceData.smallImageText = "Редактирует";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.state = `Редактирует: ${Queries.article} вопрос`;
- } else {
- // Faq Sections
- presenceData.details = "Faq";
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- switch (Queries.section) {
- case "1":
- presenceData.state = "Манга";
- break;
- case "2":
- presenceData.state = "Общие вопросы";
- break;
- case "3":
- presenceData.state = "Профиль пользователя";
- break;
- case "4":
- presenceData.state = "Чтение манги";
- break;
- case "5":
- presenceData.state = "Комментарии";
- break;
- case "6":
- presenceData.state = "Мини-чат";
- break;
- case "7":
- presenceData.state = "Решение проблем";
- break;
- case "8":
- presenceData.state = "Правила";
- break;
- case "9":
- presenceData.state = "Форум";
- break;
- }
- }
- break;
- }
- case "news": {
- // News page
- presenceData.details = "Новости";
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- if (Routes[1]) {
- // Opened News
- const titleElement = document.querySelector(".news__title");
- NewsTitle = titleElement && titleElement.textContent;
- if (NewsTitle) presenceData.state = NewsTitle;
- } else {
- // News List
- presenceData.details = "Новости";
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- presenceData.state = "Список новостей";
- }
- break;
- }
- case "notification": {
- // Notification list
- presenceData.details = "Уведомления";
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- switch (Queries.type) {
- case "chapter":
- presenceData.state = "Главы";
- break;
- case "comments":
- presenceData.state = "Комментарии";
- break;
- case "message":
- presenceData.state = "Сообщения";
- break;
- case "friend":
- presenceData.state = "Заявки в друзья";
- break;
- case "other":
- presenceData.state = "Другое";
- break;
- case "all":
- presenceData.state = "Все";
- break;
- }
- break;
- }
- case "contact-us": {
- // Contact page
- presenceData.details = "Контакты";
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.state = "info@mangalib.me";
- break;
- }
- case "messages": {
- // Messages page
- presenceData.details = "Личные сообщения";
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.startTimestamp = getTimeStamp();
- break;
- }
- case "people": {
- // Authors (Moderation) page
- if (Routes[1] === "create") {
- presenceData.details = "Добавляет автора";
- presenceData.smallImageText = "Добавляет автора";
- presenceData.smallImageKey = Assets.Writing;
- PeopleName = document.querySelector("#name").textContent;
- if (PeopleName.length > 1) presenceData.state = PeopleName;
- else presenceData.state = "Имя автора не задано";
- }
- break;
- }
- case "team": {
- // Team page
- if (Routes[1] === "create") {
- // Create New Team
- presenceData.details = "Добавляет команду";
- presenceData.smallImageText = "Добавляет команду";
- presenceData.smallImageKey = Assets.Writing;
- TeamName = document.querySelector("#name").textContent;
- if (TeamName.length > 1) presenceData.state = TeamName;
- else presenceData.state = "Имя команды не задано";
- } else if (!Routes[2]) {
- presenceData.details = "Команда перевода";
- presenceData.smallImageText = "Смотрит переводчика";
- presenceData.smallImageKey = Assets.Reading;
- const title = document.querySelector(".team-profile__name");
- TeamName = title && title.textContent.replace("редактировать", "");
- if (TeamName) presenceData.state = TeamName;
- } else if (Routes[2] === "edit") {
- presenceData.details = "Команда перевода";
- presenceData.smallImageText = "Редактирует переводчика";
- presenceData.smallImageKey = Assets.Writing;
- switch (Queries.section) {
- case "info":
- presenceData.state = "Редактирует информацию команды";
- break;
- case "users":
- presenceData.state = "Редактирует участников команды";
- break;
- }
- }
- break;
- }
- case "moderation": {
- // Moderation page
- presenceData.details = "Модерация";
- presenceData.smallImageText = "Управляет сайтом";
- presenceData.smallImageKey = Assets.Reading;
- if (!Routes[1]) presenceData.state = "Модерация глав";
- else {
- switch (Routes[1]) {
- case "manga": {
- if (Routes[2] === "rejected")
- presenceData.state = "Отклоненные манги";
- else presenceData.state = "Модерация манги";
- break;
- }
- case "manga-edit": {
- presenceData.state = "Изменения манги";
- break;
- }
- case "author": {
- presenceData.state = "Новые Авторы";
- break;
- }
- case "publisher": {
- presenceData.state = "Новые Издательства";
- break;
- }
- case "comments": {
- presenceData.state = "Жалобы на комментарии";
- break;
- }
- case "forum-posts": {
- presenceData.state = "Жалобы на форуме";
- break;
- }
- case "comments-list": {
- if (Routes[2] === "all") presenceData.state = "Список комментариев";
- else if (Routes[2] === "sticky")
- presenceData.state = "Закрепленные комментарии";
- break;
- }
- case "ban-list": {
- presenceData.state = "Баны";
- break;
- }
- case "other":
- {
- presenceData.state = "Другое";
- // No default
- }
- break;
- }
- }
- break;
- }
- case "user": {
- // User page
- presenceData.smallImageText = "Смотрит профиль пользователя";
- presenceData.smallImageKey = Assets.Reading;
- const username = document.querySelector(".profile-user__username span");
- UserName = username && username.textContent;
- if (UserName) presenceData.details = `Профиль:${UserName}`;
- if (Routes[1] === "content") {
- presenceData.details = "Мои добавления";
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.startTimestamp = 0;
- if (!Routes[2]) presenceData.state = "Добавленные тайтлы";
- else {
- switch (Routes[2]) {
- case "moderation": {
- presenceData.state = "Тайтлы на модерации";
- break;
- }
- case "rejected": {
- presenceData.state = "Тайтлы не прошедшие модерацию";
- break;
- }
- case "chapters":
- {
- presenceData.state = "Главы на модерации";
- // No default
- }
- break;
- }
- }
- } else if (Routes[1] === "edit") {
- presenceData.details = "Мои настройки";
- presenceData.smallImageText = "Настраивает";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.startTimestamp = 0;
- switch (Queries.section) {
- case "info":
- presenceData.state = "Информация";
- break;
- case "site-settings":
- presenceData.state = "Настройки сайта";
- break;
- case "notifications":
- presenceData.state = "Уведомления";
- break;
- case "password":
- presenceData.state = "Безопасность";
- break;
- }
- } else if (!Routes[2]) {
- // Main user page
- const size = document.querySelector(
- ".bookmark-menu .menu__item.is-active .bookmark-menu__label"
- ),
- title = document.querySelector(
- ".bookmark-menu .menu__item.is-active .bookmark-menu__name"
- );
- BookmarkSize = size && size.textContent;
- BookmarkType =
- title &&
- title.textContent.charAt(0).toUpperCase() +
- title.textContent.slice(1);
- presenceData.details = `Закладки ${UserName}`;
- presenceData.state = `${BookmarkType.trim()}: ${BookmarkSize}`;
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- presenceData.startTimestamp = 0;
- } else {
- switch (Routes[2]) {
- case "comment": {
- presenceData.details = `Профиль: ${UserName}`;
- let commentType;
- switch (Queries.commentType) {
- case "manga": {
- commentType = "Комментарии к манге";
- break;
- }
- case "chapter": {
- commentType = "Комментарии к главам";
- break;
- }
- case "post": {
- commentType = "Комментарии к новостям";
- break;
- }
- default:
- commentType = "Все комментарии";
- }
- presenceData.state = commentType;
- break;
- }
- case "following": {
- presenceData.details = `Профиль: ${UserName}`;
- presenceData.state = "Список друзей";
- break;
- }
- case "mutual-friends": {
- presenceData.details = `Профиль: ${UserName}`;
- presenceData.state = "Общие друзья";
- break;
- }
- case "ignore": {
- presenceData.details = `Профиль: ${UserName}`;
- presenceData.state = "Игнор-лист";
- break;
- }
- case "ban": {
- presenceData.details = "Мой профиль";
- presenceData.state = "История банов";
- break;
- }
- // No default
- }
- }
- break;
- }
- case "manga": {
- // Manga page
- if (Routes[1] === "create") {
- // create new manga
- presenceData.details = "Добавляет мангу";
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- const title = <HTMLInputElement>document.querySelector("#rus_name");
- if (title.value.length > 1) presenceData.state = title.value;
- else presenceData.state = "Имя тайтла не задано";
- } else {
- switch (Routes[2]) {
- case "edit": {
- // edit
- presenceData.smallImageText = "Редактирует";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.details = document.querySelector(
- ".section__header .breadcrumb a"
- ).textContent;
- switch (Queries.section) {
- case "media-edit":
- presenceData.state = "Редактирование";
- break;
- case "changes":
- presenceData.state = "Список изменений";
- break;
- case "related-items":
- presenceData.state = "Связанные тайтлы";
- break;
- }
- break;
- }
- case "bulk-create": {
- // bulk create
- presenceData.details = "Добавляет главы";
- presenceData.smallImageText = "Добавляет";
- presenceData.smallImageKey = Assets.Uploading;
- presenceData.state = `Манга: ${
- document.querySelector(".section__header .breadcrumb a")
- .textContent
- }`;
- break;
- }
- case "add-chapter": {
- // add chapter
- presenceData.details = "Добавляет главу";
- presenceData.smallImageText = "Добавляет";
- presenceData.smallImageKey = Assets.Uploading;
- presenceData.state = `Манга: ${
- document.querySelector(".section__header .breadcrumb a")
- .textContent
- }`;
- break;
- }
- default: {
- presenceData.details = "Редактирует главу";
- presenceData.smallImageText = "Пишет";
- presenceData.smallImageKey = Assets.Writing;
- presenceData.state = `Манга: ${
- document.querySelector(".section__header .breadcrumb a")
- .textContent
- }`;
- }
- }
- }
- break;
- }
- default:
- if (document.querySelector(".reader")) {
- presenceData.details = "Читает тайтл";
- presenceData.state = document.title.split(" ").slice(2, -4).join(" ");
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- presenceData.startTimestamp = getTimeStamp();
- } else {
- presenceData.details = "Смотрит тайтл";
- presenceData.state = document.title
- .split("/")[0]
- .split(" ")
- .slice(1)
- .join(" ");
- presenceData.smallImageText = "Читает";
- presenceData.smallImageKey = Assets.Reading;
- }
- }
- presence.setActivity(presenceData, true);
- });
|