View difference between Paste ID: GnUrv5Y6 and Z82M9ssf
SHOW: | | - or go back to the newest paste.
1
diff --git a/conf/char_athena.conf b/conf/char_athena.conf
2
index a99d616..219fd2d 100644
3
--- a/conf/char_athena.conf
4
+++ b/conf/char_athena.conf
5
@@ -284,4 +284,8 @@ mail_return_days: 15
6
 // Default: 15
7
 mail_delete_days: 15
8
 
9
+//Discord @request integration
10
+gm_whisp_webhook: on
11
+gm_whisp_webhook_url: 
12
+
13
 import: conf/import/char_conf.txt
14
diff --git a/configure b/configure
15
index 672d335..9144184 100755
16
--- a/configure
17
+++ b/configure
18
@@ -630,6 +630,9 @@ PCRE_CFLAGS
19
 PCRE_LIBS
20
 PCRE_VERSION
21
 HAVE_PCRE
22
+LCURL_CFLAGS
23
+LCURL_LIBS
24
+HAVE_LCURL
25
 MYSQL_LIBS
26
 MYSQL_CFLAGS
27
 MYSQL_VERSION
28
@@ -715,6 +718,7 @@ with_mysql
29
 with_MYSQL_CFLAGS
30
 with_MYSQL_LIBS
31
 with_pcre
32
+with_lcurl
33
 with_zlib
34
 '
35
       ac_precious_vars='build_alias
36
@@ -1386,6 +1390,7 @@ Optional Packages:
37
                           to /usr/local or /usr if not found in /usr/local).
38
                           Assumes that the header files are in DIR/include and
39
                           the library files are in DIR/lib
40
+  --with-lcurl            Compile with libcurl? Default no
41
 
42
 Some influential environment variables:
43
   CXX         C++ compiler command
44
@@ -3557,6 +3562,15 @@ else
45
 fi
46
 
47
 
48
+#
49
+# enable libcurl
50
+#
51
+if test "${with_lcurl+set}" = set; then :
52
+  want_lcurl="yes"
53
+else
54
+  want_lcurl="no"
55
+
56
+
57
 
58
 #
59
 # Specify the path of the zlib library (required library)
60
@@ -6821,7 +6835,20 @@ fi
61
 
62
 
63
 
64
-
65
+#
66
+# Libcurl Library (optional)
67
+#
68
+LCURL_LIBS=""
69
+LCURL_CFLAGS=""
70
+if test "$want_lcurl" = "no"; then
71
+  { $as_echo "$as_me:${as_lineno-$LINENO}: ignoring Libcurl (optional)" >&5
72
+$as_echo "$as_me: ignoring Libcurl (optional)" >&6;}
73
+else
74
+  { $as_echo "$as_me:${as_lineno-$LINENO}: assuming you have libcurl" >&5
75
+$as_echo "assuming you have libcurl... " >&6; }
76
+  LCURL_LIBS="-lcurl"
77
+  HAVE_LCURL="yes"
78
+fi
79
 
80
 
81
 
82
diff --git a/src/char/Makefile.in b/src/char/Makefile.in
83
index 3fddf5e..50af922 100644
84
--- a/src/char/Makefile.in
85
+++ b/src/char/Makefile.in
86
@@ -32,6 +32,13 @@ else
87
 endif
88
 ALL_DEPENDS=server
89
 
90
+HAVE_LCURL=@HAVE_LCURL@
91
+ifeq ($(HAVE_LCURL),yes)
92
+	LCURL_CFLAGS=-DHAVE_LIBCURL -DCURL_STATICLIB @LCURL_CFLAGS@ 
93
+else
94
+	LCURL_CFLAGS=
95
+endif
96
+
97
 @SET_MAKE@
98
 
99
 #####################################################################
100
@@ -57,7 +64,7 @@ help:
101
 
102
 char-server: obj $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR) $(YAML_CPP_AR)
103
 	@echo "	LD	@OCHR@@EXEEXT@"
104
-	@@CXX@ @LDFLAGS@ -o ../../@OCHR@@EXEEXT@ $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(YAML_CPP_AR) @LIBS@ @MYSQL_LIBS@
105
+	@@CXX@ @LDFLAGS@ -o ../../@OCHR@@EXEEXT@ $(CHAR_DIR_OBJ) $(LIBCONFIG_AR) $(COMMON_AR) $(MT19937AR_OBJ) $(LIBCONFIG_OBJ) $(YAML_CPP_AR) @LIBS@ @MYSQL_LIBS@ @LCURL_LIBS@
106
 
107
 needs_mysql:
108
 	@echo "MySQL not found or disabled by the configure script"
109
@@ -69,11 +76,11 @@ obj:
110
 
111
 obj/%.o: %.c $(CHAR_H) $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H) $(YAML_CPP_H)
112
 	@echo "	CC	$<"
