From 535ff19dd942d9d53228200eea9096e7e59f76f8 Mon Sep 17 00:00:00 2001 From: turret Date: Mon, 29 Sep 2025 00:12:05 -0500 Subject: abstract: add interaction responses --- include/dbs/abstract.h | 8 ++++ util/abstract.c | 102 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 include/dbs/abstract.h create mode 100644 util/abstract.c diff --git a/include/dbs/abstract.h b/include/dbs/abstract.h new file mode 100644 index 0000000..62ec410 --- /dev/null +++ b/include/dbs/abstract.h @@ -0,0 +1,8 @@ +#ifndef __DBS_ABSTRACT_H +#define __DBS_ABSTRACT_H + +int interaction_reply(cJSON *i, char *content, int raw); +int interaction_defer_reply(cJSON *i, int hidden); +int interaction_edit_reply(cJSON *i, char *content, int raw); + +#endif 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 +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +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; +} -- cgit v1.2.3