mirror of
https://gitlab.com/Kwoth/nadekobot.git
synced 2025-09-11 01:38:27 -04:00
add: Added .q support for invidious. If you have ytProvider set to invidious in data/searches.yml, invidious will be used to queue up songs and play them."work
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using NadekoBot.Voice;
|
||||
using NadekoBot.Db.Models;
|
||||
using NadekoBot.Modules.Music.Resolvers;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.CompilerServices;
|
||||
@@ -27,6 +28,7 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
|
||||
private readonly IMusicQueue _queue;
|
||||
private readonly ITrackResolveProvider _trackResolveProvider;
|
||||
private readonly IYoutubeResolverFactory _ytResolverFactory;
|
||||
private readonly IVoiceProxy _proxy;
|
||||
private readonly IGoogleApiService _googleApiService;
|
||||
private readonly ISongBuffer _songBuffer;
|
||||
@@ -41,6 +43,7 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
public MusicPlayer(
|
||||
IMusicQueue queue,
|
||||
ITrackResolveProvider trackResolveProvider,
|
||||
IYoutubeResolverFactory ytResolverFactory,
|
||||
IVoiceProxy proxy,
|
||||
IGoogleApiService googleApiService,
|
||||
QualityPreset qualityPreset,
|
||||
@@ -48,6 +51,7 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
{
|
||||
_queue = queue;
|
||||
_trackResolveProvider = trackResolveProvider;
|
||||
_ytResolverFactory = ytResolverFactory;
|
||||
_proxy = proxy;
|
||||
_googleApiService = googleApiService;
|
||||
AutoPlay = autoPlay;
|
||||
@@ -118,7 +122,7 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
// make sure song buffer is ready to be (re)used
|
||||
_songBuffer.Reset();
|
||||
|
||||
var streamUrl = await track.GetStreamUrl();
|
||||
var streamUrl = await GetStreamUrl(track);
|
||||
// start up the data source
|
||||
using var source = FfmpegTrackDataSource.CreateAsync(
|
||||
_vc.BitDepth,
|
||||
@@ -256,6 +260,7 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
IsStopped = true;
|
||||
Log.Error("Please install ffmpeg and make sure it's added to your "
|
||||
+ "PATH environment variable before trying again");
|
||||
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
@@ -264,6 +269,7 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex, "Unknown error in music loop: {ErrorMessage}", ex.Message);
|
||||
await Task.Delay(3_000);
|
||||
}
|
||||
finally
|
||||
{
|
||||
@@ -303,6 +309,14 @@ public sealed class MusicPlayer : IMusicPlayer
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<string?> GetStreamUrl(IQueuedTrackInfo track)
|
||||
{
|
||||
if (track.TrackInfo is SimpleTrackInfo sti)
|
||||
return sti.StreamUrl;
|
||||
|
||||
return await _ytResolverFactory.GetYoutubeResolver().GetStreamUrl(track.TrackInfo.Id);
|
||||
}
|
||||
|
||||
private bool? CopyChunkToOutput(ISongBuffer sb, VoiceClient vc)
|
||||
{
|
||||
var data = sb.Read(vc.InputLength, out var length);
|
||||
|
Reference in New Issue
Block a user