readded .sq and .lo and .lopl, also .lopl will now explicitly avoid files with .jpg and .png extension (usually album images)
This commit is contained in:
@ -12,6 +12,9 @@ using NadekoBot.Services.Database.Models;
|
||||
using NadekoBot.Services.Music;
|
||||
using NadekoBot.DataStructures;
|
||||
using System.Collections.Concurrent;
|
||||
using System.IO;
|
||||
using System.Net.Http;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace NadekoBot.Modules.Music
|
||||
{
|
||||
@ -36,6 +39,8 @@ namespace NadekoBot.Modules.Music
|
||||
//_client.UserVoiceStateUpdated += Client_UserVoiceStateUpdated;
|
||||
}
|
||||
|
||||
//todo when someone drags nadeko from one voice channel to another
|
||||
|
||||
//private Task Client_UserVoiceStateUpdated(SocketUser iusr, SocketVoiceState oldState, SocketVoiceState newState)
|
||||
//{
|
||||
// var usr = iusr as SocketGuildUser;
|
||||
@ -84,6 +89,13 @@ namespace NadekoBot.Modules.Music
|
||||
|
||||
private async Task InternalQueue(MusicPlayer mp, SongInfo songInfo, bool silent)
|
||||
{
|
||||
if (songInfo == null)
|
||||
{
|
||||
if(!silent)
|
||||
await ReplyErrorLocalized("song_not_found").ConfigureAwait(false);
|
||||
return;
|
||||
}
|
||||
|
||||
(bool Success, int Index) qData;
|
||||
try
|
||||
{
|
||||
@ -137,6 +149,7 @@ namespace NadekoBot.Modules.Music
|
||||
{
|
||||
var mp = await _music.GetOrCreatePlayer(Context);
|
||||
var songInfo = await _music.ResolveSong(query, Context.User.ToString());
|
||||
|
||||
try { await InternalQueue(mp, songInfo, false); } catch (QueueFullException) { return; }
|
||||
|
||||
if ((await Context.Guild.GetCurrentUserAsync()).GetPermissions((IGuildChannel)Context.Channel).ManageMessages)
|
||||
@ -486,9 +499,8 @@ namespace NadekoBot.Modules.Music
|
||||
try
|
||||
{
|
||||
await Task.Yield();
|
||||
//todo fix for all
|
||||
if (item.ProviderType == MusicType.Normal)
|
||||
await Task.WhenAll(Task.Delay(1000), InternalQueue(mp, await _music.ResolveSong(item.Query, Context.User.ToString(), item.ProviderType), true)).ConfigureAwait(false);
|
||||
|
||||
await Task.WhenAll(Task.Delay(1000), InternalQueue(mp, await _music.ResolveSong(item.Query, Context.User.ToString(), item.ProviderType), true)).ConfigureAwait(false);
|
||||
}
|
||||
catch (SongNotFoundException) { }
|
||||
catch { break; }
|
||||
@ -524,17 +536,43 @@ namespace NadekoBot.Modules.Music
|
||||
// }
|
||||
//}
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//public async Task SoundCloudQueue([Remainder] string query)
|
||||
//{
|
||||
// await _music.QueueSong(((IGuildUser)Context.User), (ITextChannel)Context.Channel, ((IGuildUser)Context.User).VoiceChannel, query, musicType: MusicType.Soundcloud).ConfigureAwait(false);
|
||||
// if ((await Context.Guild.GetCurrentUserAsync()).GetPermissions((IGuildChannel)Context.Channel).ManageMessages)
|
||||
// {
|
||||
// Context.Message.DeleteAfter(10);
|
||||
// }
|
||||
//}
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task SoundCloudQueue([Remainder] string query)
|
||||
{
|
||||
var mp = await _music.GetOrCreatePlayer(Context);
|
||||
var song = await _music.ResolveSong(query, Context.User.ToString(), MusicType.Soundcloud);
|
||||
await InternalQueue(mp, song, false).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
//todo test soundcloudpl
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task SoundCloudPl([Remainder] string pl)
|
||||
{
|
||||
pl = pl?.Trim();
|
||||
|
||||
if (string.IsNullOrWhiteSpace(pl))
|
||||
return;
|
||||
|
||||
var mp = await _music.GetOrCreatePlayer(Context);
|
||||
|
||||
using (var http = new HttpClient())
|
||||
{
|
||||
var scvids = JObject.Parse(await http.GetStringAsync($"https://scapi.nadekobot.me/resolve?url={pl}").ConfigureAwait(false))["tracks"].ToObject<SoundCloudVideo[]>();
|
||||
|
||||
foreach (var svideo in scvids)
|
||||
{
|
||||
try
|
||||
{
|
||||
await InternalQueue(mp, await _music.SongInfoFromSVideo(svideo, Context.User.ToString()), true);
|
||||
}
|
||||
catch { break; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//todo fix playlist sync stuff
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task NowPlaying()
|
||||
@ -619,103 +657,59 @@ namespace NadekoBot.Modules.Music
|
||||
// await msg.ModifyAsync(m => m.Content = "✅ " + Format.Bold(GetText("playlist_queue_complete"))).ConfigureAwait(false);
|
||||
//}
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//public async Task SoundCloudPl([Remainder] string pl)
|
||||
//{
|
||||
|
||||
// pl = pl?.Trim();
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
public async Task Radio(string radioLink)
|
||||
{
|
||||
var mp = await _music.GetOrCreatePlayer(Context);
|
||||
var song = await _music.ResolveSong(radioLink, Context.User.ToString(), MusicType.Radio);
|
||||
await InternalQueue(mp, song, false).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
// if (string.IsNullOrWhiteSpace(pl))
|
||||
// return;
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[OwnerOnly]
|
||||
public async Task Local([Remainder] string path)
|
||||
{
|
||||
var mp = await _music.GetOrCreatePlayer(Context);
|
||||
var song = await _music.ResolveSong(path, Context.User.ToString(), MusicType.Local);
|
||||
await InternalQueue(mp, song, false).ConfigureAwait(false);
|
||||
}
|
||||
//todo test localpl
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
[OwnerOnly]
|
||||
public async Task LocalPl([Remainder] string dirPath)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(dirPath))
|
||||
return;
|
||||
|
||||
// using (var http = new HttpClient())
|
||||
// {
|
||||
// var scvids = JObject.Parse(await http.GetStringAsync($"https://scapi.nadekobot.me/resolve?url={pl}").ConfigureAwait(false))["tracks"].ToObject<SoundCloudVideo[]>();
|
||||
// await _music.QueueSong(((IGuildUser)Context.User), (ITextChannel)Context.Channel, ((IGuildUser)Context.User).VoiceChannel, scvids[0].TrackLink).ConfigureAwait(false);
|
||||
var mp = await _music.GetOrCreatePlayer(Context);
|
||||
|
||||
// MusicPlayer musicPlayer;
|
||||
// if ((musicPlayer = _music.GetPlayer(Context.Guild.Id)) == null)
|
||||
// return;
|
||||
|
||||
// foreach (var svideo in scvids.Skip(1))
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// musicPlayer.AddSong(new Song(new SongInfo
|
||||
// {
|
||||
// Title = svideo.FullName,
|
||||
// Provider = "SoundCloud",
|
||||
// Uri = await svideo.StreamLink(),
|
||||
// ProviderType = MusicType.Normal,
|
||||
// Query = svideo.TrackLink,
|
||||
// }), ((IGuildUser)Context.User).Username);
|
||||
// }
|
||||
// catch (PlaylistFullException) { break; }
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//[OwnerOnly]
|
||||
//public async Task LocalPl([Remainder] string directory)
|
||||
//{
|
||||
|
||||
// var arg = directory;
|
||||
// if (string.IsNullOrWhiteSpace(arg))
|
||||
// return;
|
||||
// var dir = new DirectoryInfo(arg);
|
||||
// var fileEnum = dir.GetFiles("*", SearchOption.AllDirectories)
|
||||
// .Where(x => !x.Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System));
|
||||
// var gusr = (IGuildUser)Context.User;
|
||||
// foreach (var file in fileEnum)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// await _music.QueueSong(gusr, (ITextChannel)Context.Channel, gusr.VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false);
|
||||
// }
|
||||
// catch (PlaylistFullException)
|
||||
// {
|
||||
// break;
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// // ignored
|
||||
// }
|
||||
// }
|
||||
// await ReplyConfirmLocalized("dir_queue_complete").ConfigureAwait(false);
|
||||
//}
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//public async Task Radio(string radioLink)
|
||||
//{
|
||||
|
||||
// if (((IGuildUser)Context.User).VoiceChannel?.Guild != Context.Guild)
|
||||
// {
|
||||
// await ReplyErrorLocalized("must_be_in_voice").ConfigureAwait(false);
|
||||
// return;
|
||||
// }
|
||||
// await _music.QueueSong(((IGuildUser)Context.User), (ITextChannel)Context.Channel, ((IGuildUser)Context.User).VoiceChannel, radioLink, musicType: MusicType.Radio).ConfigureAwait(false);
|
||||
// if ((await Context.Guild.GetCurrentUserAsync()).GetPermissions((IGuildChannel)Context.Channel).ManageMessages)
|
||||
// {
|
||||
// Context.Message.DeleteAfter(10);
|
||||
// }
|
||||
//}
|
||||
|
||||
//[NadekoCommand, Usage, Description, Aliases]
|
||||
//[RequireContext(ContextType.Guild)]
|
||||
//[OwnerOnly]
|
||||
//public async Task Local([Remainder] string path)
|
||||
//{
|
||||
|
||||
// var arg = path;
|
||||
// if (string.IsNullOrWhiteSpace(arg))
|
||||
// return;
|
||||
// await _music.QueueSong(((IGuildUser)Context.User), (ITextChannel)Context.Channel, ((IGuildUser)Context.User).VoiceChannel, path, musicType: MusicType.Local).ConfigureAwait(false);
|
||||
|
||||
//}
|
||||
DirectoryInfo dir;
|
||||
try { dir = new DirectoryInfo(dirPath); } catch { return; }
|
||||
var fileEnum = dir.GetFiles("*", SearchOption.AllDirectories)
|
||||
.Where(x => !x.Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System) && x.Extension != ".jpg" && x.Extension != ".png");
|
||||
foreach (var file in fileEnum)
|
||||
{
|
||||
try
|
||||
{
|
||||
var song = await _music.ResolveSong(file.FullName, Context.User.ToString(), MusicType.Local);
|
||||
await InternalQueue(mp, song, true).ConfigureAwait(false);
|
||||
}
|
||||
catch (QueueFullException)
|
||||
{
|
||||
break;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_log.Warn(ex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
await ReplyConfirmLocalized("dir_queue_complete").ConfigureAwait(false);
|
||||
}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
[RequireContext(ContextType.Guild)]
|
||||
@ -776,8 +770,6 @@ namespace NadekoBot.Modules.Music
|
||||
// await Context.Channel.EmbedAsync(embed).ConfigureAwait(false);
|
||||
|
||||
// //await channel.SendConfirmAsync($"🎵Moved {s.PrettyName} `from #{n1} to #{n2}`").ConfigureAwait(false);
|
||||
|
||||
|
||||
//}
|
||||
|
||||
[NadekoCommand, Usage, Description, Aliases]
|
||||
|
Reference in New Issue
Block a user