music fixes, added !m rm # command

This commit is contained in:
Master Kwoth 2016-02-14 23:48:07 +01:00
parent 5901e25c42
commit 260f57372a
3 changed files with 52 additions and 21 deletions

View File

@ -31,7 +31,7 @@ namespace NadekoBot.Classes.Music {
public string Title { get; internal set; } = String.Empty;
private string Provider { get; set; }
public string FullPrettyName => $"**【 {Title.TrimTo(55)} 】**`{Provider}`";
public string FullPrettyName => $"**【 {Title.TrimTo(55)} 】**`{(Provider == null ? "-" : Provider)}`";
private MusicStreamer musicStreamer = null;
public StreamState State => musicStreamer?.State ?? privateState;
@ -74,7 +74,8 @@ namespace NadekoBot.Classes.Music {
Provider = "SoundCloud";
uri = svideo.StreamLink;
Console.WriteLine(uri);
} else {
}
else {
if (OnResolving != null)
OnResolving();
@ -89,11 +90,12 @@ namespace NadekoBot.Classes.Music {
if (video == null) // do something with this error
throw new Exception("Could not load any video elements based on the query.");
Title = video.Title.Substring(0,video.Title.Length-10); // removing trailing "- You Tube"
Title = video.Title.Substring(0, video.Title.Length - 10); // removing trailing "- You Tube"
Provider = "YouTube";
uri = video.Uri;
}
} catch (Exception ex) {
}
catch (Exception ex) {
privateState = StreamState.Completed;
if (OnResolvingFailed != null)
OnResolvingFailed(ex.Message);
@ -134,10 +136,12 @@ namespace NadekoBot.Classes.Music {
}
}
await musicStreamer.StartPlayback();
} catch (TimeoutException) {
}
catch (TimeoutException) {
Console.WriteLine("Resolving timed out.");
privateState = StreamState.Completed;
} catch (Exception ex) {
}
catch (Exception ex) {
Console.WriteLine("Error in start playback." + ex.Message);
privateState = StreamState.Completed;
}
@ -169,7 +173,7 @@ namespace NadekoBot.Classes.Music {
$"Server: {parent.Server.Name}\n" +
$"Length:{buffer.Length * 1.0f / 1.MB()}MB Status: {State}\n" +
"--------------------------------\n";
private async Task BufferSong() {
//start feeding the buffer
var p = Process.Start(new ProcessStartInfo {
@ -192,7 +196,8 @@ namespace NadekoBot.Classes.Music {
try {
p.CancelOutputRead();
p.Close();
} catch { }
}
catch { }
Console.WriteLine("Buffering canceled, stream is completed.");
return;
}
@ -221,15 +226,18 @@ namespace NadekoBot.Classes.Music {
try {
p.CancelOutputRead();
p.Close();
} catch { }
}
catch { }
Console.WriteLine($"Didn't read anything from the stream for {attempt} attempts. {buffer.Length/1.MB()}MB length");
Console.WriteLine($"Didn't read anything from the stream for {attempt} attempts. {buffer.Length / 1.MB()}MB length");
return;
} else {
}
else {
++attempt;
await Task.Delay(20);
}
} else {
}
else {
attempt = 0;
await buffer.WriteAsync(buf, 0, read);
}
@ -254,16 +262,17 @@ namespace NadekoBot.Classes.Music {
await Task.Delay(waitPerAttempt);
}
if (prebufferingComplete) {
Console.WriteLine($"Prebuffering finished in {bufferAttempts*500}");
Console.WriteLine($"Prebuffering finished in {bufferAttempts * 500}");
}
// prebuffering wait stuff end
if (buffer.Length > 0) {
Console.WriteLine("Prebuffering complete.");
} else {
}
else {
Console.WriteLine("Nothing was buffered, try another song and check your GoogleApikey.");
}
int blockSize = 1920 * NadekoBot.client.Services.Get<AudioService>().Config.Channels;
byte[] voiceBuffer = new byte[blockSize];
@ -274,7 +283,7 @@ namespace NadekoBot.Classes.Music {
while (!IsCanceled) {
int readCount = 0;
//adjust volume
lock (_bufferLock) {
readCount = buffer.Read(voiceBuffer, 0, voiceBuffer.Length);
}
@ -283,11 +292,13 @@ namespace NadekoBot.Classes.Music {
if (attempt == 4) {
Console.WriteLine($"Failed to read {attempt} times. Breaking out. [{DateTime.Now.Second}]");
break;
} else {
}
else {
++attempt;
await Task.Delay(15);
}
} else
}
else
attempt = 0;
if (State == StreamState.Completed) {

View File

@ -52,7 +52,10 @@ namespace NadekoBot.Commands {
if (controls.ByePM) {
Greeted++;
await e.User.SendMessage($"`Farewell Message From {e.Server.Name}`\n" + msg);
try {
await e.User.SendMessage($"`Farewell Message From {e.Server?.Name}`\n" + msg);
}
catch { }
} else {
if (channel == null) return;
Greeted++;

View File

@ -207,6 +207,23 @@ namespace NadekoBot.Modules {
mc.VoiceClient = await mc.VoiceChannel.JoinAudio();
});
cgb.CreateCommand("rm")
.Description("Removes a song by a # from the queue")
.Parameter("num",ParameterType.Required)
.Do(async e => {
var arg = e.GetArg("num");
int num;
MusicControls mc;
if (!musicPlayers.TryGetValue(e.Server, out mc) || !int.TryParse(arg, out num)) {
return;
}
if (num <= 0 || num > mc.SongQueue.Count)
return;
mc.SongQueue.RemoveAt(num - 1);
await e.Send($"🎵Song at position `{num}` has been removed.");
});
cgb.CreateCommand("debug")
.Description("Writes some music data to console. **BOT OWNER ONLY**")
.Do(e => {
@ -229,7 +246,7 @@ namespace NadekoBot.Modules {
await e.Send("Failed to create a music player for this server.");
return;
}
if (query == null || query.Length < 4)
if (query == null || query.Length < 3)
return;
var player = musicPlayers[e.Server];