1
0
Fork 1
mirror of https://github.com/TeamOctolings/Octobot.git synced 2025-01-31 09:09:00 +03:00
Octobot/Boyfriend/CommandHandler.cs
2021-12-15 11:19:14 +05:00

74 lines
No EOL
4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Discord;
using Discord.Commands;
using Discord.WebSocket;
namespace Boyfriend;
public static class CommandHandler {
public static async Task HandleCommand(SocketUserMessage message, int argPos) {
var context = new SocketCommandContext(Boyfriend.Client, message);
var result = await EventHandler.Commands.ExecuteAsync(context, argPos, null);
await HandleErrors(context, result);
}
private static async Task HandleErrors(SocketCommandContext context, IResult result) {
var channel = context.Channel;
var reason = Utils.WrapInline(result.ErrorReason);
switch (result.Error) {
case CommandError.Exception:
await channel.SendMessageAsync(reason);
break;
case CommandError.Unsuccessful:
await channel.SendMessageAsync($"Выполнение команды завершилось неудачей: {reason}");
break;
case CommandError.MultipleMatches:
await channel.SendMessageAsync($"Обнаружены повторяющиеся типы аргументов! {reason}");
break;
case CommandError.ParseFailed:
await channel.SendMessageAsync($"Не удалось обработать команду: {reason}");
break;
case CommandError.UnknownCommand:
await channel.SendMessageAsync($"Неизвестная команда! {reason}");
break;
case CommandError.UnmetPrecondition:
await channel.SendMessageAsync($"У тебя недостаточно прав для выполнения этой к: {reason}");
break;
case CommandError.BadArgCount:
await channel.SendMessageAsync($"Неверное количество аргументов! {reason}");
break;
case CommandError.ObjectNotFound:
await channel.SendMessageAsync($"Нету нужных аргументов! {reason}");
break;
case null:
break;
default:
throw new Exception("CommandError");
}
}
public static async Task CheckPermissions(IGuildUser user, GuildPermission toCheck,
GuildPermission forBot = GuildPermission.StartEmbeddedActivities) {
if (forBot == GuildPermission.StartEmbeddedActivities) forBot = toCheck;
if (!(await user.Guild.GetCurrentUserAsync()).GuildPermissions.Has(forBot))
throw new Exception("У меня недостаточно прав для выполнения этой команды!");
if (!user.GuildPermissions.Has(toCheck))
throw new Exception("У тебя недостаточно прав для выполнения этой команды!");
}
public static async Task CheckInteractions(IGuildUser actor, IGuildUser target) {
if (actor.Guild != target.Guild)
throw new Exception("Участники находятся в разных гильдиях!");
var me = await target.Guild.GetCurrentUserAsync();
if (actor.Id == actor.Guild.OwnerId) return;
if (target.Id == target.Guild.OwnerId)
throw new Exception("Ты не можешь взаимодействовать с владельцем сервера!");
if (actor == target)
throw new Exception("Ты не можешь взаимодействовать с самим собой!");
if (target == me)
throw new Exception("Ты не можешь со мной взаимодействовать!");
if (actor.Hierarchy <= target.Hierarchy)
throw new Exception("Ты не можешь взаимодействовать с этим участником!");
if (me.Hierarchy <= target.Hierarchy)
throw new Exception("Я не могу взаимодействовать с этим участником!");
}
}