Splitting up, doesn't work

This commit is contained in:
2025-11-23 16:55:44 +01:00
parent d2da0069ec
commit 56fae83f03
11 changed files with 225 additions and 197 deletions

View File

@@ -0,0 +1,32 @@
namespace FluxPose.DiscordBot.Experimenting;
public class Actions<TContext>(Users.Actions<TContext> usersActions, GatewayClient client, TContext context) : ActionsBase<TContext>(context) where TContext : IInteractionContext
{
public async Task<GuildUser?> GetRandomUserFromGuild()
{
var users = await usersActions.GetAllUsersFromGuild();
var index = new Random().Next(users.Count);
return users[index];
}
public async Task RemoveRoleFromAllUsers(ulong roleId)
{
var users = await usersActions.GetAllUsersFromGuild();
foreach (var user in users)
{
if (user.RoleIds.Contains(roleId))
{
continue;
}
await client.Rest.RemoveGuildUserRoleAsync(GuildId, user.Id, roleId);
}
}
public async Task<IReadOnlyList<GuildEmoji>> GetAllGuildEmoji()
{
return await client.Rest.GetGuildEmojisAsync(GuildId);
}
}

View File

@@ -0,0 +1,16 @@
using NetCord.Services.ComponentInteractions;
namespace FluxPose.DiscordBot.Experimenting;
public class ButtonCommands : ComponentInteractionModule<ButtonInteractionContext>
{
[ComponentInteraction("testButton")]
public async Task RespondToTestButton()
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
await Context.Message.ModifyAsync(message => message.WithContent($"{Context.Message.Content}a"));
await Context.Interaction.ModifyResponseAsync(message => message.WithContent("Clicked!"));
}
}

View File

@@ -0,0 +1,107 @@
namespace FluxPose.DiscordBot.Experimenting;
public class SlashCommands(Actions<ApplicationCommandContext> experimentingActions, Users.Actions<ApplicationCommandContext> usersActions, Roles.Actions<ApplicationCommandContext> rolesActions, GatewayClient client) : ApplicationCommandModule<ApplicationCommandContext>
{
[SlashCommand("randomuser", "Get a random user from the server")]
public async Task<string> GetRandomUserCommand()
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
var randomUser = await experimentingActions.GetRandomUserFromGuild();
if (randomUser == null)
{
return $"Found no users :(";
}
return $"Here's a random user: {randomUser.Username}";
}
[SlashCommand("getroles", "Get all roles on the server")]
public async Task<string> GetRolesCommand()
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
var roles = await rolesActions.GetRolesFromGuild();
roles = [.. roles.Where(role => !role.Name.StartsWith('@'))];
if (roles.Count == 0)
{
return $"Found no roles :(";
}
return $"Roles in the server:\n{String.Join("\n", roles.Select(role => $"- {role.Id}: {role.Name}"))}";
}
[SlashCommand("giveroletouser", "Give a role")]
public async Task<string> GiveRoleToAllUsersCommand(string userId, string roleId)
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
var parsed = ulong.TryParse(userId, out ulong userIdParsed);
if (!parsed)
{
return "Invalid roleId";
}
parsed = ulong.TryParse(roleId, out ulong roleIdParsed);
if (!parsed)
{
return "Invalid roleId";
}
await rolesActions.GiveRoleToUser(userIdParsed, roleIdParsed);
return "Done.";
}
[SlashCommand("removerolefromallusers", "Remove role from all users on the server")]
public async Task<string> RemoveRoleFromAllUsersCommand(string roleId)
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
var parsed = ulong.TryParse(roleId, out ulong roleIdParsed);
if (!parsed)
{
return "Invalid roleId";
}
await experimentingActions.RemoveRoleFromAllUsers(roleIdParsed);
return "Done.";
}
[SlashCommand("defer", "Defer")]
public async Task DeferCommand()
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
Thread.Sleep(2000);
await Context.Interaction.ModifyResponseAsync(message => message.WithContent("Sup"));
Thread.Sleep(1000);
await Context.Interaction.ModifyResponseAsync(message => message.WithContent("Sup bitches"));
}
[SlashCommand("button", "Gives a button")]
public async Task ButtonCommand()
{
await Context.Interaction.SendResponseAsync(InteractionCallback.DeferredMessage());
var emojis = await experimentingActions.GetAllGuildEmoji();
EmojiProperties? emoji = null;
if (emojis.Count > 0)
{
emoji = EmojiProperties.Custom(emojis[new Random().Next(emojis.Count)].Id);
}
var button = new ButtonProperties("testButton", "Click Me!", emoji!, ButtonStyle.Primary);
var component = new ActionRowProperties([button]);
await Context.Interaction.ModifyResponseAsync(message => message.WithContent("Here's a button").WithComponents([component]));
}
}