diff --git a/src/Commands/BanCommandGroup.cs b/src/Commands/BanCommandGroup.cs
index 14f6d4f..51529aa 100644
--- a/src/Commands/BanCommandGroup.cs
+++ b/src/Commands/BanCommandGroup.cs
@@ -91,8 +91,7 @@ public class BanCommandGroup : CommandGroup {
IUser target, string reason, TimeSpan? duration, IGuild guild, Snowflake channelId,
IUser user, IUser currentUser) {
var data = await _dataService.GetData(guild.ID, CancellationToken);
- var cfg = data.Settings;
- Messages.Culture = GuildSettings.Language.Get(cfg);
+ Messages.Culture = GuildSettings.Language.Get(data.Settings);
var existingBanResult = await _guildApi.GetGuildBanAsync(guild.ID, target.ID, CancellationToken);
if (existingBanResult.IsDefined()) {
@@ -152,7 +151,8 @@ public class BanCommandGroup : CommandGroup {
title, target)
.WithColour(ColorsList.Green).Build();
- var logResult = _utility.LogActionAsync(cfg, channelId, user, title, description, target, CancellationToken);
+ var logResult = _utility.LogActionAsync(
+ data.Settings, channelId, user, title, description, target, CancellationToken);
if (!logResult.IsSuccess)
return Result.FromError(logResult.Error);
diff --git a/src/Commands/MuteCommandGroup.cs b/src/Commands/MuteCommandGroup.cs
index eff7029..c572b78 100644
--- a/src/Commands/MuteCommandGroup.cs
+++ b/src/Commands/MuteCommandGroup.cs
@@ -7,13 +7,13 @@ using Remora.Commands.Attributes;
using Remora.Commands.Groups;
using Remora.Discord.API.Abstractions.Objects;
using Remora.Discord.API.Abstractions.Rest;
-using Remora.Discord.API.Objects;
using Remora.Discord.Commands.Attributes;
using Remora.Discord.Commands.Conditions;
using Remora.Discord.Commands.Contexts;
using Remora.Discord.Commands.Feedback.Services;
using Remora.Discord.Extensions.Embeds;
using Remora.Discord.Extensions.Formatting;
+using Remora.Rest.Core;
using Remora.Results;
namespace Boyfriend.Commands;
@@ -23,20 +23,17 @@ namespace Boyfriend.Commands;
///
[UsedImplicitly]
public class MuteCommandGroup : CommandGroup {
- private readonly IDiscordRestChannelAPI _channelApi;
- private readonly ICommandContext _context;
- private readonly GuildDataService _dataService;
- private readonly FeedbackService _feedbackService;
- private readonly IDiscordRestGuildAPI _guildApi;
- private readonly IDiscordRestUserAPI _userApi;
- private readonly UtilityService _utility;
+ private readonly ICommandContext _context;
+ private readonly GuildDataService _dataService;
+ private readonly FeedbackService _feedbackService;
+ private readonly IDiscordRestGuildAPI _guildApi;
+ private readonly IDiscordRestUserAPI _userApi;
+ private readonly UtilityService _utility;
public MuteCommandGroup(
- ICommandContext context, IDiscordRestChannelAPI channelApi, GuildDataService dataService,
- FeedbackService feedbackService, IDiscordRestGuildAPI guildApi, IDiscordRestUserAPI userApi,
- UtilityService utility) {
+ ICommandContext context, GuildDataService dataService, FeedbackService feedbackService,
+ IDiscordRestGuildAPI guildApi, IDiscordRestUserAPI userApi, UtilityService utility) {
_context = context;
- _channelApi = channelApi;
_dataService = dataService;
_feedbackService = feedbackService;
_guildApi = guildApi;
@@ -57,7 +54,7 @@ public class MuteCommandGroup : CommandGroup {
/// A feedback sending result which may or may not have succeeded. A successful result does not mean that the member
/// was muted and vice-versa.
///
- ///
+ ///
[Command("mute", "мут")]
[DiscordDefaultMemberPermissions(DiscordPermission.ModerateMembers)]
[DiscordDefaultDMPermission(false)]
@@ -66,7 +63,7 @@ public class MuteCommandGroup : CommandGroup {
[RequireBotDiscordPermissions(DiscordPermission.ModerateMembers)]
[Description("Mute member")]
[UsedImplicitly]
- public async Task MuteUserAsync(
+ public async Task ExecuteMute(
[Description("Member to mute")] IUser target,
[Description("Mute reason")] string reason,
[Description("Mute duration")] TimeSpan duration) {
@@ -79,6 +76,13 @@ public class MuteCommandGroup : CommandGroup {
if (!currentUserResult.IsDefined(out var currentUser))
return Result.FromError(currentUserResult);
+ var userResult = await _userApi.GetUserAsync(userId.Value, CancellationToken);
+ if (!userResult.IsDefined(out var user))
+ return Result.FromError(userResult);
+
+ var data = await _dataService.GetData(guildId.Value, CancellationToken);
+ Messages.Culture = GuildSettings.Language.Get(data.Settings);
+
var memberResult = await _guildApi.GetGuildMemberAsync(guildId.Value, target.ID, CancellationToken);
if (!memberResult.IsSuccess) {
var embed = new EmbedBuilder().WithSmallTitle(Messages.UserNotFoundShort, currentUser)
@@ -87,71 +91,48 @@ public class MuteCommandGroup : CommandGroup {
return await _feedbackService.SendContextualEmbedResultAsync(embed, CancellationToken);
}
+ return await MuteUserAsync(target, reason, duration, guildId.Value, data, channelId.Value, user, currentUser);
+ }
+
+ private async Task MuteUserAsync(
+ IUser target, string reason, TimeSpan duration, Snowflake guildId, GuildData data, Snowflake channelId,
+ IUser user, IUser currentUser) {
var interactionResult
= await _utility.CheckInteractionsAsync(
- guildId.Value, userId.Value, target.ID, "Mute", CancellationToken);
+ guildId, user.ID, target.ID, "Mute", CancellationToken);
if (!interactionResult.IsSuccess)
return Result.FromError(interactionResult);
- var data = await _dataService.GetData(guildId.Value, CancellationToken);
- var cfg = data.Settings;
- Messages.Culture = GuildSettings.Language.Get(cfg);
-
- Result