m3u pls and asx support (hopefuly)
This commit is contained in:
parent
bf81b803db
commit
5f86c83422
@ -10,6 +10,7 @@ using Timer = System.Timers.Timer;
|
|||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using NadekoBot.Classes;
|
using NadekoBot.Classes;
|
||||||
using Discord.Audio;
|
using Discord.Audio;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace NadekoBot.Modules {
|
namespace NadekoBot.Modules {
|
||||||
class Music : DiscordModule {
|
class Music : DiscordModule {
|
||||||
@ -257,6 +258,15 @@ namespace NadekoBot.Modules {
|
|||||||
await e.Send("💢 You need to be in the voice channel on this server.");
|
await e.Send("💢 You need to be in the voice channel on this server.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(query) || query.Length < 3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (IsRadioLink(query)) {
|
||||||
|
radio = true;
|
||||||
|
query = await HandleStreamContainers(query);
|
||||||
|
}
|
||||||
|
|
||||||
if (musicPlayers.ContainsKey(e.Server) == false) {
|
if (musicPlayers.ContainsKey(e.Server) == false) {
|
||||||
float? vol = null;
|
float? vol = null;
|
||||||
float throwAway;
|
float throwAway;
|
||||||
@ -268,8 +278,6 @@ namespace NadekoBot.Modules {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (query == null || query.Length < 3)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var player = musicPlayers[e.Server];
|
var player = musicPlayers[e.Server];
|
||||||
|
|
||||||
@ -320,5 +328,66 @@ namespace NadekoBot.Modules {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsRadioLink(string query) =>
|
||||||
|
(query.StartsWith("http") ||
|
||||||
|
query.StartsWith("ww"))
|
||||||
|
&&
|
||||||
|
(query.Contains(".pls") ||
|
||||||
|
query.Contains(".m3u") ||
|
||||||
|
query.Contains(".asx"));
|
||||||
|
|
||||||
|
private async Task<string> HandleStreamContainers(string query) {
|
||||||
|
string file = null;
|
||||||
|
try {
|
||||||
|
file = await SearchHelper.GetResponseAsync(query);
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
return query;
|
||||||
|
}
|
||||||
|
if (query.Contains(".pls")) {
|
||||||
|
//File1=http://armitunes.com:8000/
|
||||||
|
//Regex.Match(query)
|
||||||
|
try {
|
||||||
|
var m = Regex.Match(file, "File1=(?<url>.*?)\\n");
|
||||||
|
var res = m.Groups["url"]?.ToString();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Console.WriteLine($"Failed reading .pls:\n{file}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (query.Contains(".m3u")) {
|
||||||
|
/*
|
||||||
|
# This is a comment
|
||||||
|
C:\xxx4xx\xxxxxx3x\xx2xxxx\xx.mp3
|
||||||
|
C:\xxx5xx\x6xxxxxx\x7xxxxx\xx.mp3
|
||||||
|
*/
|
||||||
|
try {
|
||||||
|
var m = Regex.Match(file, "^[^#](?<url>.*)");
|
||||||
|
var res = m.Groups["url"]?.ToString();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Console.WriteLine($"Failed reading .m3u:\n{file}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (query.Contains(".asx")) {
|
||||||
|
//<ref href="http://armitunes.com:8000"/>
|
||||||
|
try {
|
||||||
|
var m = Regex.Match(file, "<ref href=\"(?<url>.*?)\"");
|
||||||
|
var res = m.Groups["url"]?.ToString();
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
Console.WriteLine($"Failed reading .asx:\n{file}");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return query;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user