summaryrefslogtreecommitdiffstats
path: root/src/api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/api.c')
-rw-r--r--src/api.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/api.c b/src/api.c
index c405cff..7171e3a 100644
--- a/src/api.c
+++ b/src/api.c
@@ -238,7 +238,11 @@ signed char dc_json_cb (struct lejp_ctx * ctx, char reason) { /* to prevent warn
role = &pass->api_io.guild->role;
while (*role)
role = &(*role)->next;
- *role = pass->api_io.guild->role;
+ if (!dc_find_ll_role(pass->api_io.guild->role, pass->api_io.role->id)) {
+ fprintf(stderr, "new role id=%lld (:\n", pass->api_io.role->id);
+ pass->api_io.role->next = NULL;
+ *role = pass->api_io.role;
+ }
pass->api_io.role->guild = pass->api_io.guild;
if (pass->api_io.role->name && !strncmp(pass->api_io.role->name, "@everyone", strlen(pass->api_io.role->name)))
pass->api_io.role->status |= DC_EVERYONE;
@@ -681,6 +685,11 @@ void dc_api_i (struct dc_api_io i) { /* this function does not call attached fun
}
}
struct dc_api_io dc_api_o (struct dc_api_io i /* for ->program */) {
+ if (!i.program) {
+ i.type = DC_API_STATUS;
+ i.status = DC_USER_ERROR;
+ return i;
+ }
if (i.program->lws_context)
lws_service(i.program->lws_context, 0);
for (size_t x = 0; x < i.program->clients_length; x++) {