Doesn't leave when finished playing. Totaly stable, tested and proven closes #62
This commit is contained in:
parent
f9a1ca0c50
commit
ec0c3c86e0
@ -28,21 +28,30 @@ namespace NadekoBot.Classes.Music {
|
||||
|
||||
public MusicControls() {
|
||||
Task.Run(async () => {
|
||||
while (!Stopped) {
|
||||
if (CurrentSong == null) {
|
||||
if (SongQueue.Count > 0)
|
||||
await LoadNextSong();
|
||||
while (true) {
|
||||
if (!Stopped) {
|
||||
if (CurrentSong == null) {
|
||||
if (SongQueue.Count > 0)
|
||||
await LoadNextSong();
|
||||
|
||||
}
|
||||
else if (CurrentSong.State == StreamState.Completed || NextSong) {
|
||||
NextSong = false;
|
||||
await LoadNextSong();
|
||||
}
|
||||
}
|
||||
else if (CurrentSong.State == StreamState.Completed || NextSong) {
|
||||
NextSong = false;
|
||||
await LoadNextSong();
|
||||
}
|
||||
else if (VoiceClient == null)
|
||||
break;
|
||||
await Task.Delay(500);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
internal void AddSong(StreamRequest streamRequest) {
|
||||
Stopped = false;
|
||||
this.SongQueue.Add(streamRequest);
|
||||
}
|
||||
|
||||
public MusicControls(Channel voiceChannel, CommandEventArgs e, float? vol) : this() {
|
||||
if (voiceChannel == null)
|
||||
throw new ArgumentNullException(nameof(voiceChannel));
|
||||
@ -60,8 +69,7 @@ namespace NadekoBot.Classes.Music {
|
||||
SongQueue.RemoveAt(0);
|
||||
}
|
||||
else {
|
||||
VoiceClient?.Disconnect();
|
||||
VoiceClient = null;
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
@ -81,16 +89,18 @@ namespace NadekoBot.Classes.Music {
|
||||
}
|
||||
}
|
||||
|
||||
internal void Stop() {
|
||||
internal void Stop(bool leave = false) {
|
||||
Stopped = true;
|
||||
SongQueue.Clear();
|
||||
CurrentSong?.Stop();
|
||||
CurrentSong = null;
|
||||
VoiceClient?.Disconnect();
|
||||
VoiceClient = null;
|
||||
if (leave) {
|
||||
VoiceClient?.Disconnect();
|
||||
VoiceClient = null;
|
||||
|
||||
MusicControls throwAwayValue;
|
||||
MusicModule.musicPlayers.TryRemove(_e.Server, out throwAwayValue);
|
||||
MusicControls throwAwayValue;
|
||||
MusicModule.musicPlayers.TryRemove(_e.Server, out throwAwayValue);
|
||||
}
|
||||
}
|
||||
|
||||
public int SetVolume(int value) {
|
||||
|
@ -49,7 +49,7 @@ namespace NadekoBot.Classes.Music {
|
||||
this.Server = e.Server;
|
||||
this.Query = query;
|
||||
this.RadioLink = radio;
|
||||
mc.SongQueue.Add(this);
|
||||
mc.AddSong(this);
|
||||
}
|
||||
|
||||
public async Task Resolve() {
|
||||
|
@ -16,7 +16,7 @@ namespace NadekoBot.Commands {
|
||||
{"%servers%", ()=> NadekoBot.client.Servers.Count().ToString() },
|
||||
{"%users%", () => NadekoBot.client.Servers.SelectMany(s=>s.Users).Count().ToString() },
|
||||
{"%playing%", () => {
|
||||
var cnt = Modules.Music.musicPlayers.Count;
|
||||
var cnt = Modules.Music.musicPlayers.Where(kvp => kvp.Value.CurrentSong != null).Count();
|
||||
if(cnt == 1) {
|
||||
try {
|
||||
var mp = Modules.Music.musicPlayers.FirstOrDefault();
|
||||
|
@ -49,7 +49,7 @@ namespace NadekoBot.Modules {
|
||||
.Description("Completely stops the music, unbinds the bot from the channel, and cleans up files.")
|
||||
.Do(e => {
|
||||
if (musicPlayers.ContainsKey(e.Server) == false) return;
|
||||
musicPlayers[e.Server].Stop();
|
||||
musicPlayers[e.Server].Stop(true);
|
||||
});
|
||||
|
||||
cgb.CreateCommand("p")
|
||||
|
Loading…
Reference in New Issue
Block a user