Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions websites/A/AnimeGO/iframe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ iframe.on('UpdateData', async () => {
const video = document.querySelector<HTMLVideoElement>('video')
if (video && !Number.isNaN(video.duration)) {
iframe.send({
exists: true,
duration: video.duration,
currentTime: video.currentTime,
paused: video.paused,
Expand Down
4 changes: 2 additions & 2 deletions websites/A/AnimeGO/metadata.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"$schema": "https://schemas.premid.app/metadata/1.16",
"apiVersion": 1,
"author": {
"name": "SHISEN",
"name": "shisen",
"id": "257151906038677504"
},
"service": "AnimeGO",
Expand All @@ -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",
Expand Down
131 changes: 68 additions & 63 deletions websites/A/AnimeGO/presence.ts
Original file line number Diff line number Diff line change
@@ -1,23 +1,42 @@
import { Assets, getTimestamps } from 'premid'
import { ActivityType, Assets, getTimestamps } from 'premid'

const presence = new Presence({
clientId: '935597176426491924',
})

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<ReturnType<typeof getStrings>>

function getCurrentTypeSpelling(typeContent?: string) {
switch (typeContent) {
case 'manga':
return 'манги'
case 'character':
case 'characters':
return 'персонажа'
case 'person':
return 'человека'
default:
return 'аниме'
}
}

presence.on(
'iFrameData',
(data: unknown) => {
Expand All @@ -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'
? 'персонажа'
: 'человека'
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<HTMLImageElement>(
`.${elementContent}-poster div:nth-child(2) img`,
)
?.srcset
?.split(' ')[0] ?? ''
presenceData.details = `Смотрит страницу ${typeCurrent}`
const titleContent = document.querySelector<HTMLHeadElement>('.entity__title h1')?.textContent
?? document.querySelector<HTMLHeadElement>('.person__title h1')?.textContent ?? ''
const image = document.querySelector<HTMLImageElement>(`.entity__poster img`)?.src
?? document.querySelector<HTMLImageElement>(`.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<HTMLSelectElement>(
'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<HTMLSelectElement>('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 as PresenceData).type = ActivityType.Watching
if (video.paused) {
delete presenceData.startTimestamp
delete presenceData.endTimestamp
Expand All @@ -125,5 +124,11 @@ presence.on('UpdateData', async () => {
}
}

if (privacy || !buttons)
delete presenceData.buttons

if (privacy)
delete presenceData.state

presence.setActivity(presenceData)
})
Loading