113
-	@@CC@ @CFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) $(YAML_CPP_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
114
+	@@CC@ @CFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) $(LCURL_CFLAGS) $(YAML_CPP_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
115
 	
116
 obj/%.o: %.cpp $(CHAR_H) $(COMMON_H) $(MT19937AR_H) $(LIBCONFIG_H) $(YAML_CPP_H)
117
 	@echo "	CXX	$<"
118
-	@@CXX@ @CXXFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) $(YAML_CPP_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
119
+	@@CXX@ @CXXFLAGS@ $(COMMON_INCLUDE) $(MT19937AR_INCLUDE) $(LIBCONFIG_INCLUDE) $(LCURL_CFLAGS) $(YAML_CPP_INCLUDE) @MYSQL_CFLAGS@ @CPPFLAGS@ -c $(OUTPUT_OPTION) $<
120
 
121
 # missing object files
122
 $(COMMON_AR):
123
diff --git a/src/char/char.cpp b/src/char/char.cpp
124
index 407e07b..59694ef 100644
125
--- a/src/char/char.cpp
126
+++ b/src/char/char.cpp
127
@@ -2781,6 +2781,9 @@ void char_set_defaults(){
128
 	charserv_config.mail_return_days = 14;
129
 	charserv_config.mail_delete_days = 14;
130
 
131
+	charserv_config.gm_whisp_webhook = 0;
132
+	charserv_config.gm_whisp_webhook_url[0] = '\0';
133
+
134
 #if defined(RENEWAL) && PACKETVER >= 20151001
135
 	charserv_config.allowed_job_flag = 3;
136
 #else
137
@@ -3066,6 +3069,10 @@ bool char_config_read(const char* cfgName, bool normal){
138
 			charserv_config.mail_delete_days = atoi(w2);
139
 		} else if (strcmpi(w1, "allowed_job_flag") == 0) {
140
 			charserv_config.allowed_job_flag = atoi(w2);
141
+		} else if (strcmpi(w1, "gm_whisp_webhook") == 0) {
142
+			charserv_config.gm_whisp_webhook = config_switch(w2);
143
+		} else if (strcmpi(w1, "gm_whisp_webhook_url") == 0) {
144
+			safestrncpy(charserv_config.gm_whisp_webhook_url, w2, 1024);
145
 		} else if (strcmpi(w1, "import") == 0) {
146
 			char_config_read(w2, normal);
147
 		}
148
diff --git a/src/char/char.hpp b/src/char/char.hpp
149
index ab76e89..53142d4 100644
150
--- a/src/char/char.hpp
151
+++ b/src/char/char.hpp
152
@@ -186,6 +186,9 @@ struct CharServ_Config {
153
 	int mail_return_days;
154
 	int mail_delete_days;
155
 
156
+	int gm_whisp_webhook;
157
+	char gm_whisp_webhook_url[1024];
158
+
159
 	int allowed_job_flag;
160
 };
161
 extern struct CharServ_Config charserv_config;
162
diff --git a/src/char/inter.cpp b/src/char/inter.cpp
163
index cf9b4b2..92e7204 100644
164
--- a/src/char/inter.cpp
165
+++ b/src/char/inter.cpp
166
@@ -10,6 +10,9 @@
167
 #include <string>
168
 #include <vector>
169
 #include <stdlib.h>
170
+#ifdef HAVE_LIBCURL
171
+#include <curl/curl.h>
172
+#endif
173
 
174
 #include "../common/cbasetypes.h"
175
 #include "../common/malloc.h"
176
@@ -1245,7 +1248,6 @@ int mapif_parse_WisReply(int fd)
177
 		mapif_wis_reply(wd->fd, wd->src, flag); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
178
 		idb_remove(wis_db, id);
179
 	}
180
-
181
 	return 0;
182
 }
183
 
184
@@ -1258,6 +1260,34 @@ int mapif_parse_WisToGM(int fd)
185
 	WBUFW(buf, 0) = 0x3803;
186
 	chmapif_sendall(buf, RFIFOW(fd,2));
187
 
188
+#ifdef HAVE_LIBCURL
189
+	if (charserv_config.gm_whisp_webhook != 0 && charserv_config.gm_whisp_webhook_url[0] != 0) {
190
+		CURL *curl;
191
+		CURLcode res;
192
+		curl = curl_easy_init();
193
+		if (curl) {
194
+			char buf2[300]; //just the message
195
+			char * bp = buf2;
196
+			char * c = RFIFOCP(fd, 8 + NAME_LENGTH);
197
+			memset(buf, 0, sizeof(buf));
198
+			while (*c != '\0') {
199
+				if (*c == '"' || *c == '\\') {
200
+					*bp = '\\';
201
+					bp++;
202
+				}
203
+				*bp = *c;
204
+				c++;
205
+				bp++;
206
+			}
207
+			*bp = '\0';
208
+			snprintf((char *)buf, sizeof(buf), "{\"content\": \"[%s] %s\", \"username\": \"%s\"}", RFIFOCP(fd, 4), buf2, server_name);
209
+			curl_easy_setopt(curl, CURLOPT_URL, charserv_config.gm_whisp_webhook_url);
210
+			curl_easy_setopt(curl, CURLOPT_POSTFIELDS, buf);
211
+			res = curl_easy_perform(curl);
212
+			curl_easy_cleanup(curl);
213
+		}
214
+	}
215
+#endif
216
 	return 0;
217
 }