Replaces the doc objects with method info
Much better
This commit is contained in:
parent
63d3294580
commit
3576958eb5
7 changed files with 304 additions and 511 deletions
|
|
@ -11,10 +11,12 @@ using Newtonsoft.Json;
|
|||
|
||||
namespace BetterSecondBot.HttpService
|
||||
{
|
||||
public class SecondbotChat : WebApiControllerWithTokens
|
||||
public class HttpApiLocalchat : WebApiControllerWithTokens
|
||||
{
|
||||
public SecondbotChat(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
public HttpApiLocalchat(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
|
||||
[About("fetchs the last 20 localchat messages")]
|
||||
[ReturnHints("array string")]
|
||||
[Route(HttpVerbs.Get, "/localchathistory/{token}")]
|
||||
public object localchatHistory(string token)
|
||||
{
|
||||
|
|
@ -25,6 +27,9 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("sends a message to localchat")]
|
||||
[ArgHints("message","Text", "the message to send")]
|
||||
[ReturnHints("array string")]
|
||||
[Route(HttpVerbs.Post, "/localchatsay/{token}")]
|
||||
public object localchatSay(string token, [FormField] string message)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -13,15 +13,23 @@ using Newtonsoft.Json;
|
|||
namespace BetterSecondBot.HttpService
|
||||
{
|
||||
|
||||
public class SecondbotCoreWebAPi : WebApiControllerWithTokens
|
||||
|
||||
|
||||
public class HttpApiCore : WebApiControllerWithTokens
|
||||
{
|
||||
|
||||
protected JsonConfig config;
|
||||
public SecondbotCoreWebAPi(JsonConfig myconfig, SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens)
|
||||
public HttpApiCore(JsonConfig myconfig, SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens)
|
||||
{
|
||||
config = myconfig;
|
||||
}
|
||||
|
||||
|
||||
[About("Requests a new token (Vaild for 10 mins) <br/>to use with all other requests")]
|
||||
[NeedsToken(false)]
|
||||
[ReturnHints("A new token with full system scope")]
|
||||
[ArgHints("authcode", "text", "the first 10 chars of SHA1(unixtime+WebUIkey)<br/>unixtime can be +- 30 of the bots time.")]
|
||||
[ArgHints("unixtimegiven", "number", "the unixtime you made this request")]
|
||||
[Route(HttpVerbs.Post, "/gettoken")]
|
||||
public Object GetToken([FormField] string authcode, [FormField] string unixtimegiven)
|
||||
{
|
||||
|
|
@ -45,6 +53,9 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Authcode not accepted");
|
||||
}
|
||||
|
||||
|
||||
[About("Gets the friendslist <br/>Formated as follows<br/>friendreplyobject<br/><ul><li>name: String</li><li>id: String</li><li>online: bool</li></ul>")]
|
||||
[ReturnHints("array UUID = friendreplyobject")]
|
||||
[Route(HttpVerbs.Get, "/friends/{token}")]
|
||||
public object Friends(string token)
|
||||
{
|
||||
|
|
@ -55,6 +66,12 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("uses the AutoPilot to move to a location")]
|
||||
[ReturnHints("Error Unable to AutoPilot to location")]
|
||||
[ReturnHints("Accepted")]
|
||||
[ArgHints("x", "URLARG", "X location to AutoPilot to")]
|
||||
[ArgHints("y", "URLARG", "y location to AutoPilot to")]
|
||||
[ArgHints("z", "URLARG", "z location to AutoPilot to")]
|
||||
[Route(HttpVerbs.Get, "/walkto/{x}/{y}/{z}/{token}")]
|
||||
public object WalkTo(string x, string y, string z, string token)
|
||||
{
|
||||
|
|
@ -70,7 +87,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
[About("Attempts to play a gesture")]
|
||||
[ReturnHints("Invaild gesture UUID for arg 1")]
|
||||
[ReturnHints("Accepted")]
|
||||
[ArgHints("gesture", "URLARG", "Inventory UUID of the gesture")]
|
||||
[Route(HttpVerbs.Get, "/gesture/{gesture}/{token}")]
|
||||
public object Gesture(string gesture, string token)
|
||||
{
|
||||
|
|
@ -86,6 +106,13 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Attempt to teleport to a new region")]
|
||||
[ReturnHints("Error Unable to Teleport to location")]
|
||||
[ReturnHints("Accepted")]
|
||||
[ArgHints("region", "URLARG", "the name of the region we are going to")]
|
||||
[ArgHints("x", "URLARG", "X location to teleport to")]
|
||||
[ArgHints("y", "URLARG", "y location to teleport to")]
|
||||
[ArgHints("z", "URLARG", "z location to teleport to")]
|
||||
[Route(HttpVerbs.Get, "/teleport/{region}/{x}/{y}/{z}/{token}")]
|
||||
public object Teleport(string region,string x, string y, string z, string token)
|
||||
{
|
||||
|
|
@ -101,8 +128,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
|
||||
[About("Fetchs the regions map tile")]
|
||||
[ReturnHints("Unable to find region")]
|
||||
[ReturnHints("Texture UUID")]
|
||||
[ArgHints("regionname", "URLARG", "the name of the region we are fetching")]
|
||||
[Route(HttpVerbs.Get, "/regiontile/{regionname}/{token}")]
|
||||
public object Regiontile(string regionname, string token)
|
||||
{
|
||||
|
|
@ -120,34 +149,42 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("an improved version of near me with extra details<br/>NearMeDetails is a object formated as follows<br/><ul><li>id</li><li>name</li><li>x</li><li>y</li><li>z</li><li>range</li></ul>")]
|
||||
[ReturnHints("array NearMeDetails")]
|
||||
[ReturnHints("Error not in a sim")]
|
||||
[Route(HttpVerbs.Get, "/nearmewithdetails/{token}")]
|
||||
public object NearmeWithDetails(string token)
|
||||
{
|
||||
if (bot.GetClient.Network.CurrentSim != null)
|
||||
if (tokens.Allow(token, getClientIP()) == true)
|
||||
{
|
||||
List<NearMeDetails> BetterNearMe = new List<NearMeDetails>();
|
||||
|
||||
Dictionary<uint, Avatar> avcopy = bot.GetClient.Network.CurrentSim.ObjectsAvatars.Copy();
|
||||
foreach (Avatar av in avcopy.Values)
|
||||
if (bot.GetClient.Network.CurrentSim != null)
|
||||
{
|
||||
if (av.ID != bot.GetClient.Self.AgentID)
|
||||
List<NearMeDetails> BetterNearMe = new List<NearMeDetails>();
|
||||
Dictionary<uint, Avatar> avcopy = bot.GetClient.Network.CurrentSim.ObjectsAvatars.Copy();
|
||||
foreach (Avatar av in avcopy.Values)
|
||||
{
|
||||
NearMeDetails details = new NearMeDetails();
|
||||
details.id = av.ID.ToString();
|
||||
details.name = av.Name;
|
||||
details.x = (int)Math.Round(av.Position.X);
|
||||
details.y = (int)Math.Round(av.Position.Y);
|
||||
details.z = (int)Math.Round(av.Position.Z);
|
||||
details.range = (int)Math.Round(Vector3.Distance(av.Position,bot.GetClient.Self.SimPosition));
|
||||
BetterNearMe.Add(details);
|
||||
if (av.ID != bot.GetClient.Self.AgentID)
|
||||
{
|
||||
NearMeDetails details = new NearMeDetails();
|
||||
details.id = av.ID.ToString();
|
||||
details.name = av.Name;
|
||||
details.x = (int)Math.Round(av.Position.X);
|
||||
details.y = (int)Math.Round(av.Position.Y);
|
||||
details.z = (int)Math.Round(av.Position.Z);
|
||||
details.range = (int)Math.Round(Vector3.Distance(av.Position, bot.GetClient.Self.SimPosition));
|
||||
BetterNearMe.Add(details);
|
||||
}
|
||||
}
|
||||
return BasicReply(JsonConvert.SerializeObject(BetterNearMe));
|
||||
}
|
||||
return BasicReply(JsonConvert.SerializeObject(BetterNearMe));
|
||||
return BasicReply("Error not in a sim");
|
||||
}
|
||||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
[About("returns a list of all known avatars nearby")]
|
||||
[ReturnHints("array UUID = Name")]
|
||||
[ReturnHints("Error not in a sim")]
|
||||
[Route(HttpVerbs.Get, "/nearme/{token}")]
|
||||
public object Nearme(string token)
|
||||
{
|
||||
|
|
@ -171,12 +208,19 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Used to check HTTP connections")]
|
||||
[ReturnHints("world")]
|
||||
[NeedsToken(false)]
|
||||
[Route(HttpVerbs.Get, "/hello")]
|
||||
public object Hello()
|
||||
{
|
||||
return BasicReply("world");
|
||||
}
|
||||
|
||||
|
||||
[About("Removes the given token from the accepted token pool")]
|
||||
[ReturnHints("Failed to remove token")]
|
||||
[ReturnHints("ok")]
|
||||
[Route(HttpVerbs.Get, "/logout/{token}")]
|
||||
public object Logout(string token)
|
||||
{
|
||||
|
|
@ -187,6 +231,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
|
||||
[About("Fetchs the current bot")]
|
||||
[ReturnHints("The build ID of the bot")]
|
||||
[Route(HttpVerbs.Get, "/version/{token}")]
|
||||
public object Version(string token)
|
||||
{
|
||||
|
|
@ -197,6 +245,8 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Fetchs the name of the bot")]
|
||||
[ReturnHints("Firstname Lastname")]
|
||||
[Route(HttpVerbs.Get, "/name/{token}")]
|
||||
public object Name(string token)
|
||||
{
|
||||
|
|
@ -207,32 +257,48 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Fetchs the current region name")]
|
||||
[ReturnHints("Regionname")]
|
||||
[ReturnHints("Error not in a sim")]
|
||||
[Route(HttpVerbs.Get, "/regionname/{token}")]
|
||||
public object Regionname(string token)
|
||||
{
|
||||
if (tokens.Allow(token, getClientIP()) == true)
|
||||
{
|
||||
return BasicReply(bot.GetClient.Network.CurrentSim.Name);
|
||||
if(bot.GetClient.Network.CurrentSim != null)
|
||||
{
|
||||
return BasicReply(bot.GetClient.Network.CurrentSim.Name);
|
||||
}
|
||||
return BasicReply("Error not in a sim");
|
||||
}
|
||||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
[About("Fetchs the current location of the bot")]
|
||||
[ReturnHints("array of X,Y,Z values")]
|
||||
[ReturnHints("Error not in a sim")]
|
||||
[Route(HttpVerbs.Get, "/location/{token}")]
|
||||
public object Location(string token)
|
||||
{
|
||||
if (tokens.Allow(token, getClientIP()) == true)
|
||||
{
|
||||
Dictionary<string, int> pos = new Dictionary<string, int>();
|
||||
pos.Add("x",(int)Math.Round(bot.GetClient.Self.SimPosition.X));
|
||||
pos.Add("y", (int)Math.Round(bot.GetClient.Self.SimPosition.Y));
|
||||
pos.Add("z", (int)Math.Round(bot.GetClient.Self.SimPosition.Z));
|
||||
return BasicReply(JsonConvert.SerializeObject(pos));
|
||||
if (bot.GetClient.Network.CurrentSim != null)
|
||||
{
|
||||
Dictionary<string, int> pos = new Dictionary<string, int>();
|
||||
pos.Add("x", (int)Math.Round(bot.GetClient.Self.SimPosition.X));
|
||||
pos.Add("y", (int)Math.Round(bot.GetClient.Self.SimPosition.Y));
|
||||
pos.Add("z", (int)Math.Round(bot.GetClient.Self.SimPosition.Z));
|
||||
return BasicReply(JsonConvert.SerializeObject(pos));
|
||||
}
|
||||
return BasicReply("Error not in a sim");
|
||||
}
|
||||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
[About("Makes a request to the core commands lib<br/>See LSL example on how to create a core command auth code")]
|
||||
[ArgHints("Request Body", "JsonObject", "Command: string<br/>Args: string[]<br/>AuthCode: string")]
|
||||
[ReturnHints("accepted")]
|
||||
[Route(HttpVerbs.Post, "/command/{token}")]
|
||||
public async Task<object> command(string token)
|
||||
{
|
||||
|
|
@ -11,10 +11,12 @@ using Newtonsoft.Json;
|
|||
|
||||
namespace BetterSecondBot.HttpService
|
||||
{
|
||||
public class SecondbotGroup : WebApiControllerWithTokens
|
||||
public class HttpApiGroup : WebApiControllerWithTokens
|
||||
{
|
||||
public SecondbotGroup(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
public HttpApiGroup(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
|
||||
[About("fetchs a list of all groups known to the bot")]
|
||||
[ReturnHints("array UUID=name")]
|
||||
[Route(HttpVerbs.Get, "/listgroups/{token}")]
|
||||
public object listgroups(string token)
|
||||
{
|
||||
|
|
@ -30,6 +32,8 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("fetchs a list of all groups with unread messages")]
|
||||
[ReturnHints("array UUID")]
|
||||
[Route(HttpVerbs.Get, "/listgroupswithunread/{token}")]
|
||||
public object listgroupswithunread(string group, string token)
|
||||
{
|
||||
|
|
@ -40,6 +44,8 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("checks if there are any groups with unread messages")]
|
||||
[ReturnHints("True|False")]
|
||||
[Route(HttpVerbs.Get, "/haveunreadgroupchat/{token}")]
|
||||
public object haveunreadgroupchat(string token)
|
||||
{
|
||||
|
|
@ -50,6 +56,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("fetchs the groupchat history")]
|
||||
[ArgHints("group", "URLARG", "UUID of the group")]
|
||||
[ReturnHints("Group UUID invaild")]
|
||||
[ReturnHints("Group Chat")]
|
||||
[Route(HttpVerbs.Get, "/getgroupchat/{group}/{token}")]
|
||||
public object getgroupchat(string group, string token)
|
||||
{
|
||||
|
|
@ -64,6 +74,11 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("sends a message to the groupchat")]
|
||||
[ArgHints("group", "URLARG", "UUID of the group")]
|
||||
[ArgHints("message", "Text", "the message to send")]
|
||||
[ReturnHints("Group UUID invaild")]
|
||||
[ReturnHints("Processing")]
|
||||
[Route(HttpVerbs.Post, "/sendgroupchat/{group}/{token}")]
|
||||
public object sendgroupchat(string group, string token, [FormField] string message)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -49,19 +49,19 @@ namespace BetterSecondBot.HttpService
|
|||
// .WithRegexRules("HTTP exception 404")
|
||||
//)
|
||||
.WithWebApi("/inventory", m => m
|
||||
.WithController(() => new SecondbotInventory(Bot, Tokens))
|
||||
.WithController(() => new HttpApiInventory(Bot, Tokens))
|
||||
)
|
||||
.WithWebApi("/chat", m => m
|
||||
.WithController(() => new SecondbotChat(Bot, Tokens))
|
||||
.WithController(() => new HttpApiLocalchat(Bot, Tokens))
|
||||
)
|
||||
.WithWebApi("/groups", m => m
|
||||
.WithController(() => new SecondbotGroup(Bot, Tokens))
|
||||
.WithController(() => new HttpApiGroup(Bot, Tokens))
|
||||
)
|
||||
.WithWebApi("/ims", m => m
|
||||
.WithController(() => new SecondbotIm(Bot, Tokens))
|
||||
.WithController(() => new HttpApiIM(Bot, Tokens))
|
||||
)
|
||||
.WithWebApi("/core", m => m
|
||||
.WithController(() => new SecondbotCoreWebAPi(Config, Bot, Tokens)))
|
||||
.WithController(() => new HttpApiCore(Config, Bot, Tokens)))
|
||||
|
||||
.WithModule(new ActionModule("/", HttpVerbs.Any, ctx => ctx.SendDataAsync(new { Message = "Error" })));
|
||||
return server;
|
||||
|
|
@ -69,6 +69,55 @@ namespace BetterSecondBot.HttpService
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method)]
|
||||
public class About : Attribute
|
||||
{
|
||||
public string about = "";
|
||||
public About(string about)
|
||||
{
|
||||
this.about = about;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method)]
|
||||
public class NeedsToken : Attribute
|
||||
{
|
||||
public bool needsToken = true;
|
||||
public NeedsToken(bool needsToken)
|
||||
{
|
||||
this.needsToken = needsToken;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
|
||||
public class ReturnHints : Attribute
|
||||
{
|
||||
public string hint = "";
|
||||
public ReturnHints(string hint)
|
||||
{
|
||||
this.hint = hint;
|
||||
}
|
||||
}
|
||||
|
||||
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
|
||||
public class ArgHints : Attribute
|
||||
{
|
||||
public string name = "";
|
||||
public string typename = "";
|
||||
public string about = "";
|
||||
|
||||
public ArgHints(string name,string typename, string about)
|
||||
{
|
||||
this.name = name;
|
||||
this.typename = typename;
|
||||
this.about = about;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class TokenStorage
|
||||
{
|
||||
protected Dictionary<string, tokenInfo> tokens = new Dictionary<string, tokenInfo>();
|
||||
|
|
@ -150,6 +199,8 @@ namespace BetterSecondBot.HttpService
|
|||
{
|
||||
protected TokenStorage tokens;
|
||||
protected SecondBot bot;
|
||||
public bool needsToken { get; set; }
|
||||
|
||||
|
||||
protected Object BasicReply(string input)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,10 +11,13 @@ using Newtonsoft.Json;
|
|||
|
||||
namespace BetterSecondBot.HttpService
|
||||
{
|
||||
public class SecondbotIm : WebApiControllerWithTokens
|
||||
public class HttpApiIM : WebApiControllerWithTokens
|
||||
{
|
||||
public SecondbotIm(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
public HttpApiIM(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
|
||||
|
||||
[About("gets a full list of all chat windows")]
|
||||
[ReturnHints("array UUID = Name")]
|
||||
[Route(HttpVerbs.Get, "/chatwindows/{token}")]
|
||||
public object chatwindows(string token)
|
||||
{
|
||||
|
|
@ -25,6 +28,8 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("gets a list of chat windows with unread messages")]
|
||||
[ReturnHints("array of UUID")]
|
||||
[Route(HttpVerbs.Get, "/listwithunread/{token}")]
|
||||
public object listwithunread(string group, string token)
|
||||
{
|
||||
|
|
@ -43,6 +48,8 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("gets if there are any unread im messages at all")]
|
||||
[ReturnHints("True|False")]
|
||||
[Route(HttpVerbs.Get, "/haveunreadims/{token}")]
|
||||
public object haveunreadims(string token)
|
||||
{
|
||||
|
|
@ -62,6 +69,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("gets the chat from the selected window")]
|
||||
[ArgHints("window", "URLARG", "the UUID of the chat window")]
|
||||
[ReturnHints("Window UUID invaild")]
|
||||
[ReturnHints("Array of text")]
|
||||
[Route(HttpVerbs.Get, "/getimchat/{window}/{token}")]
|
||||
public object getimchat(string window, string token)
|
||||
{
|
||||
|
|
@ -76,8 +87,12 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("sends a im to the selected avatar")]
|
||||
[ArgHints("avatar", "URLARG", "a UUID or Firstname Lastname")]
|
||||
[ArgHints("message", "Text", "the message to send")]
|
||||
[ReturnHints("ok")]
|
||||
[Route(HttpVerbs.Post, "/sendimchat/{avatar}/{token}")]
|
||||
public object sendgroupchat(string avatar, string token, [FormField] string message)
|
||||
public object sendimchat(string avatar, string token, [FormField] string message)
|
||||
{
|
||||
if (tokens.Allow(token, getClientIP()) == true)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,11 +10,13 @@ using OpenMetaverse;
|
|||
|
||||
namespace BetterSecondBot.HttpService
|
||||
{
|
||||
public class SecondbotInventory : WebApiControllerWithTokens
|
||||
public class HttpApiInventory : WebApiControllerWithTokens
|
||||
{
|
||||
public SecondbotInventory(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
|
||||
public HttpApiInventory(SecondBot mainbot, TokenStorage setuptokens) : base(mainbot, setuptokens) { }
|
||||
|
||||
[About("rezs the item at the bots current location")]
|
||||
[ReturnHints("True|False")]
|
||||
[ArgHints("item", "URLARG", "UUID of item to rez")]
|
||||
[Route(HttpVerbs.Get, "/rezobject/{item}/{token}")]
|
||||
public object rezobject(string item, string token, [FormField] string newname)
|
||||
{
|
||||
|
|
@ -26,7 +28,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
|
||||
[About("renames a folder or inventory item")]
|
||||
[ReturnHints("True|False")]
|
||||
[ArgHints("item", "URLARG", "UUID of item/folder to name")]
|
||||
[ArgHints("newname", "Text", "What we are changing it to")]
|
||||
[Route(HttpVerbs.Post, "/rename/{item}/{token}")]
|
||||
public object rename(string item, string token, [FormField] string newname)
|
||||
{
|
||||
|
|
@ -38,6 +43,10 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("converts a inventory uuid to a realworld uuid<br/>Needed for texture preview")]
|
||||
[ReturnHints("Asset UUID")]
|
||||
[ReturnHints("Failed")]
|
||||
[ArgHints("item", "URLARG", "inventory level UUID of item")]
|
||||
[Route(HttpVerbs.Get, "/realuuid/{item}/{token}")]
|
||||
public object realuuid(string item, string token)
|
||||
{
|
||||
|
|
@ -56,6 +65,11 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("sends a item to an avatar")]
|
||||
[ReturnHints("True|False")]
|
||||
[ReturnHints("Failed")]
|
||||
[ArgHints("item", "URLARG", "UUID of item")]
|
||||
[ArgHints("avatar", "URLARG", "a UUID or Firstname Lastname")]
|
||||
[Route(HttpVerbs.Get, "/send/{item}/{avatar}/{token}")]
|
||||
public object send(string item, string avatar, string token)
|
||||
{
|
||||
|
|
@ -71,6 +85,12 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Removes a item/folder from inventory (Make sure you set the isfolder flag correctly!)")]
|
||||
[ReturnHints("True|False")]
|
||||
[ReturnHints("Failed - isfolder must be True or False")]
|
||||
[ReturnHints("Failed - item must be a vaild UUID")]
|
||||
[ArgHints("item", "URLARG", "UUID of item")]
|
||||
[ArgHints("isfolder", "URLARG", "True or False if this is a folder")]
|
||||
[Route(HttpVerbs.Get, "/delete/{item}/{isfolder}/{token}")]
|
||||
public object delete(string item,string isfolder, string token)
|
||||
{
|
||||
|
|
@ -92,6 +112,9 @@ namespace BetterSecondBot.HttpService
|
|||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Requests the inventory folder layout as a json object InventoryMapFolder<br/>Formated as follows<br/>InventoryMapItem<br/><ul><li>id: UUID</li><li>name: String</li><li>subfolders: InventoryMapFolder[]</li></ul>")]
|
||||
[ReturnHints("array of InventoryMapFolder")]
|
||||
[ReturnHints("Error")]
|
||||
[Route(HttpVerbs.Get, "/folders/{token}")]
|
||||
public object folders(string token)
|
||||
{
|
||||
|
|
@ -99,11 +122,15 @@ namespace BetterSecondBot.HttpService
|
|||
{
|
||||
string reply = HelperInventory.MapFolderJson(bot);
|
||||
if(reply != null) return BasicReply(reply);
|
||||
return BasicReply("error");
|
||||
return BasicReply("Error");
|
||||
}
|
||||
return BasicReply("Token not accepted");
|
||||
}
|
||||
|
||||
[About("Requests the contents of a folder as an array of InventoryMapItem<br/>Formated as follows<br/>InventoryMapItem<br/><ul><li>id: UUID</li><li>name: String</li><li>typename: String</li></ul>")]
|
||||
[ReturnHints("array of InventoryMapItem")]
|
||||
[ReturnHints("Invaild folder UUID")]
|
||||
[ArgHints("folderUUID", "URLARG", "the folder to fetch (Found via: inventory/folders)")]
|
||||
[Route(HttpVerbs.Get, "/contents/{folderUUID}/{token}")]
|
||||
public object Contents(string folderUUID, string token)
|
||||
{
|
||||
|
|
@ -119,8 +146,6 @@ namespace BetterSecondBot.HttpService
|
|||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
using BetterSecondBotShared.API;
|
||||
using BetterSecondBot.HttpService;
|
||||
using BetterSecondBotShared.API;
|
||||
using BetterSecondBotShared.IO;
|
||||
using BetterSecondBotShared.Json;
|
||||
using BetterSecondBotShared.logs;
|
||||
using BetterSecondBotShared.Static;
|
||||
using EmbedIO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
|
|
@ -487,57 +489,83 @@ namespace BetterSecondBot.WikiMake
|
|||
public class HTTPendpoint
|
||||
{
|
||||
protected List<Endpoint> endpoints = new List<Endpoint>();
|
||||
|
||||
|
||||
public void createEndpoint(string name, Type Api)
|
||||
{
|
||||
Endpoint Endpoint = new Endpoint();
|
||||
Endpoint.name = name;
|
||||
foreach (MethodInfo M in Api.GetMethods())
|
||||
{
|
||||
APIcall C = new APIcall();
|
||||
CustomAttributeData httpverb = null;
|
||||
CustomAttributeData NeedsToken = null;
|
||||
CustomAttributeData About = null;
|
||||
List<CustomAttributeData> ArgHints = new List<CustomAttributeData>();
|
||||
List<CustomAttributeData> ReturnValues = new List<CustomAttributeData>();
|
||||
|
||||
foreach (CustomAttributeData At in M.CustomAttributes)
|
||||
{
|
||||
if (At.AttributeType.Name == "RouteAttribute")
|
||||
{
|
||||
httpverb = At;
|
||||
}
|
||||
else if (At.AttributeType.Name == "NeedsToken")
|
||||
{
|
||||
NeedsToken = At;
|
||||
}
|
||||
else if (At.AttributeType.Name == "About")
|
||||
{
|
||||
About = At;
|
||||
}
|
||||
else if (At.AttributeType.Name == "ArgHints")
|
||||
{
|
||||
ArgHints.Add(At);
|
||||
}
|
||||
else if (At.AttributeType.Name == "ReturnHints")
|
||||
{
|
||||
ReturnValues.Add(At);
|
||||
}
|
||||
}
|
||||
if (httpverb != null)
|
||||
{
|
||||
C.name = M.Name.ToLowerInvariant();
|
||||
C.type = "Post";
|
||||
C.about = "Http interface command about missing";
|
||||
if (About != null)
|
||||
{
|
||||
C.about = About.ConstructorArguments[0].Value.ToString();
|
||||
}
|
||||
if (httpverb.ConstructorArguments[0].Value is HttpVerbs.Get)
|
||||
{
|
||||
C.type = "Get";
|
||||
}
|
||||
C.RequiresToken = true;
|
||||
if (NeedsToken != null)
|
||||
{
|
||||
C.RequiresToken = (bool)NeedsToken.ConstructorArguments[0].Value;
|
||||
}
|
||||
foreach (CustomAttributeData cad in ArgHints)
|
||||
{
|
||||
C.values.Add(cad.ConstructorArguments[0].Value.ToString(), new KeyValuePair<string, string>(cad.ConstructorArguments[1].Value.ToString(), cad.ConstructorArguments[2].Value.ToString()));
|
||||
}
|
||||
foreach (CustomAttributeData cad in ReturnValues)
|
||||
{
|
||||
C.returns.Add(cad.ConstructorArguments[0].Value.ToString());
|
||||
}
|
||||
C.Setup();
|
||||
Endpoint.callable.Add(C);
|
||||
}
|
||||
}
|
||||
endpoints.Add(Endpoint);
|
||||
}
|
||||
public HTTPendpoint()
|
||||
{
|
||||
Endpoint core = new Endpoint();
|
||||
core.name = "core";
|
||||
core.callable.Add(new gettoken());
|
||||
core.callable.Add(new logout());
|
||||
core.callable.Add(new version());
|
||||
core.callable.Add(new name());
|
||||
core.callable.Add(new command());
|
||||
core.callable.Add(new friends());
|
||||
core.callable.Add(new nearme());
|
||||
core.callable.Add(new hello());
|
||||
core.callable.Add(new regiontile());
|
||||
core.callable.Add(new location());
|
||||
core.callable.Add(new regionname());
|
||||
core.callable.Add(new nearmewithdetails());
|
||||
core.callable.Add(new walkto());
|
||||
core.callable.Add(new teleport());
|
||||
core.callable.Add(new gesture());
|
||||
endpoints.Add(core);
|
||||
Endpoint inventory = new Endpoint();
|
||||
inventory.name = "inventory";
|
||||
inventory.callable.Add(new contents());
|
||||
inventory.callable.Add(new folders());
|
||||
inventory.callable.Add(new rename());
|
||||
inventory.callable.Add(new realuuid());
|
||||
inventory.callable.Add(new send());
|
||||
inventory.callable.Add(new delete());
|
||||
inventory.callable.Add(new rezobject());
|
||||
endpoints.Add(inventory);
|
||||
Endpoint im = new Endpoint();
|
||||
im.name = "im";
|
||||
im.callable.Add(new chatwindows());
|
||||
im.callable.Add(new listwithunread());
|
||||
im.callable.Add(new haveunreadims());
|
||||
im.callable.Add(new getimchat());
|
||||
im.callable.Add(new sendimchat());
|
||||
endpoints.Add(im);
|
||||
Endpoint group = new Endpoint();
|
||||
group.name = "group";
|
||||
group.callable.Add(new listgroups());
|
||||
group.callable.Add(new listgroupswithunread());
|
||||
group.callable.Add(new haveunreadgroupchat());
|
||||
group.callable.Add(new getgroupchat());
|
||||
group.callable.Add(new sendgroupchat());
|
||||
endpoints.Add(group);
|
||||
Endpoint chat = new Endpoint();
|
||||
chat.name = "chat";
|
||||
chat.callable.Add(new localchathistory());
|
||||
chat.callable.Add(new localchatsay());
|
||||
endpoints.Add(chat);
|
||||
createEndpoint("core", typeof(HttpApiCore));
|
||||
createEndpoint("inventory", typeof(HttpApiInventory));
|
||||
createEndpoint("im", typeof(HttpApiIM));
|
||||
createEndpoint("group", typeof(HttpApiGroup));
|
||||
createEndpoint("chat", typeof(HttpApiLocalchat));
|
||||
}
|
||||
|
||||
public string getCommandMethod(string endpoint, string command)
|
||||
|
|
@ -690,19 +718,15 @@ namespace BetterSecondBot.WikiMake
|
|||
public List<APIcall> callable = new List<APIcall>();
|
||||
}
|
||||
|
||||
abstract public class APIcall
|
||||
public class APIcall
|
||||
{
|
||||
public string name { get { return GetType().Name.ToLowerInvariant(); } }
|
||||
public string name { get; set; }
|
||||
public string type = "get";
|
||||
public string about = "A API call that is missing its about value";
|
||||
public Dictionary<string, KeyValuePair<string, string>> values = new Dictionary<string, KeyValuePair<string, string>>();
|
||||
public List<string> returns = new List<string>();
|
||||
public bool RequiresToken = true;
|
||||
|
||||
public APIcall()
|
||||
{
|
||||
Setup();
|
||||
}
|
||||
public virtual void Setup()
|
||||
{
|
||||
if (RequiresToken == true)
|
||||
|
|
@ -717,412 +741,4 @@ namespace BetterSecondBot.WikiMake
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
abstract public class postAPIcall : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
type = "post";
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class gettoken : postAPIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
RequiresToken = false;
|
||||
about = "Requests a new token (Vaild for 10 mins) <br/>to use with all other requests";
|
||||
values.Add("Authcode", new KeyValuePair<string, string>("string", "the first 10 chars of SHA1(unixtime+WebUIkey)<br/>unixtime can be +- 30 of the bots time."));
|
||||
returns = new List<string>();
|
||||
returns.Add("Authcode not accepted");
|
||||
returns.Add("New API Token");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class logout : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "A API call that is missing its about value";
|
||||
returns.Add("ok");
|
||||
returns.Add("Failed to remove token");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class version : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Gets the bots build version";
|
||||
returns.Add("Bot build version");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class friends : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Gets the friendslist <br/>Formated as follows<br/>friendreplyobject<br/><ul><li>name: String</li><li>id: String</li><li>online: bool</li></ul>";
|
||||
returns.Add("array UUID = friendreplyobject");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class nearme : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "returns a list of all known avatars near (same sim)>";
|
||||
returns.Add("array UUID = Name");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class hello : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
RequiresToken = false;
|
||||
about = "used to test you can talk to the api but mostly pointless.";
|
||||
returns.Add("world");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class name : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Gets the name of the bot";
|
||||
returns.Add("Fistname Lastname");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class gesture : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Attempts to play a gesture";
|
||||
values.Add("gesture", new KeyValuePair<string, string>("URLARG", "UUID of the gesture"));
|
||||
returns.Add("Accepted");
|
||||
returns.Add("Invaild gesture UUID for arg 1");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class command : postAPIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Makes a request to the core commands lib";
|
||||
values.Add(
|
||||
"body",
|
||||
new KeyValuePair<string, string>(
|
||||
"JsonObject",
|
||||
"A JSON object formated as follows<br/>Command: string<br/>Args: string[]<br/>AuthCode: string<br/>========<br/>See LSL example on how to create a core command auth code")
|
||||
);
|
||||
returns.Add("accepted");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class contents : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Requests the contents of a folder as an array of InventoryMapItem<br/>Formated as follows<br/>InventoryMapItem<br/><ul><li>id: UUID</li><li>name: String</li><li>typename: String</li></ul>";
|
||||
values.Add(
|
||||
"folderUUID",
|
||||
new KeyValuePair<string, string>(
|
||||
"URLARG",
|
||||
"the folder to fetch (Found via: inventory/folders)")
|
||||
);
|
||||
returns.Add("array of InventoryMapItem");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class folders : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Requests the inventory folder layout as a json object InventoryMapFolder<br/>Formated as follows<br/>InventoryMapItem<br/><ul><li>id: UUID</li><li>name: String</li><li>subfolders: InventoryMapFolder[]</li></ul>";
|
||||
returns.Add("array of InventoryMapFolder");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class rename : postAPIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "renames a folder or inventory item";
|
||||
returns.Add("true|false");
|
||||
values.Add("item", new KeyValuePair<string, string>("URLARG", "UUID of the item/folder we are working on"));
|
||||
values.Add("newname", new KeyValuePair<string, string>("string", "What we are setting"));
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class realuuid : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "converts a inventory uuid to a realworld uuid<br/>Needed for texture preview";
|
||||
returns.Add("Failed");
|
||||
returns.Add("UUID");
|
||||
values.Add("item", new KeyValuePair<string, string>("URLARG", "UUID of the item/folder we are working on"));
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class send : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "sends a item to an avatar";
|
||||
returns.Add("Failed");
|
||||
returns.Add("UUID");
|
||||
values.Add("item", new KeyValuePair<string, string>("URLARG", "UUID of the item we are working on"));
|
||||
values.Add("avatar", new KeyValuePair<string, string>("URLARG", "a UUID or Firstname Lastname"));
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class delete : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Removes a item/folder from inventory (Make sure you set the isfolder flag correctly!)";
|
||||
returns.Add("Failed");
|
||||
returns.Add("UUID");
|
||||
values.Add("item", new KeyValuePair<string, string>("URLARG", "UUID of the item/folder we are working on"));
|
||||
values.Add("isfolder", new KeyValuePair<string, string>("URLARG", "true or false if this is a folder"));
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class chatwindows : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "gets a full list of all chat windows";
|
||||
returns.Add("array UUID = Name");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class listwithunread : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "gets a list of chat windows with unread messages";
|
||||
returns.Add("array of UUID");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class haveunreadims : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "gets if there are any unread im messages at all";
|
||||
returns.Add("true|false");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class getimchat : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "gets the chat from the selected window";
|
||||
values.Add("window", new KeyValuePair<string, string>("URLARG", "the UUID of the chat window"));
|
||||
returns.Add("Chat contents");
|
||||
returns.Add("Window UUID invaild");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class sendimchat : postAPIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "sends a im to the selected avatar";
|
||||
values.Add("avatar", new KeyValuePair<string, string>("URLARG", "a UUID or Firstname Lastname"));
|
||||
values.Add("message", new KeyValuePair<string, string>("string", "the message to send"));
|
||||
returns.Add("ok");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class listgroups : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "fetchs a list of all groups known to the bot";
|
||||
returns.Add("array UUID=name");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class listgroupswithunread : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "fetchs a list of all groups with unread messages";
|
||||
returns.Add("array UUID");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class haveunreadgroupchat : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "checks if there are any groups with unread messages";
|
||||
returns.Add("true|false");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class getgroupchat : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "fetchs the groupchat history";
|
||||
values.Add("group", new KeyValuePair<string, string>("URLARG", "UUID of the group"));
|
||||
returns.Add("Group UUID invaild");
|
||||
returns.Add("Group Chat");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class sendgroupchat : postAPIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "sends a message to the groupchat";
|
||||
values.Add("group", new KeyValuePair<string, string>("URLARG", "UUID of the group"));
|
||||
values.Add("message ", new KeyValuePair<string, string>("string", "the message to send"));
|
||||
returns.Add("Group UUID invaild");
|
||||
returns.Add("Processing");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class localchathistory : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "fetchs the last 20 localchat messages";
|
||||
returns.Add("array string");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class location : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Fetchs the current location of the bot";
|
||||
returns.Add("array of X,Y,Z values");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class walkto : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "uses the AutoPilot to move to a location";
|
||||
values.Add("x", new KeyValuePair<string, string>("URLARG", "X location to AutoPilot to"));
|
||||
values.Add("y", new KeyValuePair<string, string>("URLARG", "Y location to AutoPilot to"));
|
||||
values.Add("z", new KeyValuePair<string, string>("URLARG", "Z location to AutoPilot to"));
|
||||
returns.Add("Error Unable to AutoPilot to location");
|
||||
returns.Add("Accepted");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class teleport : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "uses the AutoPilot to move to a location";
|
||||
values.Add("region", new KeyValuePair<string, string>("URLARG", "the name of the region we are going to"));
|
||||
values.Add("x", new KeyValuePair<string, string>("URLARG", "X location"));
|
||||
values.Add("y", new KeyValuePair<string, string>("URLARG", "Y location"));
|
||||
values.Add("z", new KeyValuePair<string, string>("URLARG", "Z location"));
|
||||
returns.Add("Error Unable to Teleport to location");
|
||||
returns.Add("Accepted");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class regionname : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Fetchs the current region name";
|
||||
returns.Add("string regionname");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class nearmewithdetails : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "an improved version of near me with extra details<br/>NearMeDetails is a object formated as follows<br/><ul><li>id</li><li>name</li><li>x</li><li>y</li><li>z</li><li>range</li></ul>";
|
||||
returns.Add("array NearMeDetails");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public class regiontile : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "Fetchs the regions map tile";
|
||||
values.Add("region", new KeyValuePair<string, string>("URLARG", "string name of region"));
|
||||
returns.Add("Unable to find region");
|
||||
returns.Add("Texture UUID");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
public class rezobject : APIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "rezs the item at the bots current location";
|
||||
values.Add("item", new KeyValuePair<string, string>("URLARG", "UUID of item to rez"));
|
||||
returns.Add("true|false");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class localchatsay : postAPIcall
|
||||
{
|
||||
public override void Setup()
|
||||
{
|
||||
about = "sends a message to localchat";
|
||||
values.Add("message ", new KeyValuePair<string, string>("string", "the message to send"));
|
||||
returns.Add("see->localchathistory");
|
||||
base.Setup();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue