!m smq added (setmaxqueue)
This commit is contained in:
		@@ -51,6 +51,7 @@ namespace NadekoBot.Modules.Music.Classes
 | 
			
		||||
        public bool RepeatSong { get; private set; } = false;
 | 
			
		||||
        public bool RepeatPlaylist { get; private set; } = false;
 | 
			
		||||
        public bool Autoplay { get; set; } = false;
 | 
			
		||||
        public uint MaxQueueSize { get; set; } = 0;
 | 
			
		||||
 | 
			
		||||
        public MusicPlayer(Channel startingVoiceChannel, float? defaultVolume)
 | 
			
		||||
        {
 | 
			
		||||
@@ -172,6 +173,7 @@ namespace NadekoBot.Modules.Music.Classes
 | 
			
		||||
        {
 | 
			
		||||
            if (s == null)
 | 
			
		||||
                throw new ArgumentNullException(nameof(s));
 | 
			
		||||
            ThrowIfQueueFull();
 | 
			
		||||
            lock (playlistLock)
 | 
			
		||||
            {
 | 
			
		||||
                s.MusicPlayer = this;
 | 
			
		||||
@@ -244,5 +246,13 @@ namespace NadekoBot.Modules.Music.Classes
 | 
			
		||||
        internal bool ToggleRepeatPlaylist() => this.RepeatPlaylist = !this.RepeatPlaylist;
 | 
			
		||||
 | 
			
		||||
        internal bool ToggleAutoplay() => this.Autoplay = !this.Autoplay;
 | 
			
		||||
 | 
			
		||||
        internal void ThrowIfQueueFull()
 | 
			
		||||
        {
 | 
			
		||||
            if (MaxQueueSize == 0)
 | 
			
		||||
                return;
 | 
			
		||||
            if (playlist.Count >= MaxQueueSize)
 | 
			
		||||
                throw new PlaylistFullException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								NadekoBot/Modules/Music/Classes/PlaylistFullException.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								NadekoBot/Modules/Music/Classes/PlaylistFullException.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
using System;
 | 
			
		||||
 | 
			
		||||
namespace NadekoBot.Modules.Music.Classes
 | 
			
		||||
{
 | 
			
		||||
    class PlaylistFullException : Exception
 | 
			
		||||
    {
 | 
			
		||||
        public PlaylistFullException(string message) : base(message)
 | 
			
		||||
        {
 | 
			
		||||
        }
 | 
			
		||||
        public PlaylistFullException() : base("Queue is full.") { }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -230,7 +230,7 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                cgb.CreateCommand("max")
 | 
			
		||||
                    .Description("Sets the music volume to 100% (real max is actually 150%).\n**Usage**: `!m max`")
 | 
			
		||||
                    .Description("Sets the music volume to 100%.\n**Usage**: `!m max`")
 | 
			
		||||
                    .Do(e =>
 | 
			
		||||
                    {
 | 
			
		||||
                        MusicPlayer musicPlayer;
 | 
			
		||||
@@ -310,6 +310,8 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                            {
 | 
			
		||||
                                await QueueSong(e.User, e.Channel, e.User.VoiceChannel, id, true).ConfigureAwait(false);
 | 
			
		||||
                            }
 | 
			
		||||
                            catch (PlaylistFullException)
 | 
			
		||||
                            { break; }
 | 
			
		||||
                            catch { }
 | 
			
		||||
                        }
 | 
			
		||||
                        await msg.Edit("🎵 `Playlist queue complete.`").ConfigureAwait(false);
 | 
			
		||||
@@ -334,6 +336,8 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                            return;
 | 
			
		||||
 | 
			
		||||
                        foreach (var svideo in scvids.Skip(1))
 | 
			
		||||
                        {
 | 
			
		||||
                            try
 | 
			
		||||
                            {
 | 
			
		||||
                                mp.AddSong(new Song(new Classes.SongInfo
 | 
			
		||||
                                {
 | 
			
		||||
@@ -344,6 +348,8 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                                    Query = svideo.TrackLink,
 | 
			
		||||
                                }), e.User.Name);
 | 
			
		||||
                            }
 | 
			
		||||
                            catch (PlaylistFullException) { break; }
 | 
			
		||||
                        }
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                cgb.CreateCommand("localplaylst")
 | 
			
		||||
@@ -361,9 +367,17 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                            var fileEnum = new DirectoryInfo(arg).GetFiles()
 | 
			
		||||
                                                .Where(x => !x.Attributes.HasFlag(FileAttributes.Hidden | FileAttributes.System));
 | 
			
		||||
                            foreach (var file in fileEnum)
 | 
			
		||||
                            {
 | 
			
		||||
                                try
 | 
			
		||||
                                {
 | 
			
		||||
                                    await QueueSong(e.User, e.Channel, e.User.VoiceChannel, file.FullName, true, MusicType.Local).ConfigureAwait(false);
 | 
			
		||||
                                }
 | 
			
		||||
                                catch (PlaylistFullException)
 | 
			
		||||
                                {
 | 
			
		||||
                                    break;
 | 
			
		||||
                                }
 | 
			
		||||
                                catch { }
 | 
			
		||||
                            }
 | 
			
		||||
                            await e.Channel.SendMessage("🎵 `Directory queue complete.`").ConfigureAwait(false);
 | 
			
		||||
                        }
 | 
			
		||||
                        catch { }
 | 
			
		||||
@@ -481,6 +495,29 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                cgb.CreateCommand("setmaxqueue")
 | 
			
		||||
                    .Alias("smq")
 | 
			
		||||
                    .Description($"Sets a maximum queue size. Supply 0 or no argument to have no limit. \n**Usage**: `{Prefix} smq` 50 or `{Prefix} smq`")
 | 
			
		||||
                    .Parameter("size", ParameterType.Unparsed)
 | 
			
		||||
                    .Do(async e =>
 | 
			
		||||
                    {
 | 
			
		||||
                        MusicPlayer musicPlayer;
 | 
			
		||||
                        if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
 | 
			
		||||
                        {
 | 
			
		||||
                            return;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        var sizeStr = e.GetArg("size")?.Trim();
 | 
			
		||||
                        uint size = 0;
 | 
			
		||||
                        if (string.IsNullOrWhiteSpace(sizeStr) || !uint.TryParse(sizeStr, out size))
 | 
			
		||||
                        {
 | 
			
		||||
                            size = 0;
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        musicPlayer.MaxQueueSize = size;
 | 
			
		||||
                        await e.Channel.SendMessage($"🎵 `Max queue set to {(size == 0 ? ("unlimited") : size + " tracks")}`");
 | 
			
		||||
                    });
 | 
			
		||||
 | 
			
		||||
                cgb.CreateCommand("cleanup")
 | 
			
		||||
                    .Description("Cleans up hanging voice connections. **Bot Owner Only!**\n**Usage**: `!m cleanup`")
 | 
			
		||||
                    .AddCheck(SimpleCheckers.OwnerOnly())
 | 
			
		||||
@@ -630,6 +667,10 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                            {
 | 
			
		||||
                                await QueueSong(e.User, textCh, voiceCh, si.Query, true, (MusicType)si.ProviderType).ConfigureAwait(false);
 | 
			
		||||
                            }
 | 
			
		||||
                            catch (PlaylistFullException)
 | 
			
		||||
                            {
 | 
			
		||||
                                break;
 | 
			
		||||
                            }
 | 
			
		||||
                            catch (Exception ex)
 | 
			
		||||
                            {
 | 
			
		||||
                                Console.WriteLine($"Failed QueueSong in load playlist. {ex}");
 | 
			
		||||
@@ -800,8 +841,19 @@ namespace NadekoBot.Modules.Music
 | 
			
		||||
                };
 | 
			
		||||
                return mp;
 | 
			
		||||
            });
 | 
			
		||||
            var resolvedSong = await Song.ResolveSong(query, musicType).ConfigureAwait(false);
 | 
			
		||||
            Song resolvedSong;
 | 
			
		||||
            try
 | 
			
		||||
            {
 | 
			
		||||
                musicPlayer.ThrowIfQueueFull();
 | 
			
		||||
                resolvedSong = await Song.ResolveSong(query, musicType).ConfigureAwait(false);
 | 
			
		||||
 | 
			
		||||
                musicPlayer.AddSong(resolvedSong, queuer.Name);
 | 
			
		||||
            }
 | 
			
		||||
            catch (PlaylistFullException)
 | 
			
		||||
            {
 | 
			
		||||
                await textCh.SendMessage($"🎵 `Queue is full at {musicPlayer.MaxQueueSize}/{musicPlayer.MaxQueueSize}.` ");
 | 
			
		||||
                throw;
 | 
			
		||||
            }
 | 
			
		||||
            if (!silent)
 | 
			
		||||
            {
 | 
			
		||||
                var queuedMessage = await textCh.SendMessage($"🎵`Queued`{resolvedSong.PrettyName} **at** `#{musicPlayer.Playlist.Count}`").ConfigureAwait(false);
 | 
			
		||||
 
 | 
			
		||||
@@ -144,6 +144,7 @@
 | 
			
		||||
    <Compile Include="Classes\FlowersHandler.cs" />
 | 
			
		||||
    <Compile Include="Modules\Conversations\Commands\RipCommand.cs" />
 | 
			
		||||
    <Compile Include="Modules\CustomReactions\CustomReactions.cs" />
 | 
			
		||||
    <Compile Include="Modules\Music\Classes\PlaylistFullException.cs" />
 | 
			
		||||
    <Compile Include="Modules\Programming\Commands\HaskellRepl.cs" />
 | 
			
		||||
    <Compile Include="Modules\Programming\ProgrammingModule.cs" />
 | 
			
		||||
    <Compile Include="Modules\Searches\Commands\EvalCommand.cs" />
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user