diff --git a/Sharpy/Commands/Msg/General/Info.cs b/Sharpy/Commands/General/Info.cs similarity index 76% rename from Sharpy/Commands/Msg/General/Info.cs rename to Sharpy/Commands/General/Info.cs index 6ac21af..bc46678 100644 --- a/Sharpy/Commands/Msg/General/Info.cs +++ b/Sharpy/Commands/General/Info.cs @@ -5,19 +5,17 @@ using System.Reflection; using System.Runtime.InteropServices; using System.Threading.Tasks; using ByteSizeLib; -using DSharpPlus.CommandsNext; -using DSharpPlus.CommandsNext.Attributes; +using DSharpPlus; using DSharpPlus.Entities; +using DSharpPlus.SlashCommands; using Hardware.Info; -namespace Sharpy.Commands.Msg.General +namespace Sharpy.Commands.General { - public class Info : BaseCommandModule + public class Info : ApplicationCommandModule { - [Command("info")] - [Cooldown(5, 5, CooldownBucketType.User)] - [Description("Get info about the bot")] - public async Task InfoCommand(CommandContext ctx) + [SlashCommand("info", "Get info about the bot")] + public async Task InfoCommand(InteractionContext ctx) { var clientMember = from member in ctx.Guild.Members where member.Value.Id == ctx.Client.CurrentUser.Id @@ -25,7 +23,8 @@ namespace Sharpy.Commands.Msg.General var roleColor = clientMember.First().Color; - var loadingMsg = await ctx.RespondAsync("Loading..."); + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = "Loading..." }); var hardwareInfo = new HardwareInfo(); hardwareInfo.RefreshCPUList(); @@ -57,8 +56,8 @@ namespace Sharpy.Commands.Msg.General **Total RAM Usage**: {currentRamUsage}GB/{totalRamUsage}GB ({Math.Round(currentRamUsage / totalRamUsage * 100, 2)}%)") .Build(); - await loadingMsg.DeleteAsync(); - await ctx.RespondAsync(embed); + await ctx.CreateResponseAsync(InteractionResponseType.UpdateMessage, + new DiscordInteractionResponseBuilder().AddEmbed(embed)); } } } diff --git a/Sharpy/Commands/Msg/Music/Play.cs b/Sharpy/Commands/Msg/Music/Play.cs deleted file mode 100644 index 7b61526..0000000 --- a/Sharpy/Commands/Msg/Music/Play.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using DSharpPlus.CommandsNext; -using DSharpPlus.CommandsNext.Attributes; -using DSharpPlus.Lavalink; - -namespace Sharpy.Commands.Msg.Music -{ - public class Play : BaseCommandModule - { - [Command("play")] - [Cooldown(5, 5, CooldownBucketType.User)] - [Description("Plays a song")] - [RequireGuild] - public async Task PlayCommand(CommandContext ctx, [RemainingText] string search) - { - if (ctx.Member.VoiceState == null || ctx.Member.VoiceState.Channel == null) - { - await ctx.RespondAsync("You are not in a voice channel."); - return; - } - - var lava = ctx.Client.GetLavalink(); - - if (!lava.ConnectedNodes.Any()) - { - await ctx.RespondAsync("The Lavalink connection is not established"); - return; - } - - var node = lava.ConnectedNodes.Values.First(); - var conn = await node.ConnectAsync(ctx.Member.VoiceState.Channel); - var loadResult = await node.Rest.GetTracksAsync(search); - - if (loadResult.LoadResultType is LavalinkLoadResultType.LoadFailed or LavalinkLoadResultType.NoMatches) - { - await ctx.RespondAsync($"Track search failed for {search}."); - return; - } - - var track = loadResult.Tracks.First(); - - await conn.PlayAsync(track); - await ctx.RespondAsync($"Now playing {track.Title}!"); - } - } -} diff --git a/Sharpy/Commands/Msg/Music/Search.cs b/Sharpy/Commands/Msg/Music/Search.cs deleted file mode 100644 index 199fddf..0000000 --- a/Sharpy/Commands/Msg/Music/Search.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using DSharpPlus.CommandsNext; -using DSharpPlus.CommandsNext.Attributes; -using DSharpPlus.Entities; -using DSharpPlus.Lavalink; - -namespace Sharpy.Commands.Msg.Music -{ - public class Search : BaseCommandModule - { - [Command("search")] - [Cooldown(5, 5, CooldownBucketType.User)] - [Description("Searches for songs")] - [RequireGuild] - public async Task SearchCommand(CommandContext ctx, [RemainingText] string search) - { - var lava = ctx.Client.GetLavalink(); - - if (!lava.ConnectedNodes.Any()) - { - await ctx.RespondAsync("The Lavalink connection is not established"); - return; - } - - var node = lava.ConnectedNodes.Values.First(); - var loadResult = await node.Rest.GetTracksAsync(search); - - if (loadResult.LoadResultType is LavalinkLoadResultType.LoadFailed or LavalinkLoadResultType.NoMatches) - { - await ctx.RespondAsync($"Track search failed for {search}."); - return; - } - - var embed = new DiscordEmbedBuilder(); - embed.WithTitle($"Search Results for: `{search}`"); - - foreach (var loadResultTrack in loadResult.Tracks) - { - embed.AddField($"**{loadResultTrack.Title}**", @$"**URL**: {loadResultTrack.Uri} -**Author**: {loadResultTrack.Author} -**Length**: {loadResultTrack.Length}", true); - } - - await ctx.RespondAsync(embed.Build()); - } - } -} diff --git a/Sharpy/Commands/Music/Play.cs b/Sharpy/Commands/Music/Play.cs new file mode 100644 index 0000000..16c3dac --- /dev/null +++ b/Sharpy/Commands/Music/Play.cs @@ -0,0 +1,51 @@ +using System.Linq; +using System.Threading.Tasks; +using DSharpPlus; +using DSharpPlus.Entities; +using DSharpPlus.Lavalink; +using DSharpPlus.SlashCommands; +using DSharpPlus.SlashCommands.Attributes; + +namespace Sharpy.Commands.Music +{ + public class Play : ApplicationCommandModule + { + [SlashCommand("play", "Plays a song")] + [SlashRequireGuild] + public async Task PlayCommand(InteractionContext ctx, [Option("song", "The song to play. (Accepts YouTube URLs too)")] string song) + { + if (ctx.Member.VoiceState == null || ctx.Member.VoiceState.Channel == null) + { + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = "You are not in a voice channel." }); + return; + } + + var lava = ctx.Client.GetLavalink(); + + if (!lava.ConnectedNodes.Any()) + { + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = "The Lavalink connection is not established" }); + return; + } + + var node = lava.ConnectedNodes.Values.First(); + var conn = await node.ConnectAsync(ctx.Member.VoiceState.Channel); + var loadResult = await node.Rest.GetTracksAsync(song); + + if (loadResult.LoadResultType is LavalinkLoadResultType.LoadFailed or LavalinkLoadResultType.NoMatches) + { + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = $"Track search failed for {song}." }); + return; + } + + var track = loadResult.Tracks.First(); + + await conn.PlayAsync(track); + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = $"Now playing {track.Title}!" }); + } + } +} diff --git a/Sharpy/Commands/Music/Search.cs b/Sharpy/Commands/Music/Search.cs new file mode 100644 index 0000000..3fc22a4 --- /dev/null +++ b/Sharpy/Commands/Music/Search.cs @@ -0,0 +1,48 @@ +using System.Linq; +using System.Threading.Tasks; +using DSharpPlus; +using DSharpPlus.Entities; +using DSharpPlus.Lavalink; +using DSharpPlus.SlashCommands; +using DSharpPlus.SlashCommands.Attributes; + +namespace Sharpy.Commands.Music +{ + public class Search : ApplicationCommandModule + { + [SlashCommand("search", "Searches for songs")] + [SlashRequireGuild] + public async Task SearchCommand(InteractionContext ctx, [Option("search", "The song to search for. (Accepts YouTube URLs too)")] string search) + { + var lava = ctx.Client.GetLavalink(); + + if (!lava.ConnectedNodes.Any()) + { + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = "The Lavalink connection is not established" }); + return; + } + + var node = lava.ConnectedNodes.Values.First(); + var loadResult = await node.Rest.GetTracksAsync(search); + + if (loadResult.LoadResultType is LavalinkLoadResultType.LoadFailed or LavalinkLoadResultType.NoMatches) + { + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder { Content = $"Track search failed for {search}." }); + return; + } + + var embed = new DiscordEmbedBuilder(); + embed.WithTitle($"Search Results for: `{search}`"); + + foreach (var loadResultTrack in loadResult.Tracks) + embed.AddField($"**{loadResultTrack.Title}**", @$"**URL**: {loadResultTrack.Uri} +**Author**: {loadResultTrack.Author} +**Length**: {loadResultTrack.Length}", true); + + await ctx.CreateResponseAsync(InteractionResponseType.ChannelMessageWithSource, + new DiscordInteractionResponseBuilder().AddEmbed(embed.Build())); + } + } +} diff --git a/Sharpy/Program.cs b/Sharpy/Program.cs index d310518..f6217a3 100644 --- a/Sharpy/Program.cs +++ b/Sharpy/Program.cs @@ -1,14 +1,15 @@ using System; -using System.Reflection; using System.Threading.Tasks; using DSharpPlus; -using DSharpPlus.CommandsNext; using DSharpPlus.Entities; using DSharpPlus.Lavalink; using DSharpPlus.Net; +using DSharpPlus.SlashCommands; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; +using Sharpy.Commands.General; +using Sharpy.Commands.Music; IConfiguration config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false, true) @@ -47,34 +48,22 @@ var discord = new DiscordClient(new DiscordConfiguration var services = new ServiceCollection() .BuildServiceProvider(); -/* -var interactivity = discord.UseInteractivity(); -*/ - -// Register Msg Commands -var commands = discord.UseCommandsNext(new CommandsNextConfiguration -{ - CaseSensitive = false, - DmHelp = false, - EnableDefaultHelp = true, - EnableDms = true, - EnableMentionPrefix = true, - IgnoreExtraArguments = false, - Services = services, - StringPrefixes = new[] { "!" }, - UseDefaultCommandHandler = true -}); - -commands.RegisterCommands(Assembly.GetExecutingAssembly()); - // Register Lavalink var lavalink = discord.UseLavalink(); -/*// Register Slash Commands +// Register Slash Commands var slash = discord.UseSlashCommands(new SlashCommandsConfiguration { Services = services -});*/ +}); + +// Register Commands +// General +slash.RegisterCommands(772228301552222258); + +// Music +slash.RegisterCommands(772228301552222258); +slash.RegisterCommands(772228301552222258); await discord.ConnectAsync(new DiscordActivity("With DSharpPlus")); await lavalink.ConnectAsync(new LavalinkConfiguration diff --git a/Sharpy/Sharpy.csproj b/Sharpy/Sharpy.csproj index 6e7a44a..9cf540b 100644 --- a/Sharpy/Sharpy.csproj +++ b/Sharpy/Sharpy.csproj @@ -33,17 +33,16 @@ - - - - - - - - - - - + + + + + + + + + +