return{Name="\104\101\108\112",Description="\068\105\115\112\108\097\121\115 \097 \108\105\115\116 \111\102 \097\108\108 \099\111\109\109\097\110\100\115\044 \111\114 \105\110\115\112\101\099\116\115 \111\110\101 \099\111\109\109\097\110\100\046",Group="\072\101\108\112",Args={{Type="\099\111\109\109\097\110\100",Name="\067\111\109\109\097\110\100",Description="\084\104\101 \099\111\109\109\097\110\100 \116\111 \118\105\101\119 \105\110\102\111\114\109\097\116\105\111\110 \111\110",Optional=true}},ClientRun=function(B,K)if K then local o=B.Cmdr.Registry:GetCommand(K)B:Reply(("\067\111\109\109\097\110\100\058 \037\115"):format(o.Name),Color3.fromRGB(230,126,34))if o.Aliases and#o.Aliases>0 then B:Reply(("\065\108\105\097\115\101\115\058 \037\115"):format(table.concat(o.Aliases,"\044 ")),Color3.fromRGB(230,230,230))end B:Reply(o.Description,Color3.fromRGB(230,230,230))local U,m,a=ipairs(o.Args)while true do U(m,a)if not U then break end a=U if m.Optional==true then local B="\063"else v5=""end B:Reply(("\035\037\100 \037\115\037\115\058 \037\115 - \037\115"):format(U,m.Name,v5,m.Type,m.Description))end else B:Reply("\065\114\103\117\109\101\110\116 \083\104\111\114\116\104\097\110\100\115\n-------------------\t\t\t\n\046   \077\101\047\083\101\108\102\n\042   \065\108\108\047\069\118\101\114\121\111\110\101 \n\042\042  \079\116\104\101\114\115 \n\063   \082\097\110\100\111\109\n\063\078  \076\105\115\116 \111\102 \078 \114\097\110\100\111\109 \118\097\108\117\101\115\t\t\t\n")local K=B.Cmdr.Registry:GetCommands()table.sort(K,function(B,K)return B.Group<K.Group end)local o=nil local U,m,a=ipairs(K)while true do U(m,a)if not U then break end a=U if o~=m.Group then B:Reply(("\n\037\115\n-------------------"):format(m.Group))o=m.Group end B:Reply(("\037\115 - \037\115"):format(m.Name,m.Description))end end return""end}


return {
	Name = "help", 
	Description = "Displays a list of all commands, or inspects one command.", 
	Group = "Help", 
	Args = { {
			Type = "command", 
			Name = "Command", 
			Description = "The command to view information on", 
			Optional = true
		} }, 
	ClientRun = function(p1, p2)
		if p2 then
			local v1 = p1.Cmdr.Registry:GetCommand(p2);
			p1:Reply(("Command: %s"):format(v1.Name), Color3.fromRGB(230, 126, 34));
			if v1.Aliases and #v1.Aliases > 0 then
				p1:Reply(("Aliases: %s"):format(table.concat(v1.Aliases, ", ")), Color3.fromRGB(230, 230, 230));
			end;
			p1:Reply(v1.Description, Color3.fromRGB(230, 230, 230));
			local v2, v3, v4 = ipairs(v1.Args);
			while true do
				v2(v3, v4);
				if not v2 then
					break;
				end;
				v4 = v2;
				if v3.Optional == true then
					local v5 = "?";
				else
					v5 = "";
				end;
				p1:Reply(("#%d %s%s: %s - %s"):format(v2, v3.Name, v5, v3.Type, v3.Description));			
			end;
		else
			p1:Reply("Argument Shorthands\n-------------------\t\t\t\n.   Me/Self\n*   All/Everyone \n**  Others \n?   Random\n?N  List of N random values\t\t\t\n");
			local v6 = p1.Cmdr.Registry:GetCommands();
			table.sort(v6, function(p3, p4)
				return p3.Group < p4.Group;
			end);
			local v7 = nil;
			local v8, v9, v10 = ipairs(v6);
			while true do
				v8(v9, v10);
				if not v8 then
					break;
				end;
				v10 = v8;
				if v7 ~= v9.Group then
					p1:Reply(("\n%s\n-------------------"):format(v9.Group));
					v7 = v9.Group;
				end;
				p1:Reply(("%s - %s"):format(v9.Name, v9.Description));			
			end;
		end;
		return "";
	end
};
