NWNX:EE  8193.37.14
nwnx_webhook_rch.nss
Go to the documentation of this file.
1 #include "nwnx_webhook"
5 
10  string sUsername;
11  string sText;
12  string sAvatarURL;
13  string sColor;
14  string sAuthorName;
15  string sAuthorURL;
16  string sAuthorIconURL;
17  string sTitle;
18  string sURL;
19  string sDescription;
20  string sThumbnailURL;
21  string sImageURL;
22  string sFooterText;
23  string sFooterURL;
24  int iTimestamp;
25  string sField1Name;
26  string sField1Value;
28  string sField2Name;
29  string sField2Value;
31  string sField3Name;
32  string sField3Value;
34  string sField4Name;
35  string sField4Value;
37  string sField5Name;
38  string sField5Value;
40  string sField6Name;
41  string sField6Value;
43  string sField7Name;
44  string sField7Value;
46  string sField8Name;
47  string sField8Value;
49  string sField9Name;
50  string sField9Value;
52  string sField10Name;
53  string sField10Value;
55 };
56 
61 string IntToBoolString(int iBool);
62 
70 string NWNX_WebHook_BuildMessageForWebHook(string host, string path, struct NWNX_WebHook_Message stMessage, int mrkdwn = 1);
71 
72 string IntToBoolString(int iBool)
73 {
74  return iBool == 0 ? "false" : "true";
75 }
76 
77 string NWNX_WebHook_BuildMessageForWebHook(string host, string path, struct NWNX_WebHook_Message stMessage, int mrkdwn = 1)
78 {
79  if (host == "discordapp.com" && GetStringRight(path, 6) != "/slack")
80  {
81  PrintString("Discord WebHook specified but path does not end with /slack");
82  return "";
83  }
84 
85  // Open JSON
86  string message = "{";
87 
88  string sMainText = "";
89 
90  // The only way to turn off markdown for discord is to surround the text in backticks
91  if (stMessage.sText != "")
92  {
93  if (host == "discordapp.com" && !mrkdwn)
94  sMainText = "```text\\n" + stMessage.sText + "```";
95  else
96  sMainText = stMessage.sText;
97  }
98  message = message + "\"text\": \"" + sMainText + "\"";
99 
100  // Slack will turn off markdown
101  if (host != "discordapp.com" && !mrkdwn)
102  message = message + ",\"mrkdwn\": false";
103 
104  // Set the user attributes for the poster
105  if (stMessage.sUsername != "")
106  message = message + ",\"username\": \"" + stMessage.sUsername + "\"";
107  if (stMessage.sAvatarURL != "")
108  message = message + ",\"icon_url\": \"" + stMessage.sAvatarURL + "\"";
109 
110  // We need to construct an attachment (embed) object
111  if (stMessage.sAuthorName != "" || stMessage.sAuthorURL != "" || stMessage.sAuthorIconURL != "" ||
112  stMessage.sTitle != "" || stMessage.sURL != "" || stMessage.sDescription != "" ||
113  stMessage.sFooterText != "" || stMessage.sFooterURL != "" || stMessage.iTimestamp > 0 ||
114  stMessage.sColor != "" || stMessage.sThumbnailURL != "" || stMessage.sImageURL != "" || stMessage.sField1Name != "")
115  {
116  message = message + ",\"attachments\": [{\"author_name\": \"" + stMessage.sAuthorName + "\",\"author_link\": \"" + stMessage.sAuthorURL +
117  "\",\"author_icon\": \"" + stMessage.sAuthorIconURL + "\",\"title\": \"" + stMessage.sTitle + "\",\"title_link\": \"" + stMessage.sURL +
118  "\",\"text\": \"" + stMessage.sDescription + "\",\"footer\": \"" + stMessage.sFooterText + "\",\"footer_icon\": \"" + stMessage.sFooterURL +
119  "\",\"color\": \"" + stMessage.sColor + "\",\"thumb_url\": \"" + stMessage.sThumbnailURL +
120  "\",\"image_url\": \"" + stMessage.sImageURL + "\"";
121 
122  // Dont post an empty timestamp
123  if (stMessage.iTimestamp > 0)
124  message = message + ",\"ts\": \"" + IntToString(stMessage.iTimestamp) + "\"";
125 
126  // Fields to handle
127  if (stMessage.sField1Name != "")
128  {
129  message = message + ",\"fields\": [";
130  message = message + "{\"title\": \"" + stMessage.sField1Name + "\",\"value\": \"" + stMessage.sField1Value + "\",\"short\": " + IntToBoolString(stMessage.iField1Inline) + "}";
131  if (stMessage.sField2Name != "")
132  message = message + ",{\"title\": \"" + stMessage.sField2Name + "\",\"value\": \"" + stMessage.sField2Value + "\",\"short\": " + IntToBoolString(stMessage.iField2Inline) + "}";
133  if (stMessage.sField3Name != "")
134  message = message + ",{\"title\": \"" + stMessage.sField3Name + "\",\"value\": \"" + stMessage.sField3Value + "\",\"short\": " + IntToBoolString(stMessage.iField3Inline) + "}";
135  if (stMessage.sField4Name != "")
136  message = message + ",{\"title\": \"" + stMessage.sField4Name + "\",\"value\": \"" + stMessage.sField4Value + "\",\"short\": " + IntToBoolString(stMessage.iField4Inline) + "}";
137  if (stMessage.sField5Name != "")
138  message = message + ",{\"title\": \"" + stMessage.sField5Name + "\",\"value\": \"" + stMessage.sField5Value + "\",\"short\": " + IntToBoolString(stMessage.iField5Inline) + "}";
139  if (stMessage.sField6Name != "")
140  message = message + ",{\"title\": \"" + stMessage.sField6Name + "\",\"value\": \"" + stMessage.sField6Value + "\",\"short\": " + IntToBoolString(stMessage.iField6Inline) + "}";
141  if (stMessage.sField7Name != "")
142  message = message + ",{\"title\": \"" + stMessage.sField7Name + "\",\"value\": \"" + stMessage.sField7Value + "\",\"short\": " + IntToBoolString(stMessage.iField7Inline) + "}";
143  if (stMessage.sField8Name != "")
144  message = message + ",{\"title\": \"" + stMessage.sField8Name + "\",\"value\": \"" + stMessage.sField8Value + "\",\"short\": " + IntToBoolString(stMessage.iField8Inline) + "}";
145  if (stMessage.sField9Name != "")
146  message = message + ",{\"title\": \"" + stMessage.sField9Name + "\",\"value\": \"" + stMessage.sField9Value + "\",\"short\": " + IntToBoolString(stMessage.iField9Inline) + "}";
147  if (stMessage.sField10Name != "")
148  message = message + ",{\"title\": \"" + stMessage.sField10Name + "\",\"value\": \"" + stMessage.sField10Value + "\",\"short\": " + IntToBoolString(stMessage.iField10Inline) + "}";
149  // Close fields array
150  message = message + "]";
151  }
152  // Close attachments array
153  message = message + "}]";
154  }
155  // Close JSON
156  message = message + "}";
157 
158  return message;
159 }
string NWNX_WebHook_BuildMessageForWebHook(string host, string path, struct NWNX_WebHook_Message stMessage, int mrkdwn=1)
Builds and sends a rich webhook message based on the constructed NWNX_WebHook_Message.
For more information on these fields see https://birdie0.github.io/discord-webhooks-guide/.
string sField4Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField10Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sColor
https://birdie0.github.io/discord-webhooks-guide/structure/embed/color.html
int iField3Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sAuthorName
https://birdie0.github.io/discord-webhooks-guide/structure/embed/author.html
string sField4Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField8Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField9Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sText
https://birdie0.github.io/discord-webhooks-guide/structure/content.html
string sField1Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField5Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sURL
https://birdie0.github.io/discord-webhooks-guide/structure/embed/url.html
string sFooterText
https://birdie0.github.io/discord-webhooks-guide/structure/embed/footer.html
string sField9Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sDescription
https://birdie0.github.io/discord-webhooks-guide/structure/embed/description.html
string sFooterURL
https://birdie0.github.io/discord-webhooks-guide/structure/embed/footer.html
string sField8Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField2Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField10Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sUsername
https://birdie0.github.io/discord-webhooks-guide/structure/username.html
string sField10Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sTitle
https://birdie0.github.io/discord-webhooks-guide/structure/embed/title.html
string sThumbnailURL
https://birdie0.github.io/discord-webhooks-guide/structure/embed/thumbnail.html
string sAuthorIconURL
https://birdie0.github.io/discord-webhooks-guide/structure/embed/author.html
int iField1Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField2Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField4Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField7Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField5Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField6Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField7Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField2Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sAvatarURL
https://birdie0.github.io/discord-webhooks-guide/structure/avatar_url.html
int iTimestamp
https://birdie0.github.io/discord-webhooks-guide/structure/embed/timestamp.html
string sAuthorURL
https://birdie0.github.io/discord-webhooks-guide/structure/embed/author.html
string sField3Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sImageURL
https://birdie0.github.io/discord-webhooks-guide/structure/embed/image.html
string sField7Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField1Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField6Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField5Value
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField3Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField8Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
string sField6Name
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html
int iField9Inline
https://birdie0.github.io/discord-webhooks-guide/structure/embed/fields.html