function Command.new(G)local r={Dispatcher=G.Dispatcher,Cmdr=G.Dispatcher.Cmdr,Name=G.CommandObject.Name;RawText=G.Text;Object=G.CommandObject;Group=G.CommandObject.Group,State={},Aliases=G.CommandObject.Aliases;Alias=G.Alias;Description=G.CommandObject.Description,Executor=G.Executor;ArgumentDefinitions=G.CommandObject.Args,RawArguments=G.Arguments,Arguments={};Data=G.Data;Response=nil}setmetatable(r,Command)return r end

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
