.q now uses youtube-dl
This commit is contained in:
parent
62326da5b5
commit
5d6b0f44ae
@ -9,7 +9,7 @@ namespace NadekoBot.DataStructures
|
|||||||
// readpos == writepos means empty
|
// readpos == writepos means empty
|
||||||
// writepos == readpos - 1 means full
|
// writepos == readpos - 1 means full
|
||||||
|
|
||||||
private readonly byte[] buffer;
|
private byte[] buffer;
|
||||||
public int Capacity { get; }
|
public int Capacity { get; }
|
||||||
|
|
||||||
private int _readPos = 0;
|
private int _readPos = 0;
|
||||||
@ -110,7 +110,7 @@ namespace NadekoBot.DataStructures
|
|||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
buffer = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,6 +74,7 @@
|
|||||||
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
|
<PackageReference Include="Microsoft.Extensions.PlatformAbstractions" Version="1.1.0" />
|
||||||
<PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
|
<PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
|
||||||
<PackageReference Include="NLog" Version="5.0.0-beta03" />
|
<PackageReference Include="NLog" Version="5.0.0-beta03" />
|
||||||
|
<PackageReference Include="NYoutubeDL" Version="0.4.4" />
|
||||||
<PackageReference Include="System.ValueTuple" Version="4.4.0-preview1-25305-02" />
|
<PackageReference Include="System.ValueTuple" Version="4.4.0-preview1-25305-02" />
|
||||||
<PackageReference Include="System.Xml.XPath" Version="4.3.0" />
|
<PackageReference Include="System.Xml.XPath" Version="4.3.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
@ -42,16 +42,17 @@ namespace NadekoBot.Services.Impl
|
|||||||
sh = new UrlshortenerService(bcs);
|
sh = new UrlshortenerService(bcs);
|
||||||
cs = new CustomsearchService(bcs);
|
cs = new CustomsearchService(bcs);
|
||||||
}
|
}
|
||||||
|
private static readonly Regex plRegex = new Regex("(?:youtu\\.be\\/|list=)(?<id>[\\da-zA-Z\\-_]*)", RegexOptions.Compiled);
|
||||||
public async Task<IEnumerable<string>> GetPlaylistIdsByKeywordsAsync(string keywords, int count = 1)
|
public async Task<IEnumerable<string>> GetPlaylistIdsByKeywordsAsync(string keywords, int count = 1)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(keywords))
|
if (string.IsNullOrWhiteSpace(keywords))
|
||||||
throw new ArgumentNullException(nameof(keywords));
|
throw new ArgumentNullException(nameof(keywords));
|
||||||
|
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
throw new ArgumentOutOfRangeException(nameof(count));
|
throw new ArgumentOutOfRangeException(nameof(count));
|
||||||
|
|
||||||
var match = new Regex("(?:youtu\\.be\\/|list=)(?<id>[\\da-zA-Z\\-_]*)").Match(keywords);
|
var match = plRegex.Match(keywords);
|
||||||
if (match.Length > 1)
|
if (match.Length > 1)
|
||||||
{
|
{
|
||||||
return new[] { match.Groups["id"].Value.ToString() };
|
return new[] { match.Groups["id"].Value.ToString() };
|
||||||
@ -64,22 +65,17 @@ namespace NadekoBot.Services.Impl
|
|||||||
return (await query.ExecuteAsync()).Items.Select(i => i.Id.PlaylistId);
|
return (await query.ExecuteAsync()).Items.Select(i => i.Id.PlaylistId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly Regex YtVideoIdRegex = new Regex(@"(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v\=))|youtu\.be\/)(?<id>[a-zA-Z0-9_-]{6,11})", RegexOptions.Compiled);
|
//private readonly Regex YtVideoIdRegex = new Regex(@"(?:youtube\.com\/\S*(?:(?:\/e(?:mbed))?\/|watch\?(?:\S*?&?v\=))|youtu\.be\/)(?<id>[a-zA-Z0-9_-]{6,11})", RegexOptions.Compiled);
|
||||||
private readonly IBotCredentials _creds;
|
private readonly IBotCredentials _creds;
|
||||||
|
|
||||||
public async Task<IEnumerable<string>> GetRelatedVideosAsync(string id, int count = 1)
|
public async Task<IEnumerable<string>> GetRelatedVideosAsync(string id, int count = 1)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(id))
|
if (string.IsNullOrWhiteSpace(id))
|
||||||
throw new ArgumentNullException(nameof(id));
|
throw new ArgumentNullException(nameof(id));
|
||||||
|
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
throw new ArgumentOutOfRangeException(nameof(count));
|
throw new ArgumentOutOfRangeException(nameof(count));
|
||||||
|
|
||||||
var match = YtVideoIdRegex.Match(id);
|
|
||||||
if (match.Length > 1)
|
|
||||||
{
|
|
||||||
id = match.Groups["id"].Value;
|
|
||||||
}
|
|
||||||
var query = yt.Search.List("snippet");
|
var query = yt.Search.List("snippet");
|
||||||
query.MaxResults = count;
|
query.MaxResults = count;
|
||||||
query.RelatedToVideoId = id;
|
query.RelatedToVideoId = id;
|
||||||
@ -89,22 +85,13 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<IEnumerable<string>> GetVideoLinksByKeywordAsync(string keywords, int count = 1)
|
public async Task<IEnumerable<string>> GetVideoLinksByKeywordAsync(string keywords, int count = 1)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(keywords))
|
if (string.IsNullOrWhiteSpace(keywords))
|
||||||
throw new ArgumentNullException(nameof(keywords));
|
throw new ArgumentNullException(nameof(keywords));
|
||||||
|
|
||||||
if (count <= 0)
|
if (count <= 0)
|
||||||
throw new ArgumentOutOfRangeException(nameof(count));
|
throw new ArgumentOutOfRangeException(nameof(count));
|
||||||
|
|
||||||
string id = "";
|
|
||||||
var match = YtVideoIdRegex.Match(keywords);
|
|
||||||
if (match.Length > 1)
|
|
||||||
{
|
|
||||||
id = match.Groups["id"].Value;
|
|
||||||
}
|
|
||||||
if (!string.IsNullOrWhiteSpace(id))
|
|
||||||
{
|
|
||||||
return new[] { "http://www.youtube.com/watch?v=" + id };
|
|
||||||
}
|
|
||||||
var query = yt.Search.List("snippet");
|
var query = yt.Search.List("snippet");
|
||||||
query.MaxResults = count;
|
query.MaxResults = count;
|
||||||
query.Q = keywords;
|
query.Q = keywords;
|
||||||
@ -114,6 +101,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<IEnumerable<(string Name, string Id, string Url)>> GetVideoInfosByKeywordAsync(string keywords, int count = 1)
|
public async Task<IEnumerable<(string Name, string Id, string Url)>> GetVideoInfosByKeywordAsync(string keywords, int count = 1)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(keywords))
|
if (string.IsNullOrWhiteSpace(keywords))
|
||||||
throw new ArgumentNullException(nameof(keywords));
|
throw new ArgumentNullException(nameof(keywords));
|
||||||
|
|
||||||
@ -129,6 +117,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<string> ShortenUrl(string url)
|
public async Task<string> ShortenUrl(string url)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(url))
|
if (string.IsNullOrWhiteSpace(url))
|
||||||
throw new ArgumentNullException(nameof(url));
|
throw new ArgumentNullException(nameof(url));
|
||||||
|
|
||||||
@ -149,6 +138,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<IEnumerable<string>> GetPlaylistTracksAsync(string playlistId, int count = 50)
|
public async Task<IEnumerable<string>> GetPlaylistTracksAsync(string playlistId, int count = 50)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(playlistId))
|
if (string.IsNullOrWhiteSpace(playlistId))
|
||||||
throw new ArgumentNullException(nameof(playlistId));
|
throw new ArgumentNullException(nameof(playlistId));
|
||||||
|
|
||||||
@ -181,6 +171,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<IReadOnlyDictionary<string, TimeSpan>> GetVideoDurationsAsync(IEnumerable<string> videoIds)
|
public async Task<IReadOnlyDictionary<string, TimeSpan>> GetVideoDurationsAsync(IEnumerable<string> videoIds)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
var videoIdsList = videoIds as List<string> ?? videoIds.ToList();
|
var videoIdsList = videoIds as List<string> ?? videoIds.ToList();
|
||||||
|
|
||||||
Dictionary<string, TimeSpan> toReturn = new Dictionary<string, TimeSpan>();
|
Dictionary<string, TimeSpan> toReturn = new Dictionary<string, TimeSpan>();
|
||||||
@ -211,6 +202,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<ImageResult> GetImageAsync(string query, int start = 1)
|
public async Task<ImageResult> GetImageAsync(string query, int start = 1)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
if (string.IsNullOrWhiteSpace(query))
|
if (string.IsNullOrWhiteSpace(query))
|
||||||
throw new ArgumentNullException(nameof(query));
|
throw new ArgumentNullException(nameof(query));
|
||||||
|
|
||||||
@ -362,6 +354,7 @@ namespace NadekoBot.Services.Impl
|
|||||||
|
|
||||||
public async Task<string> Translate(string sourceText, string sourceLanguage, string targetLanguage)
|
public async Task<string> Translate(string sourceText, string sourceLanguage, string targetLanguage)
|
||||||
{
|
{
|
||||||
|
await Task.Yield();
|
||||||
string text;
|
string text;
|
||||||
|
|
||||||
if (!_languageDictionary.ContainsKey(sourceLanguage) ||
|
if (!_languageDictionary.ContainsKey(sourceLanguage) ||
|
||||||
|
@ -161,7 +161,7 @@ namespace NadekoBot.Services.Music
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
_log.Info("Starting");
|
_log.Info("Starting");
|
||||||
using (var b = new SongBuffer(await data.Song.Uri(), ""))
|
using (var b = new SongBuffer(await data.Song.Uri(), "", data.Song.ProviderType == Database.Models.MusicType.Local))
|
||||||
{
|
{
|
||||||
_log.Info("Created buffer, buffering...");
|
_log.Info("Created buffer, buffering...");
|
||||||
AudioOutStream pcm = null;
|
AudioOutStream pcm = null;
|
||||||
|
@ -73,36 +73,38 @@ namespace NadekoBot
|
|||||||
{
|
{
|
||||||
_log.Error(ex);
|
_log.Error(ex);
|
||||||
}
|
}
|
||||||
await Task.Run(() =>
|
//await Task.Run(() =>
|
||||||
{
|
//{
|
||||||
string input;
|
// string input;
|
||||||
while ((input = Console.ReadLine()?.ToLowerInvariant()) != "quit")
|
// while ((input = Console.ReadLine()?.ToLowerInvariant()) != "quit")
|
||||||
{
|
// {
|
||||||
try
|
// try
|
||||||
{
|
// {
|
||||||
switch (input)
|
// switch (input)
|
||||||
{
|
// {
|
||||||
case "ls":
|
// case "ls":
|
||||||
var groupStr = string.Join(",", Statuses
|
// var groupStr = string.Join(",", Statuses
|
||||||
.ToArray()
|
// .ToArray()
|
||||||
.Where(x => x != null)
|
// .Where(x => x != null)
|
||||||
.GroupBy(x => x.ConnectionState)
|
// .GroupBy(x => x.ConnectionState)
|
||||||
.Select(x => x.Count() + " " + x.Key));
|
// .Select(x => x.Count() + " " + x.Key));
|
||||||
_log.Info(string.Join("\n", Statuses
|
// _log.Info(string.Join("\n", Statuses
|
||||||
.ToArray()
|
// .ToArray()
|
||||||
.Where(x => x != null)
|
// .Where(x => x != null)
|
||||||
.Select(x => $"Shard {x.ShardId} is in {x.ConnectionState.ToString()} state with {x.Guilds} servers. {(DateTime.UtcNow - x.Time).ToString(@"hh\:mm\:ss")} ago")) + "\n" + groupStr);
|
// .Select(x => $"Shard {x.ShardId} is in {x.ConnectionState.ToString()} state with {x.Guilds} servers. {(DateTime.UtcNow - x.Time).ToString(@"hh\:mm\:ss")} ago")) + "\n" + groupStr);
|
||||||
break;
|
// break;
|
||||||
default:
|
// default:
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
catch (Exception ex)
|
// catch (Exception ex)
|
||||||
{
|
// {
|
||||||
_log.Warn(ex);
|
// _log.Warn(ex);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
});
|
//});
|
||||||
|
|
||||||
|
await Task.Delay(-1);
|
||||||
foreach (var p in ShardProcesses)
|
foreach (var p in ShardProcesses)
|
||||||
{
|
{
|
||||||
try { p.Kill(); } catch { }
|
try { p.Kill(); } catch { }
|
||||||
|
Loading…
Reference in New Issue
Block a user