@@ -28,6 +28,7 @@ import EmbedBuilder from '#structures/EmbedBuilder.js'
2828const spamIntervald = new SpamIntervalDB ( )
2929type UserExtended = GuildMember & { }
3030type YoutubeInjecter < T > = T & { youtubei ?: Innertube }
31+ type RequesterInjecter < T > = T & { requester : User }
3132
3233export default class MusicManager extends EventEmitter {
3334 players = new Collection < string , Player > ( )
@@ -54,7 +55,10 @@ export default class MusicManager extends EventEmitter {
5455 this . players . set ( vc . guild . id , player )
5556 player . on ( 'ready' , async ( ) => await this . trackStart ( player ) )
5657 player . on ( 'finish' , ( ) => this . trackEnd ( player , true ) )
58+ // TODO: yasha update
59+ // @ts -expect-error
5760 player . on ( 'debug' , ( debug : any ) => logger . log ( debug ) )
61+ // @ts -expect-error
5862 player . on ( yasha . VoiceConnection . Status . Destroyed , async ( ) => await player . destroy ( ) )
5963 player . on ( 'error' , err => {
6064 client . errorHandler . captureException ( err )
@@ -106,7 +110,7 @@ export default class MusicManager extends EventEmitter {
106110 else return false
107111 }
108112
109- async trackStart ( player : Player ) {
113+ async trackStart ( player : Player ) : Promise < void > {
110114 // TODO: Check if the song limit is the saçme as stablished for the admins
111115 // if(player.queue.current?.duration > player.guild.)
112116
@@ -123,6 +127,7 @@ export default class MusicManager extends EventEmitter {
123127 { band : 16000 , gain : - 4 } , // Frecuencia muy alta
124128 ]
125129 player . setEqualizer ( equalizerSettings )
130+ // @ts -expect-error
126131 player . player . playing = true
127132 player . paused = false
128133 const song = player . queue . current
@@ -157,7 +162,7 @@ export default class MusicManager extends EventEmitter {
157162 . setColor ( client . settings . color )
158163 if ( song . platform === 'Youtube' )
159164 embed
160- . setImage ( song . thumbnails [ 0 ] . url )
165+ . setImage ( song . thumbnails ?. [ 0 ] . url ?? null )
161166 . setDescription (
162167 `${ translate ( keys . PLAYING ) } **[${ song . title } ](https://music.youtube.com/watch?v=${
163168 song . id
@@ -184,7 +189,7 @@ export default class MusicManager extends EventEmitter {
184189 )
185190
186191 try {
187- return ( player . message = await ( await player . getTextChannel ( ) ) ?. send ( {
192+ ( player . message = await ( await player . getTextChannel ( ) ) ?. send ( {
188193 embeds : [ embed ] ,
189194 components : [ row ] ,
190195 } ) )
@@ -206,8 +211,7 @@ export default class MusicManager extends EventEmitter {
206211 }
207212
208213 if ( player . queueRepeat ) {
209- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
210- player . queue . add ( player . queue . current )
214+ player . queue . add ( track )
211215 player . queue . current = player . queue . shift ( ) ?? null
212216 player . play ( )
213217 return this
@@ -273,7 +277,7 @@ export default class MusicManager extends EventEmitter {
273277 } ,
274278 {
275279 name : translate ( keys . REQUESTER ) ,
276- value : `${ player . queue . current ?. requester . user } ` ,
280+ value : `${ player . queue . current ?. requester } ` ,
277281 inline : true ,
278282 } ,
279283 )
@@ -304,7 +308,7 @@ export default class MusicManager extends EventEmitter {
304308 async ejecutarAccion ( elemento : any , player : Player ) {
305309 // Lógica de tu acción
306310 const track = await client . music . search ( elemento . video_id , client . user , 'Youtube' )
307- // TODO extends track
311+ if ( ! track ) return
308312 player . queue . add ( track )
309313 }
310314
@@ -324,7 +328,7 @@ export default class MusicManager extends EventEmitter {
324328 return array
325329 }
326330
327- async search ( query : any , requester : YoutubeInjecter < User > , source : 'Spotify' | 'Youtube' | 'Soundcloud' ) {
331+ async search ( query : any , requester : YoutubeInjecter < User > , source : 'Spotify' | 'Youtube' | 'Soundcloud' ) : Promise < RequesterInjecter < yasha . Track > | undefined > {
328332 // let track
329333 // if (requester.youtubei)
330334 // if (requester.youtubei.session.logged_in) {
@@ -343,9 +347,13 @@ export default class MusicManager extends EventEmitter {
343347 )
344348 if ( ! track ) {
345349 logger . debug ( 'No track found' )
346- track = await yasha . Source . Youtube . search ( query )
350+ const search = await yasha . Source . Youtube . search ( query )
351+ if ( ! search . length ) return undefined
352+ const tracks = search . filter ( t => t instanceof yasha . Track )
353+ if ( ! tracks . length ) return undefined
354+ track = tracks [ 0 ]
347355 }
348- logger . log ( ' track: ' , track )
356+ if ( ! ( track instanceof yasha . Track ) ) return undefined
349357 if ( track ?. platform !== 'Youtube' ) return undefined
350358 // if (track instanceof TrackPlaylist) {
351359 // track.forEach(t => {
@@ -359,14 +367,16 @@ export default class MusicManager extends EventEmitter {
359367 const stream = getMax(track.streams, 'bitrate')
360368 track.streams = [stream.object]
361369 } */
370+ // @ts -expect-error
362371 track . requester = requester
363- // track.icon = null
364-
372+ // @ts -expect-error
365373 return track
366374 // }
367375 } catch ( error ) {
376+ if ( ( error as Error ) . message === 'Video is age restricted' ) return undefined
368377 client . errorHandler . captureException ( error as Error )
369378 }
379+ return undefined
370380 }
371381
372382 getPlayingPlayers ( ) {
0 commit comments