diff --git a/NadekoBot/Modules/Music/Classes/MusicControls.cs b/NadekoBot/Modules/Music/Classes/MusicControls.cs
index 70c5ef98..7011f092 100644
--- a/NadekoBot/Modules/Music/Classes/MusicControls.cs
+++ b/NadekoBot/Modules/Music/Classes/MusicControls.cs
@@ -175,6 +175,14 @@ namespace NadekoBot.Modules.Music.Classes
}
}
+ public void AddSong(Song s, int index) {
+ if (s == null)
+ throw new ArgumentNullException(nameof(s));
+ lock (playlistLock) {
+ playlist.Insert(index, s);
+ }
+ }
+
public void RemoveSong(Song s)
{
if (s == null)
diff --git a/NadekoBot/Modules/Music/Classes/Song.cs b/NadekoBot/Modules/Music/Classes/Song.cs
index 2abf22f3..5c2a7466 100644
--- a/NadekoBot/Modules/Music/Classes/Song.cs
+++ b/NadekoBot/Modules/Music/Classes/Song.cs
@@ -43,11 +43,30 @@ namespace NadekoBot.Modules.Music.Classes
private ulong bytesSent { get; set; } = 0;
+ public bool PrintStatusMessage { get; set; } = true;
+
+ private int skipTo = 0;
+ public int SkipTo {
+ get { return SkipTo; }
+ set {
+ skipTo = value;
+ bytesSent = (ulong)skipTo * 3840 * 50;
+ }
+ }
+
private Song(SongInfo songInfo)
{
this.SongInfo = songInfo;
}
+ public Song Clone()
+ {
+ var s = new Song(SongInfo);
+ s.MusicPlayer = MusicPlayer;
+ s.State = StreamState.Queued;
+ return s;
+ }
+
private Task BufferSong(CancellationToken cancelToken) =>
Task.Factory.StartNew(async () =>
{
@@ -57,7 +76,7 @@ namespace NadekoBot.Modules.Music.Classes
p = Process.Start(new ProcessStartInfo
{
FileName = "ffmpeg",
- Arguments = $"-i {SongInfo.Uri} -f s16le -ar 48000 -ac 2 pipe:1 -loglevel quiet",
+ Arguments = $"-ss {skipTo} -i {SongInfo.Uri} -f s16le -ar 48000 -ac 2 pipe:1 -loglevel quiet",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = false,
diff --git a/NadekoBot/Modules/Music/MusicModule.cs b/NadekoBot/Modules/Music/MusicModule.cs
index c770d75a..bcd2bc0e 100644
--- a/NadekoBot/Modules/Music/MusicModule.cs
+++ b/NadekoBot/Modules/Music/MusicModule.cs
@@ -1,8 +1,8 @@
using Discord;
using Discord.Commands;
using Discord.Modules;
-using NadekoBot.DataModels;
using NadekoBot.Classes;
+using NadekoBot.DataModels;
using NadekoBot.Extensions;
using NadekoBot.Modules.Music.Classes;
using NadekoBot.Modules.Permissions.Classes;
@@ -534,6 +534,42 @@ namespace NadekoBot.Modules.Music
}
}
});
+
+ cgb.CreateCommand("goto")
+ .Description("Goes to a specific time in seconds in a song.")
+ .Parameter("time")
+ .Do(async e =>
+ {
+ var skipToStr = e.GetArg("time")?.Trim();
+ MusicPlayer musicPlayer;
+ if (!MusicPlayers.TryGetValue(e.Server, out musicPlayer))
+ return;
+
+ int skipTo;
+ if (!int.TryParse(skipToStr, out skipTo) || skipTo < 0)
+ return;
+
+ var currentSong = musicPlayer.CurrentSong;
+
+ if (currentSong == null)
+ return;
+
+ //currentSong.PrintStatusMessage = false;
+ var gotoSong = currentSong.Clone();
+ gotoSong.SkipTo = skipTo;
+ musicPlayer.AddSong(gotoSong, 0);
+ musicPlayer.Next();
+
+ var minutes = (skipTo / 60).ToString();
+ var seconds = (skipTo % 60).ToString();
+
+ if (minutes.Length == 1)
+ minutes = "0" + minutes;
+ if (seconds.Length == 1)
+ seconds = "0" + seconds;
+
+ await e.Channel.SendMessage($"`Skipped to {minutes}:{seconds}`");
+ });
});
}
@@ -561,27 +597,35 @@ namespace NadekoBot.Modules.Music
Message lastFinishedMessage = null;
mp.OnCompleted += async (s, song) =>
{
- try
+ if (song.PrintStatusMessage)
{
- if (lastFinishedMessage != null)
- await lastFinishedMessage.Delete();
- if (playingMessage != null)
- await playingMessage.Delete();
- lastFinishedMessage = await textCh.SendMessage($"🎵`Finished`{song.PrettyName}");
+ try
+ {
+ if (lastFinishedMessage != null)
+ await lastFinishedMessage.Delete();
+ if (playingMessage != null)
+ await playingMessage.Delete();
+ lastFinishedMessage = await textCh.SendMessage($"🎵`Finished`{song.PrettyName}");
+ }
+ catch { }
}
- catch { }
};
mp.OnStarted += async (s, song) =>
{
- var sender = s as MusicPlayer;
- if (sender == null)
- return;
- try
+ if (song.PrintStatusMessage)
{
- var msgTxt = $"🎵`Playing`{song.PrettyName} `Vol: {(int)(sender.Volume * 100)}%`";
- playingMessage = await textCh.SendMessage(msgTxt);
+ var sender = s as MusicPlayer;
+ if (sender == null)
+ return;
+
+ try
+ {
+
+ var msgTxt = $"🎵`Playing`{song.PrettyName} `Vol: {(int)(sender.Volume * 100)}%`";
+ playingMessage = await textCh.SendMessage(msgTxt);
+ }
+ catch { }
}
- catch { }
};
return mp;
});
diff --git a/NadekoBot/NadekoBot.csproj b/NadekoBot/NadekoBot.csproj
index e098355f..12f1a2bc 100644
--- a/NadekoBot/NadekoBot.csproj
+++ b/NadekoBot/NadekoBot.csproj
@@ -40,7 +40,7 @@
full
false
bin\Debug\
- DEBUG;TRACE
+ TRACE;DEBUG;__DEMO__,__DEMO_EXPERIMENTAL__
prompt
4
true