#include #include #include #include #include #include #define GrabString(obj, ...) JsonValueAsString(JsonGet(obj, __VA_ARGS__)) static void ParseeMemberHandler(const ParseeConfig *conf, HashMap *event) { char *state_key = GrabString(event, 1, "state_key"); char *membership = GrabString(event, 2, "content", "membership"); char *room_id = GrabString(event, 1, "room_id"); Log(LOG_INFO, "Membership '%s'->'%s'", state_key, membership); if (StrEquals(membership, "invite") && ParseeIsPuppet(conf, state_key)) { Log(LOG_INFO, "Looks like %s was invited to %s", state_key, GrabString(event, 1, "room_id") ); ASJoin(conf, room_id, state_key); } } static void ParseeMessageHandler(const ParseeConfig *conf, HashMap *event) { char *msgtype = GrabString(event, 2, "content", "msgtype"); char *body = GrabString(event, 2, "content", "body"); char *id = GrabString(event, 1, "room_id"); if (StrEquals(body, "!help")) { Log(LOG_ERR, "Not implemented!"); ASSend(conf, id, NULL, "m.room.message", MatrixCreateNotice("No help, pal.") ); } } void ParseeEventHandler(const ParseeConfig *conf, HashMap *event) { char *event_type; if (!conf || !event) { return; } Log(LOG_INFO, "Event by '%s', with type '%s'", JsonValueAsString(HashMapGet(event, "sender")), JsonValueAsString(HashMapGet(event, "type")) ); event_type = GrabString(event, 1, "type"); if (StrEquals(event_type, "m.room.member")) { ParseeMemberHandler(conf, event); return; } if (StrEquals(event_type, "m.room.message")) { ParseeMessageHandler(conf, event); return; } }