From cbef37c575346a742ba8a4a178afede106770154 Mon Sep 17 00:00:00 2001 From: Myx Date: Fri, 25 Oct 2024 21:06:00 +0200 Subject: [PATCH] Fix bug with playback & add statuses --- Bot/Handler/MessageReceivedHandler.cs | 24 ++++++++++-------- .../MusicPlayer/PlayCommand/PlayHandler.cs | 4 +-- Bot/Lunaris2.csproj | 1 + Bot/Service/VoiceChannelMonitorService.cs | 25 +++++++++++++++++++ application.yml | 5 +--- 5 files changed, 42 insertions(+), 17 deletions(-) diff --git a/Bot/Handler/MessageReceivedHandler.cs b/Bot/Handler/MessageReceivedHandler.cs index 9055573..7e037b0 100644 --- a/Bot/Handler/MessageReceivedHandler.cs +++ b/Bot/Handler/MessageReceivedHandler.cs @@ -31,21 +31,23 @@ public class MessageReceivedHandler : INotificationHandler guild.Name); var channels = _client.Guilds .SelectMany(guild => guild.VoiceChannels) - .Where(channel => channel.Users.Any(user => user.IsBot)); + .Where(channel => channel.ConnectedUsers.Any(guildUser => guildUser.Id == _client.CurrentUser.Id) && + channel.Users.Count != 1); - var table = new StringBuilder(); - var serverColumnWidth = 25; // Width for server column - var channelColumnWidth = 25; // Width for channel column - table.AppendLine($"{"Servers".PadRight(serverColumnWidth - 1)}|{"Channels".PadRight(channelColumnWidth - 1)}"); - table.AppendLine($"{new string('-', serverColumnWidth - 1)}|{new string('-', channelColumnWidth - 1)}"); - foreach (var (server, channel) in servers.Zip(channels)) - { - table.AppendLine($"{server.PadRight(serverColumnWidth - 1)}|{channel.Name.PadRight(channelColumnWidth - 1)}"); - } + var statsList = new StringBuilder(); + statsList.AppendLine("➡️ Servers"); + + foreach (var server in servers) + statsList.AppendLine($"* {server}"); + + statsList.AppendLine("➡️ Now playing channels: "); + + foreach (var channel in channels) + statsList.AppendLine($"* {channel.Name} in {channel.Guild.Name}"); var embed = new EmbedBuilder() .WithTitle("Lunaris Statistics") - .WithDescription(table.ToString()) + .WithDescription(statsList.ToString()) .Build(); await notification.Message.Channel.SendMessageAsync(embed: embed); diff --git a/Bot/Handler/MusicPlayer/PlayCommand/PlayHandler.cs b/Bot/Handler/MusicPlayer/PlayCommand/PlayHandler.cs index fba2423..e50422a 100644 --- a/Bot/Handler/MusicPlayer/PlayCommand/PlayHandler.cs +++ b/Bot/Handler/MusicPlayer/PlayCommand/PlayHandler.cs @@ -105,7 +105,7 @@ public class PlayHandler : IRequestHandler var trackLoadOptions = new TrackLoadOptions { - SearchMode = TrackSearchMode.YouTube, + SearchMode = TrackSearchMode.YouTubeMusic, }; var trackCollection = await _audioService.Tracks.LoadTracksAsync(searchQuery, trackLoadOptions, cancellationToken: cancellationToken); @@ -145,7 +145,7 @@ public class PlayHandler : IRequestHandler else { // It's just a single track or a search result. - var track = trackCollection.Tracks.FirstOrDefault(); + var track = trackCollection.Track; if (track != null) { diff --git a/Bot/Lunaris2.csproj b/Bot/Lunaris2.csproj index d094e83..4bc588a 100644 --- a/Bot/Lunaris2.csproj +++ b/Bot/Lunaris2.csproj @@ -6,6 +6,7 @@ enable enable ec2f340f-a44c-4869-ab79-a12ba9459d80 + 0.0.1337 diff --git a/Bot/Service/VoiceChannelMonitorService.cs b/Bot/Service/VoiceChannelMonitorService.cs index 78e997b..7ba695e 100644 --- a/Bot/Service/VoiceChannelMonitorService.cs +++ b/Bot/Service/VoiceChannelMonitorService.cs @@ -1,3 +1,4 @@ +using Discord; using Discord.WebSocket; namespace Lunaris2.Service @@ -25,6 +26,30 @@ namespace Lunaris2.Service } private async Task CheckVoiceChannels() + { + SetStatus(); + await LeaveOnAlone(); + } + + private void SetStatus() + { + var channels = _client.Guilds + .SelectMany(guild => guild.VoiceChannels) + .Count(channel => + channel.ConnectedUsers + .Any(guildUser => guildUser.Id == _client.CurrentUser.Id) && + channel.Users.Count > 1 + ); + + if (channels == 0) + _client.SetGameAsync(System.Reflection.Assembly.GetEntryAssembly()?.GetName().Version?.ToString(), type: ActivityType.CustomStatus); + else if(channels == 1) + _client.SetGameAsync("in 1 server", type: ActivityType.Playing); + else if(channels > 1) + _client.SetGameAsync($" in {channels} servers", type: ActivityType.Playing); + } + + private async Task LeaveOnAlone() { foreach (var guild in _client.Guilds) { diff --git a/application.yml b/application.yml index 66e0603..eba40ec 100644 --- a/application.yml +++ b/application.yml @@ -49,12 +49,9 @@ plugins: # Clients are queried in the order they are given (so the first client is queried first and so on...) clients: - MUSIC - - ANDROID_TESTSUITE - WEB - TVHTML5EMBEDDED - # name: # Name of the plugin - # some_key: some_value # Some key-value pair for the plugin - # another_key: another_value + - ANDROID_TESTSUITE lavalink: plugins: - dependency: com.github.devoxin:lavadspx-plugin:0.0.5 # replace {VERSION} with the latest version from the "Releases" tab.