aboutsummaryrefslogtreecommitdiffstats
path: root/util/abstract.c
diff options
context:
space:
mode:
authorturret <turret@duck.com>2025-09-29 00:12:05 -0500
committerturret <turret@duck.com>2025-09-29 00:12:05 -0500
commit535ff19dd942d9d53228200eea9096e7e59f76f8 (patch)
treeb2109d68a00b42edf80f26791866b0a9f4de4461 /util/abstract.c
parent236887a2e380e57b31b2ad4efb3075a63199df3a (diff)
downloaddiscord-bot-skeleton-535ff19dd942d9d53228200eea9096e7e59f76f8.tar.gz
discord-bot-skeleton-535ff19dd942d9d53228200eea9096e7e59f76f8.tar.bz2
discord-bot-skeleton-535ff19dd942d9d53228200eea9096e7e59f76f8.zip
abstract: add interaction responses
Diffstat (limited to 'util/abstract.c')
-rw-r--r--util/abstract.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/util/abstract.c b/util/abstract.c
new file mode 100644
index 0000000..032f668
--- /dev/null
+++ b/util/abstract.c
@@ -0,0 +1,102 @@
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <cJSON.h>
+#include <curl/curl.h>
+
+#include <dbs/abstract.h>
+#include <dbs/api.h>
+#include <dbs/init.h>
+#include <dbs/log.h>
+#include <dbs/util.h>
+
+extern char *app_id;
+
+int interaction_reply(cJSON *i, char *content, int raw) {
+ struct curl_slist *headers = curl_slist_append(NULL, "Content-type: application/json");
+ char *i_id = js_getStr(i, "id");
+ char *i_token = js_getStr(i, "token");
+ char *url = malloc(strlen("/interactions///callback") + strlen(i_id) + strlen(i_token));
+ long code;
+
+ char *packet = NULL;
+
+ cJSON *packet_js = cJSON_CreateObject();
+ cJSON_AddNumberToObject(packet_js, "type", 4);
+
+ if(raw) {
+ cJSON_AddItemToObject(packet_js, "data", cJSON_Parse(content));
+ } else {
+ cJSON *message_js = cJSON_CreateObject();
+ cJSON_AddStringToObject(message_js, "content", content);
+ cJSON_AddItemToObject(packet_js, "data", message_js);
+ }
+
+ packet = cJSON_PrintUnformatted(packet_js);
+ cJSON_Delete(packet_js);
+
+ sprintf(url, "/interactions/%s/%s/callback", i_id, i_token);
+
+ close(api_patch(url, headers, packet, &code));
+ free(url);
+ free(packet);
+ curl_slist_free_all(headers);
+
+ return (code % 100) != 200;
+}
+
+int interaction_defer_reply(cJSON *i, int hidden) {
+ struct curl_slist *headers = curl_slist_append(NULL, "Content-type: application/json");
+ char *i_id = js_getStr(i, "id");
+ char *i_token = js_getStr(i, "token");
+ char *url = malloc(strlen("/interactions///callback") + strlen(i_id) + strlen(i_token) + 2);
+ long code;
+
+ char *packet = NULL;
+
+ cJSON *packet_js = cJSON_CreateObject();
+ cJSON_AddNumberToObject(packet_js, "type", 5);
+ if(hidden) {
+ cJSON *data = cJSON_CreateObject();
+ cJSON_AddNumberToObject(data, "flags", 1 << 6);
+ cJSON_AddItemToObject(packet_js, "data", data);
+ }
+ packet = cJSON_PrintUnformatted(packet_js);
+ cJSON_Delete(packet_js);
+
+ sprintf(url, "/interactions/%s/%s/callback", i_id, i_token);
+
+ close(api_post(url, headers, packet, &code));
+
+ free(url);
+ free(packet);
+ curl_slist_free_all(headers);
+
+ return (code % 100) != 200;
+}
+
+int interaction_edit_reply(cJSON *i, char *content, int raw) {
+ struct curl_slist *headers = curl_slist_append(NULL, "Content-type: application/json");
+ char *i_token = js_getStr(i, "token");
+ char *url = malloc(strlen("/webhooks///messages/@original") + strlen(app_id) + strlen(i_token) + 2);
+ long code;
+
+ char *message = content;
+
+ if(!raw) {
+ cJSON *message_js = cJSON_CreateObject();
+ cJSON_AddStringToObject(message_js, "content", content);
+ message = cJSON_PrintUnformatted(message_js);
+ cJSON_Delete(message_js);
+ }
+
+ sprintf(url, "/webhooks/%s/%s/messages/@original", app_id, i_token);
+
+ close(api_patch(url, headers, message, &code));
+ free(url);
+ if(!raw) free(message);
+ curl_slist_free_all(headers);
+
+ return (code % 100) != 200;
+}