From 893d1919eb1b2c8cbb4d973c5a90a62ab8888154 Mon Sep 17 00:00:00 2001 From: SHISEN Date: Tue, 7 Jul 2026 15:13:14 +0400 Subject: [PATCH 1/3] fix: selectors, added ActivityType.Watching --- websites/A/AnimeGO/iframe.ts | 1 + websites/A/AnimeGO/metadata.json | 4 +- websites/A/AnimeGO/presence.ts | 133 ++++++++++++++++--------------- 3 files changed, 72 insertions(+), 66 deletions(-) diff --git a/websites/A/AnimeGO/iframe.ts b/websites/A/AnimeGO/iframe.ts index 1b7e96a98079..2a33bcb928dd 100644 --- a/websites/A/AnimeGO/iframe.ts +++ b/websites/A/AnimeGO/iframe.ts @@ -8,6 +8,7 @@ iframe.on('UpdateData', async () => { const video = document.querySelector('video') if (video && !Number.isNaN(video.duration)) { iframe.send({ + exists: true, duration: video.duration, currentTime: video.currentTime, paused: video.paused, diff --git a/websites/A/AnimeGO/metadata.json b/websites/A/AnimeGO/metadata.json index b49006b750f6..0ba724cfe33a 100644 --- a/websites/A/AnimeGO/metadata.json +++ b/websites/A/AnimeGO/metadata.json @@ -2,7 +2,7 @@ "$schema": "https://schemas.premid.app/metadata/1.16", "apiVersion": 1, "author": { - "name": "SHISEN", + "name": "shisen", "id": "257151906038677504" }, "service": "AnimeGO", @@ -15,7 +15,7 @@ "animego.me" ], "regExp": "^https?[:][/][/]([a-z0-9]+[.])?animego([.][a-z]+)+[/]", - "version": "1.1.2", + "version": "1.2.0", "logo": "https://cdn.rcd.gg/PreMiD/websites/A/AnimeGO/assets/logo.jpg", "thumbnail": "https://cdn.rcd.gg/PreMiD/websites/A/AnimeGO/assets/thumbnail.png", "color": "#ff5c57", diff --git a/websites/A/AnimeGO/presence.ts b/websites/A/AnimeGO/presence.ts index 368f099844c8..153139e57017 100644 --- a/websites/A/AnimeGO/presence.ts +++ b/websites/A/AnimeGO/presence.ts @@ -1,4 +1,4 @@ -import { Assets, getTimestamps } from 'premid' +import { ActivityType, Assets, getTimestamps } from 'premid' const presence = new Presence({ clientId: '935597176426491924', @@ -6,18 +6,37 @@ const presence = new Presence({ async function getStrings() { return presence.getStrings({ - play: 'general.watchingVid', + play: 'general.watchingAnime', pause: 'general.paused', }) } +enum ActivityAssets { + Logo = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeGO/assets/logo.jpg', +} + let video = { + exists: false, duration: 0, currentTime: 0, paused: true, } let strings: Awaited> +function getCurrentTypeSpelling(typeContent?: string) { + switch (typeContent) { + case 'manga': + return 'манги' + case 'character': + case 'characters': + return 'персонажа' + case 'person': + return 'человека' + default: + return 'аниме' + } +} + presence.on( 'iFrameData', (data: unknown) => { @@ -34,86 +53,66 @@ presence.on('UpdateData', async () => { ]) const presenceData: PresenceData = { details: 'Где-то на сайте', - largeImageKey: 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeGO/assets/logo.jpg', + largeImageKey: ActivityAssets.Logo, smallImageText: 'AnimeGO', - } - const typeContent = document - .querySelector('meta[property=\'og:url\']') - ?.getAttribute('content') - ?.split('/')[3] - const typeCurrent = typeContent === 'anime' - ? 'аниме' - : typeContent === 'manga' - ? 'манги' - : typeContent === 'character' || typeContent === 'characters' - ? 'персонажа' - : 'человека' + } as PresenceData + const { pathname, href } = document.location + const currentType = getCurrentTypeSpelling(pathname.split('/')[1]) if (!strings) strings = await getStrings() - if (document.location.pathname === '/') { + if (pathname === '/') { presenceData.details = 'На главной странице' } else if ( - document.location.pathname === '/anime' - || document.location.pathname === '/manga' - || document.location.pathname === '/characters' - || /\/(?:anime|manga|characters)\/(?:season|genre|type|status|filter|studio|dubbing)\//.test(document.location.pathname) + pathname === '/anime' || + pathname === '/manga' || + pathname === '/characters' || + /\/(?:anime|manga|characters)\/(?:season|genre|type|status|filter|studio|dubbing)\//.test(pathname) ) { - presenceData.details = `В поиске ${typeCurrent}` - if (!privacy) { - presenceData.state = document.querySelector( - '.entity-title#anime-list-title h1', - )?.textContent ?? '' - } + presenceData.details = `В поиске ${currentType}` + presenceData.state = document.querySelector('.entity__title h1')?.textContent } else if ( - /\/(?:anime|manga|character|person)\//.test(document.location.pathname) + /\/(?:anime|manga|character|person)\//.test(pathname) ) { - const elementContent = typeContent === 'person' ? 'people' : typeContent - const titleContent = document.querySelector( - `.${elementContent}-title h1`, - )?.textContent ?? '' - const image = document - .querySelector( - `.${elementContent}-poster div:nth-child(2) img`, - ) - ?.srcset - ?.split(' ')[0] ?? '' - presenceData.details = `Смотрит страницу ${typeCurrent}` + const titleContent = document.querySelector('.entity__title h1')?.textContent ?? + document.querySelector('.person__title h1')?.textContent ?? '' + const image = document.querySelector(`.entity__poster img`)?.src ?? + document.querySelector(`.person__picture img`)?.src + + presenceData.details = `Смотрит страницу ${currentType}` + presenceData.state = titleContent + if (!privacy && logo && image) { + presenceData.largeImageKey = image + presenceData.smallImageKey = ActivityAssets.Logo + } if (!privacy) { - presenceData.state = titleContent - if (logo) { - presenceData.largeImageKey = image - presenceData.smallImageKey = 'https://cdn.rcd.gg/PreMiD/websites/A/AnimeGO/assets/logo.jpg' - } - if (buttons) { - presenceData.buttons = [ - { - label: 'Открыть страницу', - url: document - .querySelector('meta[property=\'og:url\']') - ?.getAttribute('content') ?? '', - }, - ] - } + presenceData.stateUrl = href + presenceData.largeImageUrl = href } + presenceData.buttons = [ + { + label: 'Открыть страницу', + url: href, + }, + ] - if (video.duration) { - const selected = document.querySelector( - 'select[name=\'series\']', - ) - const serie = `${selected?.options[selected?.selectedIndex]?.text} - ${ - document.querySelector( - '.episode-info-item:nth-child(2) span:nth-child(2)', - )?.textContent ?? '' - }` - presenceData.details = `Смотрит ${privacy ? typeCurrent : titleContent}` - presenceData.state = privacy ? '' : serie + if (video.exists) { + const selectEpisodes = document.querySelector('select[name=\'series\']') + const currentEpisodeTitle = document.querySelector('.episode-info__name .episode-info__value')?.textContent + const serie = `${selectEpisodes?.options[selectEpisodes?.selectedIndex]?.text}${currentEpisodeTitle ? ` - ${currentEpisodeTitle}` : ''}` + presenceData.details = privacy ? `Смотрит ${currentType}` : titleContent + presenceData.state = serie presenceData.smallImageKey = video.paused ? Assets.Pause : Assets.Play presenceData.smallImageText = video.paused ? strings.pause : strings.play + delete presenceData.stateUrl + if (!privacy) + presenceData.detailsUrl = href + if (time) { + presenceData.type = ActivityType.Watching if (video.paused) { delete presenceData.startTimestamp delete presenceData.endTimestamp @@ -125,5 +124,11 @@ presence.on('UpdateData', async () => { } } + if (privacy || !buttons) + delete presenceData.buttons + + if (privacy) + delete presenceData.state + presence.setActivity(presenceData) }) From c815b78d5ca3c48f4098671040735b4e8dceb8e1 Mon Sep 17 00:00:00 2001 From: SHISEN Date: Tue, 7 Jul 2026 15:24:48 +0400 Subject: [PATCH 2/3] chore: lint --- websites/A/AnimeGO/presence.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/websites/A/AnimeGO/presence.ts b/websites/A/AnimeGO/presence.ts index 153139e57017..0f7fd5e54c1b 100644 --- a/websites/A/AnimeGO/presence.ts +++ b/websites/A/AnimeGO/presence.ts @@ -66,10 +66,10 @@ presence.on('UpdateData', async () => { presenceData.details = 'На главной странице' } else if ( - pathname === '/anime' || - pathname === '/manga' || - pathname === '/characters' || - /\/(?:anime|manga|characters)\/(?:season|genre|type|status|filter|studio|dubbing)\//.test(pathname) + pathname === '/anime' + || pathname === '/manga' + || pathname === '/characters' + || /\/(?:anime|manga|characters)\/(?:season|genre|type|status|filter|studio|dubbing)\//.test(pathname) ) { presenceData.details = `В поиске ${currentType}` presenceData.state = document.querySelector('.entity__title h1')?.textContent @@ -77,10 +77,10 @@ presence.on('UpdateData', async () => { else if ( /\/(?:anime|manga|character|person)\//.test(pathname) ) { - const titleContent = document.querySelector('.entity__title h1')?.textContent ?? - document.querySelector('.person__title h1')?.textContent ?? '' - const image = document.querySelector(`.entity__poster img`)?.src ?? - document.querySelector(`.person__picture img`)?.src + const titleContent = document.querySelector('.entity__title h1')?.textContent + ?? document.querySelector('.person__title h1')?.textContent ?? '' + const image = document.querySelector(`.entity__poster img`)?.src + ?? document.querySelector(`.person__picture img`)?.src presenceData.details = `Смотрит страницу ${currentType}` presenceData.state = titleContent From f4a63c64d6cdfef29caf28df9501f8b3a02670aa Mon Sep 17 00:00:00 2001 From: SHISEN Date: Wed, 8 Jul 2026 04:25:28 +0400 Subject: [PATCH 3/3] Update presence.ts --- websites/A/AnimeGO/presence.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/websites/A/AnimeGO/presence.ts b/websites/A/AnimeGO/presence.ts index 0f7fd5e54c1b..543cd2d42d0e 100644 --- a/websites/A/AnimeGO/presence.ts +++ b/websites/A/AnimeGO/presence.ts @@ -55,7 +55,7 @@ presence.on('UpdateData', async () => { details: 'Где-то на сайте', largeImageKey: ActivityAssets.Logo, smallImageText: 'AnimeGO', - } as PresenceData + } const { pathname, href } = document.location const currentType = getCurrentTypeSpelling(pathname.split('/')[1]) @@ -112,7 +112,7 @@ presence.on('UpdateData', async () => { presenceData.detailsUrl = href if (time) { - presenceData.type = ActivityType.Watching + (presenceData as PresenceData).type = ActivityType.Watching if (video.paused) { delete presenceData.startTimestamp delete presenceData.endTimestamp