From 9df9090812108fb63cecd9e7cb33cf76d0bc62de Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jos=C3=A9=20Henrique=20Ivanchechen?=
 <jose.henrique.ivan@gmail.com>
Date: Sun, 30 Jul 2023 23:37:37 -0300
Subject: [PATCH] adding flags

---
 Kasbot.csproj              |  6 ++++++
 Models/Connection.cs       | 14 ++++++++++++++
 Models/Flags.cs            | 30 ++++++++++++++++++++++++++++++
 Modules/PublicModule.cs    |  3 ++-
 README.md                  |  6 ++++++
 Services/PlayerService.cs  | 35 +++++++++++++----------------------
 Services/YoutubeService.cs |  3 ++-
 7 files changed, 73 insertions(+), 24 deletions(-)
 create mode 100644 Models/Connection.cs
 create mode 100644 Models/Flags.cs

diff --git a/Kasbot.csproj b/Kasbot.csproj
index 6292c45..01ee786 100644
--- a/Kasbot.csproj
+++ b/Kasbot.csproj
@@ -7,6 +7,12 @@
     <Nullable>enable</Nullable>
   </PropertyGroup>
 
+  <ItemGroup>
+    <Compile Remove="legacy\**" />
+    <EmbeddedResource Remove="legacy\**" />
+    <None Remove="legacy\**" />
+  </ItemGroup>
+
   <ItemGroup>
     <PackageReference Include="Discord.Net" Version="3.11.0" />
     <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
diff --git a/Models/Connection.cs b/Models/Connection.cs
new file mode 100644
index 0000000..9531614
--- /dev/null
+++ b/Models/Connection.cs
@@ -0,0 +1,14 @@
+using Discord;
+using Discord.Audio;
+using Kasbot.Services;
+
+namespace Kasbot.Models
+{
+    public class Connection
+    {
+        public IAudioClient AudioClient { get; set; }
+        public IVoiceChannel AudioChannel { get; set; }
+        public Stream? CurrentAudioStream { get; set; }
+        public Queue<Media> Queue { get; set; } = new Queue<Media>();
+    }
+}
diff --git a/Models/Flags.cs b/Models/Flags.cs
new file mode 100644
index 0000000..3a2c552
--- /dev/null
+++ b/Models/Flags.cs
@@ -0,0 +1,30 @@
+namespace Kasbot.Models
+{
+    public class Flags
+    {
+        public bool Silent { get; set; }
+        public bool Repeat { get; set; }
+
+        public Flags() { }
+
+        public Flags(string command)
+        {
+            this.Parse(command);
+        }
+
+        public void Parse(string command)
+        {
+            if (command.Contains("-s") ||
+                command.Contains("-silent"))
+            {
+                Silent = true;
+            }
+
+            if (command.Contains("-r") ||
+                command.Contains("-repeat"))
+            {
+                Repeat = true;
+            }
+        }
+    }
+}
diff --git a/Modules/PublicModule.cs b/Modules/PublicModule.cs
index d52c330..0c95dbe 100644
--- a/Modules/PublicModule.cs
+++ b/Modules/PublicModule.cs
@@ -1,5 +1,6 @@
 using Discord;
 using Discord.Commands;
+using Kasbot.Models;
 using Kasbot.Services;
 using TextCommandFramework.Services;
 
@@ -30,7 +31,7 @@ namespace TextCommandFramework.Modules
                 throw new Exception("You must be connect in a voice channel!");
             }
 
-            await PlayerService.Play(Context, text);
+            await PlayerService.Play(Context, text, new Flags(text));
         }
 
         [Command("join", RunMode = RunMode.Async)]
diff --git a/README.md b/README.md
index 2234a0c..ada2a56 100644
--- a/README.md
+++ b/README.md
@@ -19,4 +19,10 @@ dotnet bin/Kasbot.dll
 | `!leave` | Leaves the current voice channel and clears the queue |
 | `!cat` | Sends a random cat pic into the channel :3 |
 
+## Play flags
+| Flag | Description
+| -- | -- |
+| `-s`, `-silent` | Don't send play message into channel |
+| `-r`, `-repeat` | Repeat music |
+
 You can change the command prefix by putting another symbol in `COMMAND_PREFIX` environment variable.
\ No newline at end of file
diff --git a/Services/PlayerService.cs b/Services/PlayerService.cs
index 5246df0..9b70883 100644
--- a/Services/PlayerService.cs
+++ b/Services/PlayerService.cs
@@ -2,8 +2,8 @@
 using Discord.Audio;
 using Discord.Commands;
 using Kasbot.Extensions;
