1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-04-29 10:39:53 +03:00

Async message handling, CommandHandler rewrite and rename

This commit is contained in:
Octol1ttle 2022-08-30 20:15:01 +05:00
parent 53f13d88a5
commit ac63719a0b
Signed by: Octol1ttle
GPG key ID: B77C34313AEE1FFF
19 changed files with 1061 additions and 711 deletions

View file

@ -1,46 +1,23 @@
using Discord;
using Discord.Commands;
using Discord.WebSocket;
namespace Boyfriend.Commands;
public class ClearCommand : Command {
public override string[] Aliases { get; } = { "clear", "purge", "очистить", "стереть" };
public override int ArgsLengthRequired => 1;
public override async Task Run(SocketCommandContext context, string[] args) {
var user = (SocketGuildUser)context.User;
public override async Task Run(CommandProcessor cmd, string[] args) {
if (cmd.Context.Channel is not SocketTextChannel channel) throw new Exception();
if (context.Channel is not SocketTextChannel channel) throw new Exception();
if (!cmd.HasPermission(GuildPermission.ManageMessages)) return;
var permissionCheckResponse = CommandHandler.HasPermission(ref user, GuildPermission.ManageMessages);
if (permissionCheckResponse is not "") {
Error(permissionCheckResponse, true);
return;
}
var toDelete = cmd.GetNumberRange(args, 0, 1, 200, "ClearAmount");
if (toDelete == null) return;
var messages = await channel.GetMessagesAsync((int)(toDelete + 1)).FlattenAsync();
if (!int.TryParse(args[0], out var toDelete)) {
Error(Messages.ClearInvalidAmountSpecified, false);
return;
}
var user = (SocketGuildUser)cmd.Context.User;
await channel.DeleteMessagesAsync(messages, Utils.GetRequestOptions(user.ToString()!));
switch (toDelete) {
case < 1:
Error(Messages.ClearNegativeAmount, false);
break;
case > 200:
Error(Messages.ClearAmountTooLarge, false);
break;
default:
var messages = await channel.GetMessagesAsync(toDelete + 1).FlattenAsync();
await channel.DeleteMessagesAsync(messages, Utils.GetRequestOptions(user.ToString()!));
await Utils.SendFeedback(
string.Format(Messages.FeedbackMessagesCleared, (toDelete + 1).ToString(), channel.Mention),
context.Guild.Id, user.Mention);
break;
}
cmd.Audit(string.Format(Messages.FeedbackMessagesCleared, (toDelete + 1).ToString()));
}
}