1- import { Assets } from 'premid'
1+ import { ActivityType , Assets , getTimestampsFromMedia , StatusDisplayType } from 'premid'
22
33const presence = new Presence ( {
44 clientId : '611012705306017792' ,
@@ -9,28 +9,101 @@ const strings = presence.getStrings({
99} )
1010
1111presence . on ( 'UpdateData' , async ( ) => {
12+ const { pathname } = location
13+ const presenceData : PresenceData = {
14+ largeImageKey : 'https://cdn.rcd.gg/PreMiD/websites/D/d%E3%82%A2%E3%83%8B%E3%83%A1%E3%82%B9%E3%83%88%E3%82%A2/assets/logo.png' ,
15+ }
16+
1217 if (
13- location . pathname . startsWith ( '/animestore/sc_d_pc' )
18+ pathname . startsWith ( '/animestore/sc_d_pc' )
1419 && document . querySelector ( '#video' )
1520 ) {
1621 const video = document . querySelector < HTMLVideoElement > ( '#video' )
1722 const isPlaying = video && ! video . paused
18- const presenceData : PresenceData = {
19- details : `${ document . querySelector ( '.backInfoTxt1' ) ?. textContent } - ${
20- document . querySelector ( '.backInfoTxt2' ) ?. textContent
21- } `,
22- state : document . querySelector ( '.backInfoTxt3' ) ?. textContent ,
23- largeImageKey : 'https://cdn.rcd.gg/PreMiD/websites/D/d%E3%82%A2%E3%83%8B%E3%83%A1%E3%82%B9%E3%83%88%E3%82%A2/assets/logo.png' ,
24- smallImageKey : isPlaying ? Assets . Play : Assets . Pause ,
25- smallImageText : isPlaying
26- ? ( await strings ) . play
27- : ( await strings ) . pause ,
28- startTimestamp : Math . floor ( Date . now ( ) / 1000 ) - Math . floor ( video ?. currentTime ?? 0 ) ,
23+ const title = document . querySelector ( '.pauseInfoTxt1' ) ?. textContent
24+ const epNum = document . querySelector ( '.pauseInfoTxt2' ) ?. textContent
25+ const epTitle = document . querySelector ( '.pauseInfoTxt3' ) ?. textContent
26+
27+ presenceData . details = title
28+ presenceData . state = `${ epNum } / ${ epTitle } `
29+ presenceData . largeImageText = `${ title } / ${ epNum } - ${ epTitle } ` as any
30+
31+ const isThumbnailEnabled = await presence . getSetting < boolean > ( 'thumbnail' )
32+
33+ const thumbElement = document . querySelector < HTMLElement > ( '#backThumb' )
34+ const bgImage = thumbElement ?. style . backgroundImage
35+ if ( bgImage && isThumbnailEnabled ) {
36+ const match = bgImage . match ( / u r l \( [ " ' ] ? ( [ ^ " ' ] * ) [ " ' ] ? \) / )
37+ if ( match && match [ 1 ] )
38+ presenceData . largeImageKey = match [ 1 ]
39+ }
40+
41+ const partId = new URLSearchParams ( location . search ) . get ( 'partId' )
42+ if ( partId ) {
43+ const workId = partId . slice ( 0 , 5 )
44+ presenceData . detailsUrl = `https://animestore.docomo.ne.jp/animestore/ci_pc?workId=${ workId } `
45+ presenceData . stateUrl = `https://animestore.docomo.ne.jp/animestore/ci_pc?workId=${ workId } &partId=${ partId } `
46+ presenceData . largeImageUrl = presenceData . stateUrl
2947 }
3048
31- if ( ! isPlaying )
32- delete presenceData . startTimestamp
49+ presenceData . smallImageKey = isPlaying ? Assets . Play : Assets . Pause
50+
51+ presenceData . smallImageText = isPlaying
52+ ? ( await strings ) . play
53+ : ( await strings ) . pause
54+
55+ presenceData . type = ActivityType . Watching as any
56+ presenceData . statusDisplayType = StatusDisplayType . Details
57+
58+ if ( isPlaying ) {
59+ const [ startTimestamp , endTimestamp ] = getTimestampsFromMedia ( video )
60+ presenceData . startTimestamp = startTimestamp
61+ presenceData . endTimestamp = endTimestamp
62+ }
63+
64+ presence . setActivity ( presenceData )
65+ }
66+ else if ( pathname === '/animestore/tp_pc' ) {
67+ presenceData . details = 'ホーム'
68+ presence . setActivity ( presenceData )
69+ }
70+ else if ( pathname === '/animestore/ci_pc' ) {
71+ const params = new URLSearchParams ( location . search )
3372
73+ if ( params . has ( 'workId' ) && params . has ( 'partId' ) ) {
74+ presenceData . details = document . querySelector ( '.headerText' ) ?. textContent ?. trim ( )
75+ const number = document . querySelector ( '.episodeTitle > .number' ) ?. textContent ?. trim ( )
76+ const title = document . querySelector ( '.episodeTitle > .title' ) ?. textContent ?. trim ( )
77+ presenceData . state = [ number , title ] . filter ( Boolean ) . join ( ' / ' )
78+ presenceData . detailsUrl = `https://animestore.docomo.ne.jp/animestore/ci_pc?workId=${ params . get ( 'workId' ) } `
79+ presenceData . stateUrl = location . href
80+ presence . setActivity ( presenceData )
81+ }
82+ else if ( params . has ( 'workId' ) ) {
83+ presenceData . details = document . querySelector ( '.titleWrap > h1' ) ?. textContent ?. trim ( )
84+ presenceData . detailsUrl = location . href
85+ presence . setActivity ( presenceData )
86+ }
87+ else {
88+ presence . clearActivity ( )
89+ }
90+ }
91+ else if ( / ^ \/ a n i m e s t o r e \/ C F \/ .* / . test ( pathname ) ) {
92+ presenceData . details = document . querySelector ( '#breadCrumb_b > a > span' ) ?. textContent ?. trim ( )
93+ presenceData . detailsUrl = location . href
94+ presence . setActivity ( presenceData )
95+ }
96+ else if ( / ^ \/ a n i m e s t o r e \/ C P \/ .* / . test ( pathname ) ) {
97+ presenceData . details = document . querySelector ( '#breadCrumb_c > a > span' ) ?. textContent ?. trim ( )
98+ presenceData . detailsUrl = location . href
99+ presence . setActivity ( presenceData )
100+ }
101+ else if ( / ^ \/ a n i m e s t o r e \/ m p a ? _ / . test ( pathname ) ) {
102+ presenceData . details = 'マイページ'
103+ presence . setActivity ( presenceData )
104+ }
105+ else {
106+ presenceData . details = 'ページを閲覧中'
34107 presence . setActivity ( presenceData )
35108 }
36109} )
0 commit comments