From faab2ddc8a71f8c441a636c4c49131cd0c23690c Mon Sep 17 00:00:00 2001 From: Wizzy69 Date: Fri, 8 Apr 2022 21:23:36 +0300 Subject: [PATCH] --- BUILDS/net5.0/CMD_Utils.dll | Bin 11776 -> 18944 bytes BUILDS/net5.0/ref/CMD_Utils.dll | Bin 7168 -> 8704 bytes CMD_Utils/Music/Data.cs | 17 +++++++ CMD_Utils/Music/Leave.cs | 34 ++++++++++++++ CMD_Utils/Music/Pause.cs | 33 ++++++++++++++ CMD_Utils/Music/Play.cs | 77 ++++++++++++++++++++++++++++++++ 6 files changed, 161 insertions(+) create mode 100644 CMD_Utils/Music/Data.cs create mode 100644 CMD_Utils/Music/Leave.cs create mode 100644 CMD_Utils/Music/Pause.cs create mode 100644 CMD_Utils/Music/Play.cs diff --git a/BUILDS/net5.0/CMD_Utils.dll b/BUILDS/net5.0/CMD_Utils.dll index 6811276d54816fc28bd8805064f995d553b176d3..2da542318741c03310745a1e1e6e53280318ff5a 100644 GIT binary patch literal 18944 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 literal 11776 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 G2>cHOYE4`K diff --git a/BUILDS/net5.0/ref/CMD_Utils.dll b/BUILDS/net5.0/ref/CMD_Utils.dll index 5a716e784397857f6b1428b82afc2027e05cbc8f..663a24d3737b479e2ff28266522d1aae0fad79e1 100644 GIT binary patch literal 8704 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 p>TSD?@z`5Q>7JTd?P diff --git a/CMD_Utils/Music/Data.cs b/CMD_Utils/Music/Data.cs new file mode 100644 index 0000000..68b2f2b --- /dev/null +++ b/CMD_Utils/Music/Data.cs @@ -0,0 +1,17 @@ +using Discord; +using Discord.Audio; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CMD_Utils.Music +{ + internal static class Data + { + internal static IAudioClient audioClient; + internal static IVoiceChannel voiceChannel; + } +} diff --git a/CMD_Utils/Music/Leave.cs b/CMD_Utils/Music/Leave.cs new file mode 100644 index 0000000..492214e --- /dev/null +++ b/CMD_Utils/Music/Leave.cs @@ -0,0 +1,34 @@ +using Discord.Commands; +using Discord.WebSocket; + +using PluginManager.Interfaces; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CMD_Utils.Music +{ + class Leave : DBCommand + { + public string Command => "leave"; + + public string Description => "Leave the voice channel"; + + public string Usage => "leave"; + + public bool canUseDM => false; + + public bool canUseServer => true; + + public bool requireAdmin => false; + + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + { + await Data.audioClient.StopAsync(); + await Data.voiceChannel.DisconnectAsync(); + } + } +} diff --git a/CMD_Utils/Music/Pause.cs b/CMD_Utils/Music/Pause.cs new file mode 100644 index 0000000..16d9872 --- /dev/null +++ b/CMD_Utils/Music/Pause.cs @@ -0,0 +1,33 @@ +using Discord.Commands; +using Discord.WebSocket; + +using PluginManager.Interfaces; + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace CMD_Utils.Music +{ + class Pause : DBCommand + { + public string Command => "pause"; + + public string Description => "Pause the music"; + + public string Usage => "pause"; + + public bool canUseDM => false; + + public bool canUseServer => true; + + public bool requireAdmin => false; + + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + { + // to be implemented + } + } +} diff --git a/CMD_Utils/Music/Play.cs b/CMD_Utils/Music/Play.cs new file mode 100644 index 0000000..f2cbac2 --- /dev/null +++ b/CMD_Utils/Music/Play.cs @@ -0,0 +1,77 @@ +using Discord; +using Discord.Audio; +using Discord.Commands; +using Discord.WebSocket; + +using Microsoft.VisualBasic; + +using PluginManager.Interfaces; +using PluginManager.Others; + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Channels; +using System.Threading.Tasks; + +namespace CMD_Utils.Music +{ + class Play : DBCommand + { + public string Command => "fplay"; + + public string Description => "Play music from a file"; + + public string Usage => "fplay [name]"; + + public bool canUseDM => false; + + public bool canUseServer => true; + + public bool requireAdmin => false; + + public async void Execute(SocketCommandContext context, SocketMessage message, DiscordSocketClient client, bool isDM) + { + string path = "./Music"; + string FileName = Functions.GetArguments(message).ToArray().MergeStrings(0); + path += "/" + FileName + ".mp3"; + if (!File.Exists(path)) + { + Console.WriteLine("Unknown path " + path); + return; + } + + // Get the audio channel + + Data.voiceChannel = (context.User as IGuildUser)?.VoiceChannel; + if (Data.voiceChannel == null) { await context.Channel.SendMessageAsync("User must be in a voice channel, or a voice channel must be passed as an argument."); return; } + + // For the next step with transmitting audio, you would want to pass this Audio Client in to a service. + Data.audioClient = await Data.voiceChannel.ConnectAsync(); + + + // Create FFmpeg using the previous example + using (var ffmpeg = CreateStream(path)) + using (var output = ffmpeg.StandardOutput.BaseStream) + using (var discord = Data.audioClient.CreatePCMStream(AudioApplication.Mixed)) + { + try { await output.CopyToAsync(discord); } + finally { await discord.FlushAsync(); } + } + } + + private 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, + }); + } + } +}