#include #include #include #include #include #include #include CommandHead(CmdUnlinkMUC, cmd, argp) { ParseeCmdArg *args = argp; ParseeData *data = args->data; HashMap *json, *event = args->event, *mucs; DbRef *ref; char *muc = NULL, *chat_id = NULL, *room = NULL; BotInitialise(); muc = HashMapGet(cmd->arguments, "muc"); if (!muc) { ReplyBasic("`muc` field REQUIRED."); goto end; } ref = DbLock(data->db, 1, "chats"); json = DbJson(ref); chat_id = StrDuplicate(GrabString(json, 2, "mucs", muc)); if (!chat_id) { ReplySprintf("No internal mapping to '%s'.", muc); goto end; } mucs = GrabObject(json, 1, "mucs"); JsonValueFree(HashMapDelete(mucs, muc)); DbUnlock(data->db, ref); room = ParseeGetRoomID(data, chat_id); ref = DbLock(data->db, 1, "chats"); json = DbJson(ref); mucs = GrabObject(json, 1, "rooms"); JsonValueFree(HashMapDelete(mucs, room)); DbUnlock(data->db, ref); DbDelete(data->db, 2, "chats", chat_id); /* TODO: Do it automatically, if *not plumbed* */ ReplySprintf("The MUC %s is now *unlinked*.", muc); ReplySprintf("Please now remove the room %s and its aliases.", room ); end: Free(chat_id); Free(room); BotDestroy(); }