diff options
Diffstat (limited to 'src/api.c')
-rw-r--r-- | src/api.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -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++) { |