mirror of
https://forge.fsky.io/lda/Parsee.git
synced 2026-03-13 21:25:11 +00:00
[ADD/WIP] Continue MUCwerk
oh man this is gonna be painful to do... xmpp is fine iff youre doing DMs isnt it?
This commit is contained in:
parent
3ac11fd269
commit
d3b7f2fee0
19 changed files with 707 additions and 44 deletions
|
|
@ -16,6 +16,7 @@ ParseeMemberHandler(ParseeData *data, HashMap *event)
|
|||
char *membership = GrabString(event, 2, "content", "membership");
|
||||
char *room_id = GrabString(event, 1, "room_id");
|
||||
char *sender = GrabString(event, 1, "sender");
|
||||
char *chat_id;
|
||||
const ParseeConfig *conf = data->config;
|
||||
Log(LOG_INFO, "Membership '%s'->'%s'", state_key, membership);
|
||||
|
||||
|
|
@ -41,6 +42,24 @@ ParseeMemberHandler(ParseeData *data, HashMap *event)
|
|||
Free(jid);
|
||||
}
|
||||
}
|
||||
else if (StrEquals(membership, "join") && !ParseeIsPuppet(conf, state_key))
|
||||
{
|
||||
char *jid = ParseeEncodeMXID(state_key);
|
||||
chat_id = ParseeGetFromRoomID(data, room_id);
|
||||
Log(LOG_INFO, "JID=%s", jid);
|
||||
if (chat_id)
|
||||
{
|
||||
char *muc = ParseeGetMUCID(data, chat_id);
|
||||
char *rev = StrConcat(2, muc, "/parsee");
|
||||
Log(LOG_INFO, "chat_id=%s muc=%s", chat_id, muc);
|
||||
/* Make the user join the MUC */
|
||||
XMPPJoinMUC(data->jabber, jid, rev);
|
||||
Free(rev);
|
||||
Free(muc);
|
||||
}
|
||||
Free(jid);
|
||||
Free(chat_id);
|
||||
}
|
||||
}
|
||||
static void
|
||||
ParseeMessageHandler(ParseeData *data, HashMap *event)
|
||||
|
|
@ -53,6 +72,9 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
|
|||
char *body = GrabString(event, 2, "content", "body");
|
||||
char *id = GrabString(event, 1, "room_id");
|
||||
char *sender = GrabString(event, 1, "sender");
|
||||
char *chat_id;
|
||||
|
||||
bool direct = false;
|
||||
|
||||
if (ParseeIsPuppet(data->config, sender))
|
||||
{
|
||||
|
|
@ -62,9 +84,10 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
|
|||
|
||||
ref = DbLock(data->db, 3, "rooms", id, "data");
|
||||
json = DbJson(ref);
|
||||
direct = JsonValueAsBoolean(HashMapGet(json, "is_direct"));
|
||||
DbUnlock(data->db, ref);
|
||||
|
||||
|
||||
if (JsonValueAsBoolean(HashMapGet(json, "is_direct")))
|
||||
if (direct)
|
||||
{
|
||||
char *user = GrabString(json, 1, "xmpp_user");
|
||||
char *local = ParseeEncodeMXID(sender);
|
||||
|
|
@ -73,9 +96,17 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
|
|||
XMPPSendPlain(jabber, local, user, body, NULL);
|
||||
|
||||
Free(local);
|
||||
return;
|
||||
}
|
||||
|
||||
DbUnlock(data->db, ref);
|
||||
/* Try to find the chat ID */
|
||||
chat_id = ParseeGetFromRoomID(data, id);
|
||||
if (!chat_id)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Log(LOG_INFO, "Chat ID=%s", chat_id);
|
||||
Free(chat_id);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -88,6 +119,7 @@ ParseeEventHandler(ParseeData *data, HashMap *event)
|
|||
}
|
||||
|
||||
event_type = GrabString(event, 1, "type");
|
||||
Log(LOG_INFO, "E->%s", GrabString(event, 1, "sender"));
|
||||
if (StrEquals(event_type, "m.room.member"))
|
||||
{
|
||||
ParseeMemberHandler(data, event);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue