2022-02-25 04:53:08 +00:00
|
|
|
|
using BirthdayBot.Data;
|
|
|
|
|
using Discord.Interactions;
|
|
|
|
|
|
|
|
|
|
namespace BirthdayBot.ApplicationCommands;
|
|
|
|
|
|
|
|
|
|
// Contains preconditions used by our interaction modules.
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Precondition requiring the executing user be considered a bot moderator.
|
|
|
|
|
/// That is, they must either have the Manage Server permission or be a member of the designated bot moderator role.
|
|
|
|
|
/// </summary>
|
|
|
|
|
class RequireBotModeratorAttribute : PreconditionAttribute {
|
2022-03-11 03:23:08 +00:00
|
|
|
|
public const string FailMsg = "User did not pass the mod check.";
|
|
|
|
|
public const string Reply = ":x: You must be a moderator to use this command.";
|
2022-02-25 04:53:08 +00:00
|
|
|
|
|
2022-03-11 03:23:08 +00:00
|
|
|
|
public override string ErrorMessage => FailMsg;
|
|
|
|
|
|
|
|
|
|
public override async Task<PreconditionResult> CheckRequirementsAsync(
|
|
|
|
|
IInteractionContext context, ICommandInfo commandInfo, IServiceProvider services) {
|
2022-02-25 04:53:08 +00:00
|
|
|
|
if (context.User is not SocketGuildUser user) {
|
2022-03-11 03:23:08 +00:00
|
|
|
|
return PreconditionResult.FromError("Failed due to non-guild context.");
|
2022-02-25 04:53:08 +00:00
|
|
|
|
}
|
|
|
|
|
|
2022-03-11 03:23:08 +00:00
|
|
|
|
if (user.GuildPermissions.ManageGuild) return PreconditionResult.FromSuccess();
|
|
|
|
|
var gconf = await ((SocketGuild)context.Guild).GetConfigAsync().ConfigureAwait(false);
|
|
|
|
|
if (gconf.ModeratorRole.HasValue && user.Roles.Any(r => r.Id == gconf.ModeratorRole.Value))
|
|
|
|
|
return PreconditionResult.FromSuccess();
|
|
|
|
|
|
|
|
|
|
return PreconditionResult.FromError(FailMsg);
|
2022-02-25 04:53:08 +00:00
|
|
|
|
}
|
|
|
|
|
}
|