Skip to content

Commit

Permalink
Modify double quote handling
Browse files Browse the repository at this point in the history
  • Loading branch information
ConnorAU committed Nov 18, 2020
1 parent b8927e2 commit 946e96a
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 32 deletions.
2 changes: 1 addition & 1 deletion addon/pbo/fn_buildCfg.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
└──────────────────────────────────────────────────────*/

// The extension deserializer doesn't like empty strings, so this string is reserved as empty
#define EMPTY_STRING "DEB_EMPTY_STR"
#define EMPTY_STRING toString[1]

if !(uiNamespace getVariable ["DiscordEmbedBuilder_LoadSuccess",false]) exitwith {false};
params [["_template","",[""]],["_textParameters",[],[[]]]];
Expand Down
2 changes: 1 addition & 1 deletion addon/pbo/fn_buildSqf.sqf
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Example 2:
*/

// The extension deserializer doesn't like empty strings, so this string is reserved as empty
#define EMPTY_STRING "DEB_EMPTY_STR"
#define EMPTY_STRING toString[1]

if !(uiNamespace getVariable ["DiscordEmbedBuilder_LoadSuccess",false]) exitwith {false};

Expand Down
6 changes: 3 additions & 3 deletions extension/DiscordEmbedBuilder/DLLEntry.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using RGiesecke.DllExport;
using RGiesecke.DllExport;
using System;
using System.Runtime.InteropServices;
using System.Text;
Expand All @@ -9,7 +9,7 @@ public class DllEntry
{
private static readonly string SessionKey = Tools.GenTimeEncode();
private static bool InitComplete = false;

#region Misc RVExtension Requirements
#if IS_x64
[DllExport("RVExtensionVersion", CallingConvention = CallingConvention.Winapi)]
Expand All @@ -36,7 +36,7 @@ public static void RvExtension(StringBuilder output, int outputSize,
if (!InitComplete)
{
InitComplete = true;
Tools.Logger(null, "Initialized");
//Tools.Logger(null, "Initialized");
output.Append(SessionKey);
}
else
Expand Down
63 changes: 36 additions & 27 deletions extension/DiscordEmbedBuilder/Discord.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Newtonsoft.Json;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
Expand All @@ -8,6 +8,7 @@
using System.Text;
using System.Threading.Tasks;
using Maca134.Arma.Serializer;
using System.Text.RegularExpressions;

namespace DiscordEmbedBuilder
{
Expand All @@ -18,12 +19,12 @@ internal static async Task HandleRequest(string[] args)
try
{
// Remove arma quotations
string url = args[0].Trim('"');
string content = args[1].Trim('"').Replace("\"\"", "\"");
string username = args[2].Trim('"');
string avatar = args[3].Trim('"');
bool tts = Convert.ToBoolean(args[4]);
Types.EmbedsArray embeds = Converter.DeserializeObject<Types.EmbedsArray>(args[5]);
string url = args[0].Trim('"').Replace("\"\"", "\"");
string content = args[1].Trim('"').Replace("\"\"", "\"");
string username = args[2].Trim('"').Replace("\"\"", "\"");
string avatar = args[3].Trim('"').Replace("\"\"", "\"");
bool tts = Convert.ToBoolean(args[4]);
Types.EmbedsArray embeds = DeserializeObject<Types.EmbedsArray>(args[5]);

// Discord 2000 character limit
if (content.Length > 1999) content = content.Substring(0, 1999);
Expand Down Expand Up @@ -63,26 +64,34 @@ internal static async Task HandleRequest(string[] args)
}
}

private static string RemoveReservedString(string input)
{
// The arma array deserializer doesnt like empty strings and I dont know how to fix it, so heres a shit work around
return input.Replace(@"DEB_EMPTY_STR", "");
}

private static JObject BuildEmbedObject(Types.EmbedArray embed)
private static T DeserializeObject<T>(string value)
{
value = value.Replace("\"\"", "\\\"\\\"");
value = new Regex("([[,]?)nil([],]+)").Replace(value, "$1null$2");
Tools.Logger(null, value);
return JsonConvert.DeserializeObject<T>(value, new JsonConverter[]
{
new ArmaJsonConverter()
});
}

// The arma array deserializer doesnt like empty strings and I dont know how to fix it, so heres a shit work around
private static string RemoveReservedString(string input) => input == $"{(char)1}" ? "" : input;

private static JObject BuildEmbedObject(Types.EmbedArray embed)
{
JObject embedObject = new JObject();
Types.EmbedAuthor embedAuthor = embed.author;
Types.EmbedFields embedFields = embed.fields;
Types.EmbedFooter embedFooter = embed.footer;

// Adding the basics
embed.title = RemoveReservedString(embed.title);
embed.description = RemoveReservedString(embed.description);
embed.url = RemoveReservedString(embed.url);
embed.color = RemoveReservedString(embed.color);
embed.thumbnail = RemoveReservedString(embed.thumbnail);
embed.image = RemoveReservedString(embed.image);
embed.title = RemoveReservedString(embed.title).Replace("\"\"", "\""); ;
embed.description = RemoveReservedString(embed.description).Replace("\"\"", "\""); ;
embed.url = RemoveReservedString(embed.url).Replace("\"\"", "\""); ;
embed.color = RemoveReservedString(embed.color).Replace("\"\"", "\""); ;
embed.thumbnail = RemoveReservedString(embed.thumbnail).Replace("\"\"", "\""); ;
embed.image = RemoveReservedString(embed.image).Replace("\"\"", "\""); ;
if (embed.title.Length > 0) embedObject.Add(new JProperty("title", embed.title));
if (embed.description.Length > 0) embedObject.Add(new JProperty("description", embed.description));
if (embed.url.StartsWith("https://")) embedObject.Add(new JProperty("url", embed.url));
Expand All @@ -92,9 +101,9 @@ private static JObject BuildEmbedObject(Types.EmbedArray embed)
if (embed.image.StartsWith("https://")) embedObject.Add(new JProperty("image", new JObject(new JProperty("url", embed.image))));

// Handle additional objects
embedAuthor.name = RemoveReservedString(embedAuthor.name);
embedAuthor.url = RemoveReservedString(embedAuthor.url);
embedAuthor.icon_url = RemoveReservedString(embedAuthor.icon_url);
embedAuthor.name = RemoveReservedString(embedAuthor.name).Replace("\"\"", "\""); ;
embedAuthor.url = RemoveReservedString(embedAuthor.url).Replace("\"\"", "\""); ;
embedAuthor.icon_url = RemoveReservedString(embedAuthor.icon_url).Replace("\"\"", "\""); ;
if (embedAuthor.name.Length > 0)
{
JObject embedObjectAuthor = new JObject(new JProperty("name", embedAuthor.name));
Expand All @@ -104,8 +113,8 @@ private static JObject BuildEmbedObject(Types.EmbedArray embed)
embedObject.Add(new JProperty("author", embedObjectAuthor));
}

embedFooter.text = RemoveReservedString(embedFooter.text);
embedFooter.icon_url = RemoveReservedString(embedFooter.icon_url);
embedFooter.text = RemoveReservedString(embedFooter.text).Replace("\"\"", "\""); ;
embedFooter.icon_url = RemoveReservedString(embedFooter.icon_url).Replace("\"\"", "\""); ;
if (embedFooter.text.Length > 0)
{
JObject embedObjectFooter = new JObject(new JProperty("text", embedFooter.text));
Expand All @@ -131,8 +140,8 @@ private static JObject BuildEmbedObject(Types.EmbedArray embed)

private static JObject BuildFieldObject(Types.EmbedField field)
{
field.name = RemoveReservedString(field.name);
field.value = RemoveReservedString(field.value);
field.name = RemoveReservedString(field.name).Replace("\"\"", "\""); ;
field.value = RemoveReservedString(field.value).Replace("\"\"", "\""); ;
if (field.name.Length == 0 || field.value.Length == 0) return null;

return new JObject(
Expand Down

0 comments on commit 946e96a

Please sign in to comment.