Updates the inventory commands to pass json formated replys when not sending a notecard to an avatar
This commit is contained in:
parent
27a27f95cb
commit
27a152369b
3 changed files with 95 additions and 38 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using BSB.Static;
|
using BSB.Static;
|
||||||
using BetterSecondBotShared.Static;
|
using BetterSecondBotShared.Static;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace BSB.Commands.Inventory
|
namespace BSB.Commands.Inventory
|
||||||
{
|
{
|
||||||
|
|
@ -21,13 +22,13 @@ namespace BSB.Commands.Inventory
|
||||||
{
|
{
|
||||||
if (UUID.TryParse(args[1], out UUID targetfolder) == true)
|
if (UUID.TryParse(args[1], out UUID targetfolder) == true)
|
||||||
{
|
{
|
||||||
string[] content = HelperInventory.MapFolderInventory(bot, targetfolder);
|
|
||||||
if (UUID.TryParse(args[0], out UUID targetavatar) == true)
|
if (UUID.TryParse(args[0], out UUID targetavatar) == true)
|
||||||
{
|
{
|
||||||
string notecardname = "InventoryContents" + helpers.UnixTimeNow().ToString() + "";
|
KeyValuePair<string,string> content = HelperInventory.MapFolderInventoryHumanReadable(bot, targetfolder);
|
||||||
if (content != null)
|
if (content.Value != null)
|
||||||
{
|
{
|
||||||
bot.SendNotecard(notecardname, String.Join("\n\r", content), targetavatar);
|
string notecardname = ""+content.Key+" Contents @" + helpers.UnixTimeNow().ToString() + "";
|
||||||
|
bot.SendNotecard(notecardname, content.Value, targetavatar);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -37,7 +38,7 @@ namespace BSB.Commands.Inventory
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return bot.GetCommandsInterface.SmartCommandReply(true, args[0], String.Join("~|~", content), CommandName);
|
return bot.GetCommandsInterface.SmartCommandReply(true, args[0], HelperInventory.MapFolderInventoryJson(bot,targetfolder), CommandName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,13 @@ namespace BSB.Commands.Inventory
|
||||||
if (UUID.TryParse(args[0], out UUID targetavatar) == true)
|
if (UUID.TryParse(args[0], out UUID targetavatar) == true)
|
||||||
{
|
{
|
||||||
bot.GetClient.Self.InstantMessage(targetavatar, "Building inventory folder map now [This might take a while]");
|
bot.GetClient.Self.InstantMessage(targetavatar, "Building inventory folder map now [This might take a while]");
|
||||||
string reply = HelperInventory.MapFolder(bot, false);
|
string reply = HelperInventory.MapFolderHumanReadable(bot);
|
||||||
bot.SendNotecard("Inventory Folders", reply, targetavatar);
|
bot.SendNotecard("Inventory Folders", reply, targetavatar);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
string reply = HelperInventory.MapFolder(bot, true);
|
string reply = HelperInventory.MapFolderJson(bot);
|
||||||
return bot.GetCommandsInterface.SmartCommandReply(true,args[0], reply, CommandName);
|
return bot.GetCommandsInterface.SmartCommandReply(true,args[0], reply, CommandName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using BSB.bottypes;
|
using BSB.bottypes;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
@ -6,6 +7,19 @@ using System.Text;
|
||||||
|
|
||||||
namespace BSB.Static
|
namespace BSB.Static
|
||||||
{
|
{
|
||||||
|
public class InventoryMapFolder
|
||||||
|
{
|
||||||
|
public string id;
|
||||||
|
public string name;
|
||||||
|
public List<InventoryMapFolder> subfolders = new List<InventoryMapFolder>();
|
||||||
|
}
|
||||||
|
public class InventoryMapItem
|
||||||
|
{
|
||||||
|
public string id;
|
||||||
|
public string name;
|
||||||
|
public string typename;
|
||||||
|
}
|
||||||
|
|
||||||
public static class HelperInventory
|
public static class HelperInventory
|
||||||
{
|
{
|
||||||
public static InventoryBase FindFolder(CommandsBot bot, InventoryFolder current,UUID target)
|
public static InventoryBase FindFolder(CommandsBot bot, InventoryFolder current,UUID target)
|
||||||
|
|
@ -31,58 +45,100 @@ namespace BSB.Static
|
||||||
}
|
}
|
||||||
return Found;
|
return Found;
|
||||||
}
|
}
|
||||||
public static string[] MapFolderInventory(CommandsBot bot,UUID folder)
|
|
||||||
|
public static List<InventoryMapItem> getfolderinventory(CommandsBot bot, UUID folder)
|
||||||
{
|
{
|
||||||
List<string> entrys = new List<string>();
|
List<InventoryMapItem> entrys = new List<InventoryMapItem>();
|
||||||
entrys.Add("folderinventory=" + folder.ToString() + "");
|
InventoryNode node = bot.GetClient.Inventory.Store.GetNodeFor(folder);
|
||||||
List<InventoryBase> contents = bot.GetClient.Inventory.FolderContents(folder, bot.GetClient.Self.AgentID, true, true, InventorySortOrder.ByDate, 40 * 1000,true);
|
InventoryMapItem mapitem = new InventoryMapItem();
|
||||||
|
mapitem.name = node.Data.Name;
|
||||||
|
mapitem.id = node.Data.UUID.ToString();
|
||||||
|
mapitem.typename = "Folder";
|
||||||
|
entrys.Add(mapitem);
|
||||||
|
List<InventoryBase> contents = bot.GetClient.Inventory.FolderContents(folder, bot.GetClient.Self.AgentID, true, true, InventorySortOrder.ByDate, 40 * 1000, true);
|
||||||
if (contents != null)
|
if (contents != null)
|
||||||
{
|
{
|
||||||
if (contents.Count > 0)
|
if (contents.Count > 0)
|
||||||
{
|
{
|
||||||
StringBuilder B = new StringBuilder();
|
|
||||||
foreach (InventoryBase item in contents)
|
foreach (InventoryBase item in contents)
|
||||||
{
|
{
|
||||||
B.Append("|||");
|
mapitem = new InventoryMapItem();
|
||||||
B.Append(item.Name);
|
mapitem.name = item.Name;
|
||||||
B.Append("###");
|
mapitem.id = item.UUID.ToString();
|
||||||
B.Append(item.UUID.ToString());
|
mapitem.typename = item.GetType().Name;
|
||||||
B.Append("###");
|
entrys.Add(mapitem);
|
||||||
B.Append(item.GetType().Name);
|
|
||||||
}
|
}
|
||||||
entrys.Add(B.ToString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return entrys.ToArray();
|
return entrys;
|
||||||
}
|
}
|
||||||
public static string MapFolder(CommandsBot bot, bool as_csv)
|
public static string MapFolderInventoryJson(CommandsBot bot,UUID folder)
|
||||||
|
{
|
||||||
|
return JsonConvert.SerializeObject(getfolderinventory(bot, folder));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static KeyValuePair<string,string> MapFolderInventoryHumanReadable(CommandsBot bot, UUID folder)
|
||||||
|
{
|
||||||
|
StringBuilder output = new StringBuilder();
|
||||||
|
string foldername = "Unknown";
|
||||||
|
foreach(InventoryMapItem mitem in getfolderinventory(bot, folder))
|
||||||
|
{
|
||||||
|
if(mitem.typename == "Folder")
|
||||||
|
{
|
||||||
|
foldername = mitem.name;
|
||||||
|
}
|
||||||
|
output.Append("ID: ");
|
||||||
|
output.Append(mitem.id);
|
||||||
|
output.Append(" | ");
|
||||||
|
output.Append("Name: ");
|
||||||
|
output.Append(mitem.name);
|
||||||
|
output.Append(" | ");
|
||||||
|
output.Append("Type: ");
|
||||||
|
output.Append(mitem.typename);
|
||||||
|
output.Append("\n\r");
|
||||||
|
}
|
||||||
|
return new KeyValuePair<string,string>(foldername,output.ToString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string MapFolderJson(CommandsBot bot)
|
||||||
|
{
|
||||||
|
return JsonConvert.SerializeObject(DoMapFolderJson(bot, bot.GetClient.Inventory.Store.RootFolder)).Replace("\\\"","\"");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static InventoryMapFolder DoMapFolderJson(CommandsBot bot, InventoryFolder folder)
|
||||||
|
{
|
||||||
|
InventoryMapFolder ReplyFolder = new InventoryMapFolder();
|
||||||
|
ReplyFolder.id = folder.UUID.ToString();
|
||||||
|
ReplyFolder.name = folder.Name;
|
||||||
|
Dictionary<string, string> foldernode = new Dictionary<string, string>();
|
||||||
|
List<InventoryBase> T = bot.GetClient.Inventory.Store.GetContents(folder);
|
||||||
|
foreach (InventoryBase R in T)
|
||||||
|
{
|
||||||
|
if (R.GetType() == typeof(InventoryFolder))
|
||||||
|
{
|
||||||
|
ReplyFolder.subfolders.Add(DoMapFolderJson(bot, (InventoryFolder)R));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ReplyFolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public static string MapFolderHumanReadable(CommandsBot bot)
|
||||||
{
|
{
|
||||||
StringBuilder B = new StringBuilder();
|
StringBuilder B = new StringBuilder();
|
||||||
DoMapFolder(bot, 0, bot.GetClient.Inventory.Store.RootFolder, as_csv, "", B);
|
DoMapFolderHumanReadable(bot, 0, bot.GetClient.Inventory.Store.RootFolder, B);
|
||||||
return B.ToString();
|
return B.ToString();
|
||||||
}
|
}
|
||||||
public static void DoMapFolder(CommandsBot bot,int level, InventoryFolder folder,bool as_csv,string addon, StringBuilder reply)
|
public static void DoMapFolderHumanReadable(CommandsBot bot,int level, InventoryFolder folder, StringBuilder reply)
|
||||||
{
|
{
|
||||||
List<InventoryBase> T = bot.GetClient.Inventory.Store.GetContents(folder);
|
List<InventoryBase> T = bot.GetClient.Inventory.Store.GetContents(folder);
|
||||||
foreach (InventoryBase R in T)
|
foreach (InventoryBase R in T)
|
||||||
{
|
{
|
||||||
if (R.GetType() == typeof(InventoryFolder))
|
if (R.GetType() == typeof(InventoryFolder))
|
||||||
{
|
{
|
||||||
if (as_csv == false)
|
reply.Append("" + Spaces(level) + "|- " + R.Name + " [" + R.UUID.ToString() + "]\n\r");
|
||||||
{
|
DoMapFolderHumanReadable(bot, level + 1, (InventoryFolder)R, reply);
|
||||||
reply.Append("" + Spaces(level) + "|- " + R.Name + " [" + R.UUID.ToString() + "]\n\r");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
reply.Append(addon);
|
|
||||||
reply.Append(R.Name);
|
|
||||||
reply.Append("###");
|
|
||||||
reply.Append(level.ToString());
|
|
||||||
reply.Append("###");
|
|
||||||
reply.Append(R.UUID.ToString());
|
|
||||||
addon = ",";
|
|
||||||
}
|
|
||||||
DoMapFolder(bot, level + 1, (InventoryFolder)R, as_csv, addon, reply);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue