aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Matrix.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2020-11-22 11:46:01 +0100
committerdec05eba <dec05eba@protonmail.com>2020-11-22 11:46:01 +0100
commit818f65e1d9e21a2b0dcecf34312b217000da7c92 (patch)
treea9633c18104c9169433cb4a6e4c96c960d78a669 /src/plugins/Matrix.cpp
parent5dd0248e16522a3672c58a7892d549840257e8dd (diff)
Matrix: add /react
Diffstat (limited to 'src/plugins/Matrix.cpp')
-rw-r--r--src/plugins/Matrix.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp
index e5e4922..05881d5 100644
--- a/src/plugins/Matrix.cpp
+++ b/src/plugins/Matrix.cpp
@@ -2733,6 +2733,53 @@ namespace QuickMedia {
return PluginResult::OK;
}
+ PluginResult Matrix::post_reaction(RoomData *room, const std::string &body, void *relates_to, std::string &event_id_response) {
+ Message *relates_to_message_raw = (Message*)relates_to;
+
+ char random_characters[18];
+ if(!generate_random_characters(random_characters, sizeof(random_characters)))
+ return PluginResult::ERR;
+
+ std::string random_readable_chars = random_characters_to_readable_string(random_characters, sizeof(random_characters));
+
+ rapidjson::Document relates_to_json(rapidjson::kObjectType);
+ relates_to_json.AddMember("event_id", rapidjson::StringRef(relates_to_message_raw->event_id.c_str()), relates_to_json.GetAllocator());
+ relates_to_json.AddMember("key", rapidjson::StringRef(body.c_str()), relates_to_json.GetAllocator());
+ relates_to_json.AddMember("rel_type", "m.annotation", relates_to_json.GetAllocator());
+
+ rapidjson::Document request_json(rapidjson::kObjectType);
+ request_json.AddMember("m.relates_to", std::move(relates_to_json), request_json.GetAllocator());
+
+ rapidjson::StringBuffer buffer;
+ rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
+ request_json.Accept(writer);
+
+ std::vector<CommandArg> additional_args = {
+ { "-X", "PUT" },
+ { "-H", "content-type: application/json" },
+ { "-H", "Authorization: Bearer " + access_token },
+ { "--data-binary", buffer.GetString() }
+ };
+
+ char request_url[512];
+ snprintf(request_url, sizeof(request_url), "%s/_matrix/client/r0/rooms/%s/send/m.reaction/m%ld.%.*s", homeserver.c_str(), room->id.c_str(), time(NULL), (int)random_readable_chars.size(), random_readable_chars.c_str());
+
+ rapidjson::Document json_root;
+ DownloadResult download_result = download_json(json_root, request_url, std::move(additional_args), true);
+ if(download_result != DownloadResult::OK) return download_result_to_plugin_result(download_result);
+
+ if(!json_root.IsObject())
+ return PluginResult::ERR;
+
+ const rapidjson::Value &event_id_json = GetMember(json_root, "event_id");
+ if(!event_id_json.IsString())
+ return PluginResult::ERR;
+
+ fprintf(stderr, "Matrix post reaction, response event id: %s\n", event_id_json.GetString());
+ event_id_response = std::string(event_id_json.GetString(), event_id_json.GetStringLength());
+ return PluginResult::OK;
+ }
+
std::shared_ptr<Message> Matrix::get_message_by_id(RoomData *room, const std::string &event_id) {
std::shared_ptr<Message> existing_room_message = room->get_message_by_id(event_id);
if(existing_room_message)