using System; using System.Collections.Generic; using System.Text.RegularExpressions; using DeukBot4.MessageHandlers.Permissions; using Discord.WebSocket; namespace DeukBot4.MessageHandlers.CommandHandler.RequestStructure { public class CommandRequest { private const string CommandNamePattern = "!([a-zA-Z0-9_]*) *(.*)"; private static readonly Regex CommandNameMatcher = new Regex(CommandNamePattern); public Command Command { get; } //public string ParameterString { get; } public SocketMessage OriginalMessage { get; } public RequestParameter[] Parameters { get; private set; } public PermissionLevel RequestPermissions { get; } private CommandRequest(SocketMessage message, Command command, PermissionLevel requestPermissions, RequestParameter[] parameters) { OriginalMessage = message; Command = command; RequestPermissions = requestPermissions; Parameters = parameters; } public enum RequestCode { OK, Invalid, Forbidden } public static (CommandRequest, RequestCode) Create(SocketMessage message) { var originalMessage = message; var content = message.Content; var res = CommandNameMatcher.Match(content); if (res.Groups.Count <= 2) return (null, RequestCode.Invalid); var commandName = res.Groups[1].Value; var command = CommandHandler.GetCommand(commandName); if (command == null) { return (null, RequestCode.Invalid); } var permission = PermissionValidator.GetUserPermissionLevel(message); if (permission < command.Permission) { return (null, RequestCode.Forbidden); } var parameterString = res.Groups[2].Value; var parameters = ParameterMatcher.GetParameterValues(command, parameterString); return (new CommandRequest(originalMessage, command, permission, parameters), RequestCode.OK); } } }