[MOD] Carve the way to XMPP rich replies

Bifrost could *never*!
This commit is contained in:
LDA 2024-06-23 23:46:46 +02:00
commit fe77906cde
10 changed files with 126 additions and 18 deletions

View file

@ -69,16 +69,24 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
char *msgtype = GrabString(event, 2, "content", "msgtype");
char *body = GrabString(event, 2, "content", "body");
char *id = GrabString(event, 1, "room_id");
char *ev_id = GrabString(event, 1, "event_id");
char *sender = GrabString(event, 1, "sender");
char *chat_id, *muc_id, *jid;
char *reply_id = MatrixGetReply(event);
bool direct = false;
if (ParseeIsPuppet(data->config, sender))
{
Free(reply_id);
return;
}
if (reply_id)
{
Log(LOG_INFO, "reply=%s", reply_id);
}
ref = DbLock(data->db, 3, "rooms", id, "data");
json = DbJson(ref);
direct = JsonValueAsBoolean(HashMapGet(json, "is_direct"));
@ -89,9 +97,10 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
char *user = GrabString(json, 1, "xmpp_user");
char *local = ParseeEncodeMXID(sender);
XMPPSendPlain(jabber, local, user, body, NULL);
XMPPSendPlain(jabber, local, user, body, NULL, NULL, NULL);
Free(local);
Free(reply_id);
return;
}
@ -100,6 +109,7 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
muc_id = ParseeGetMUCID(data, chat_id);
if (!chat_id)
{
Free(reply_id);
return;
}
jid = ParseeEncodeMXID(sender);
@ -107,14 +117,24 @@ ParseeMessageHandler(ParseeData *data, HashMap *event)
/* TODO: Check the name's validity */
char *name = ASGetName(data->config, NULL, sender);
char *rev = StrConcat(3, muc_id, "/", name);
char *stanza = NULL, *sender = NULL;
if (reply_id)
{
ParseeGetStanzaInfo(data, chat_id, reply_id, &stanza, &sender);
Log(LOG_INFO, "Replying to %s by %s", stanza, sender);
}
XMPPJoinMUC(jabber, jid, rev);
XMPPSendPlain(jabber, jid, muc_id, body, "groupchat");
XMPPSendPlain(jabber, jid, muc_id, body, "groupchat", stanza, sender);
Free(rev);
Free(name);
Free(stanza);
Free(sender);
}
Free(chat_id);
Free(muc_id);
Free(jid);
Free(reply_id);
}
void