+using Kasbot.Models;
 using System.Diagnostics;
-using System.Linq;
 
 namespace Kasbot.Services
 {
@@ -35,13 +35,14 @@ namespace Kasbot.Services
             return conn;
         }
 
-        public async Task Play(ShardedCommandContext Context, string arguments)
+        public async Task Play(ShardedCommandContext Context, string arguments, Flags flags)
         {
             var media = new Media()
             {
                 Message = Context.Message,
                 Search = arguments,
-                Name = ""
+                Flags = flags,
+                Name = "",
             };
             var guildId = Context.Guild.Id;
             var userVoiceChannel = (Context.User as IVoiceState).VoiceChannel;
@@ -66,12 +67,6 @@ namespace Kasbot.Services
         {
             var startPlay = conn.Queue.Count == 0;
 
-            if (media.Search.Contains("-r"))
-            {
-                media.Repeat = true;
-                media.Search.Replace("-r", "");
-            }
-
             media.Search.Trim();
 
             switch (YoutubeService.GetSearchType(media.Search))
@@ -148,8 +143,11 @@ namespace Kasbot.Services
             var audioClient = Clients[guildId].AudioClient;
             var ffmpeg = CreateStream();
 
-            var message = $"⏯ Playing: **{nextMedia.Name}** *({nextMedia.Length.TotalMinutes:00}:{nextMedia.Length.Seconds:00})*";
-            nextMedia.PlayMessage = await nextMedia.Channel.SendMessageAsync(message);
+            if (!nextMedia.Flags.Silent)
+            {
+                var message = $"⏯ Playing: **{nextMedia.Name}** *({nextMedia.Length.TotalMinutes:00}:{nextMedia.Length.Seconds:00})*";
+                nextMedia.PlayMessage = await nextMedia.Channel.SendMessageAsync(message);
+            }
 
             if (nextMedia.QueueMessage != null)
             {
@@ -215,7 +213,8 @@ namespace Kasbot.Services
 
             await nextMedia.PlayMessage.TryDeleteAsync();
 
-            if (Clients[guildId].Queue.Count > 0 && !Clients[guildId].Queue.First().Repeat)
+            if (Clients[guildId].Queue.Count > 0 &&
+                !Clients[guildId].Queue.First().Flags.Repeat)
                 Clients[guildId].Queue.Dequeue();
 
             await PlayNext(guildId);
@@ -296,8 +295,8 @@ namespace Kasbot.Services
                 throw new Exception("The queue is empty!");
 
             var media = Clients[guildId].Queue.First();
-            Clients[guildId].Queue.First().Repeat = !media.Repeat;
-            await media.Channel.SendTemporaryMessageAsync(media.Repeat ? "Repeat turned on!" : "Repeat turned off!");
+            media.Flags.Repeat = !media.Flags.Repeat;
+            await media.Channel.SendTemporaryMessageAsync(media.Flags.Repeat ? "Repeat turned on!" : "Repeat turned off!");
         }
 
         public async Task Join(ShardedCommandContext Context)
@@ -309,12 +308,4 @@ namespace Kasbot.Services
             await CreateConnection(guildId, (Context.User as IVoiceState).VoiceChannel);
         }
     }
-
-    public class Connection
-    {
-        public IAudioClient AudioClient { get; set; }
-        public IVoiceChannel AudioChannel { get; set; }
-        public Stream? CurrentAudioStream { get; set; }
-        public Queue<Media> Queue { get; set; } = new Queue<Media>();
-    }
 }
diff --git a/Services/YoutubeService.cs b/Services/YoutubeService.cs
index bd4eaa1..a6c199a 100644
--- a/Services/YoutubeService.cs
+++ b/Services/YoutubeService.cs
@@ -3,6 +3,7 @@ using YoutubeExplode.Videos;
 using YoutubeExplode;
 using Discord.Rest;
 using YoutubeExplode.Videos.Streams;
+using Kasbot.Models;
 
 namespace Kasbot.Services
 {
@@ -114,11 +115,11 @@ namespace Kasbot.Services
 
         public string Name { get; set; }
         public TimeSpan Length { get; set; }
+        public Flags Flags { get; set; }
 
         public VideoId? VideoId { get; set; }
         public RestUserMessage PlayMessage { get; set; }
         public RestUserMessage? QueueMessage { get; set; }
-        public bool Repeat { get; set; }
         
         private SocketUserMessage message;
         public SocketUserMessage Message