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:
parent
53f13d88a5
commit
ac63719a0b
19 changed files with 1061 additions and 711 deletions
|
@ -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()));
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue