This commit is contained in:
2022-08-16 16:14:25 +03:00
parent 2fcd86cf12
commit 1f1983480a
32 changed files with 195 additions and 65 deletions

View File

@@ -1,4 +1,5 @@
using Discord.Commands;
using System.Collections.Generic;
using Discord.Commands;
using Discord.WebSocket;
using PluginManager.Interfaces;
@@ -8,6 +9,8 @@ internal class Leave : DBCommand
{
public string Command => "leave";
public List<string> Aliases => null;
public string Description => "Leave the voice channel";
public string Usage => "leave";

View File

@@ -5,7 +5,8 @@ namespace MusicCommands;
internal class MusicPlayer
{
private Stream outputStream { get; }
private Stream outputStream { get; }
internal AudioFile NowPlaying = null;
internal bool isPlaying, isPaused;
@@ -14,9 +15,10 @@ internal class MusicPlayer
outputStream = outputChannel;
}
public async Task Play(Stream source, int byteSize)
public async Task Play(Stream source, int byteSize, AudioFile songPlaying)
{
isPlaying = true;
isPlaying = true;
NowPlaying = songPlaying;
while (isPlaying)
{
if (isPaused)

View File

@@ -1,4 +1,5 @@
using Discord.Commands;
using System.Collections.Generic;
using Discord.Commands;
using Discord.WebSocket;
using PluginManager.Interfaces;
@@ -8,6 +9,8 @@ internal class Pause : DBCommand
{
public string Command => "pause";
public List<string> Aliases => null;
public string Description => "Pause/Unpause the music that is currently running";
public string Usage => "pause";

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using Discord;
@@ -14,6 +15,8 @@ internal class Play : DBCommand
{
public string Command => "play";
public List<string> Aliases => new() { "p" };
public string Description => "Play music from a file";
public string Usage => "play [name/url]";
@@ -69,11 +72,11 @@ internal class Play : DBCommand
if (Data.MusicPlayer is not null)
{
await context.Channel.SendMessageAsync("Enqueued your request");
await context.Channel.SendMessageAsync("Queued your request: " + splitted.MergeStrings(1));
return;
}
}
while (false);
while (false); // run only one time !
Data.voiceChannel = (context.User as IGuildUser)?.VoiceChannel;
@@ -93,15 +96,14 @@ internal class Play : DBCommand
using (var discordChanneAudioOutStream = Data.audioClient.CreatePCMStream(AudioApplication.Mixed))
{
if (Data.MusicPlayer is null)
Data.MusicPlayer = new MusicPlayer(discordChanneAudioOutStream);
Data.MusicPlayer ??= new MusicPlayer(discordChanneAudioOutStream);
while (Data.Playlist.Count > 0)
{
var nowPlaying = Data.Playlist.GetNextSong;
using (var ffmpeg = CreateStream(nowPlaying.Name))
using (var ffmpegOutputBaseStream = ffmpeg.StandardOutput.BaseStream)
{
await Data.MusicPlayer.Play(ffmpegOutputBaseStream, 1024);
await Data.MusicPlayer.Play(ffmpegOutputBaseStream, 1024, nowPlaying);
Console.WriteLine("Finished playing from " + nowPlaying.Url);
}
}
@@ -110,7 +112,7 @@ internal class Play : DBCommand
}
}
private Process CreateStream(string path)
private static Process CreateStream(string path)
{
return Process.Start(new ProcessStartInfo { FileName = "ffmpeg", Arguments = $"-hide_banner -loglevel panic -i \"{path}\" -ac 2 -f s16le -ar 48000 pipe:1", UseShellExecute = false, RedirectStandardOutput = true });
}

View File

@@ -13,6 +13,8 @@ namespace MusicCommands
{
public string Command => "skip";
public List<string> Aliases => null;
public string Description => "skip the music that is currently running";
public string Usage => "skip";
@@ -25,7 +27,16 @@ namespace MusicCommands
public void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM)
{
var loadedSong = Data.MusicPlayer.NowPlaying;
if (loadedSong is null || Data.MusicPlayer.isPlaying == false)
{
message.Channel.SendMessageAsync("There is no music playing");
return;
}
Data.MusicPlayer.isPlaying = false;
message.Channel.SendMessageAsync($"You have skipped {loadedSong.Name}");
}
}
}

View File

@@ -11,7 +11,8 @@ namespace MusicCommands
{
public class queue : DBCommand
{
public string Command => "queue";
public string Command => "queue";
public List<string> Aliases => new() { "q" };
public string Description => "check queue";