1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-05-19 12:14:20 +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
Boyfriend/Commands

View file

@ -1,74 +1,44 @@
using Discord;
using Discord.Commands;
using Discord.WebSocket;
namespace Boyfriend.Commands;
public class BanCommand : Command {
public override string[] Aliases { get; } = { "ban", "бан" };
public override int ArgsLengthRequired => 2;
public override async Task Run(SocketCommandContext context, string[] args) {
var toBan = Utils.ParseUser(args[0]);
public override async Task Run(CommandProcessor cmd, string[] args) {
var toBan = cmd.GetUser(args, 0, "ToBan");
if (toBan == null || !cmd.HasPermission(GuildPermission.BanMembers)) return;
if (toBan == null) {
Error(Messages.UserDoesntExist, false);
return;
}
var memberToBan = cmd.GetMember(toBan, null);
if (memberToBan != null && !cmd.CanInteractWith(memberToBan, "Ban")) return;
var guild = context.Guild;
var author = (SocketGuildUser)context.User;
var duration = CommandProcessor.GetTimeSpan(args, 1);
var reason = cmd.GetRemaining(args, duration.TotalSeconds < 1 ? 1 : 2, "BanReason");
if (reason == null) return;
var permissionCheckResponse = CommandHandler.HasPermission(ref author, GuildPermission.BanMembers);
if (permissionCheckResponse is not "") {
Error(permissionCheckResponse, true);
return;
}
var reason = Utils.JoinString(ref args, 2);
var memberToBan = Utils.ParseMember(guild, args[0]);
if (memberToBan != null) {
var interactionCheckResponse = CommandHandler.CanInteract(ref author, ref memberToBan);
if (interactionCheckResponse is not "") {
Error(interactionCheckResponse, true);
return;
}
}
var duration = Utils.GetTimeSpan(ref args[1]) ?? TimeSpan.FromMilliseconds(-1);
if (duration.TotalSeconds < 0) {
Warn(Messages.DurationParseFailed);
reason = Utils.JoinString(ref args, 1);
if (reason is "") {
Error(Messages.ReasonRequired, false);
return;
}
}
await BanUser(guild, author, toBan, duration, reason);
await BanUser(cmd, toBan, duration, reason);
}
public static async Task BanUser(SocketGuild guild, SocketGuildUser author, SocketUser toBan, TimeSpan duration,
string reason) {
var guildBanMessage = $"({author}) {reason}";
public static async Task BanUser(CommandProcessor cmd, SocketUser toBan, TimeSpan duration, string reason) {
var author = cmd.Context.User;
var guild = cmd.Context.Guild;
await Utils.SendDirectMessage(toBan,
string.Format(Messages.YouWereBanned, author.Mention, guild.Name, Utils.Wrap(reason)));
var guildBanMessage = $"({author}) {reason}";
await guild.AddBanAsync(toBan, 0, guildBanMessage);
var feedback = string.Format(Messages.FeedbackUserBanned, toBan.Mention,
Utils.GetHumanizedTimeOffset(ref duration), Utils.Wrap(reason));
Success(feedback, author.Mention, false, false);
await Utils.SendFeedback(feedback, guild.Id, author.Mention, true);
Utils.GetHumanizedTimeOffset(duration), Utils.Wrap(reason));
cmd.Reply(feedback, ":hammer: ");
cmd.Audit(feedback);
if (duration.TotalSeconds > 0) {
var _ = async () => {
await Task.Delay(duration);
await UnbanCommand.UnbanUser(guild, guild.CurrentUser, toBan, Messages.PunishmentExpired);
await UnbanCommand.UnbanUser(cmd, toBan.Id, Messages.PunishmentExpired);
};
}
}
}
}