function Command.new(N)local f={Dispatcher=N.Dispatcher;Cmdr=N.Dispatcher.Cmdr,Name=N.CommandObject.Name,RawText=N.Text,Object=N.CommandObject;Group=N.CommandObject.Group;State={},Aliases=N.CommandObject.Aliases,Alias=N.Alias;Description=N.CommandObject.Description;Executor=N.Executor,ArgumentDefinitions=N.CommandObject.Args,RawArguments=N.Arguments,Arguments={};Data=N.Data,Response=nil}setmetatable(f,Command)return f end
--- Returns a new CommandContext, an object which is created for every command validation.
-- This is also what's passed as the context to the "Run" functions in commands
function Command.new(options)
	local self = {
		Dispatcher = options.Dispatcher, -- The dispatcher that created this command context
		Cmdr = options.Dispatcher.Cmdr, -- A quick reference to Cmdr for command context
		Name = options.CommandObject.Name, -- The command name (not alias)
		RawText = options.Text, -- The raw text used to trigger this command
		Object = options.CommandObject, -- The command object (definition)
		Group = options.CommandObject.Group, -- The group this command is in
		State = {}, -- A table which will hold any custom command state information
		Aliases = options.CommandObject.Aliases,
		Alias = options.Alias, -- The command name that was used
		Description = options.CommandObject.Description,
		Executor = options.Executor, -- The player who ran the command
		ArgumentDefinitions = options.CommandObject.Args, -- The argument definitions from the command definition
		RawArguments = options.Arguments, -- Array of strings which are the unparsed values for the arguments
		Arguments = {}, -- A table which will hold ArgumentContexts for each argument
		Data = options.Data, -- A special container for any additional data the command needs to collect from the client
		Response = nil, -- Will be set at the very end when the command is run and a string is returned from the Run function.
	}

	setmetatable(self, Command)

	return self
end
