From da028e03fd8a2080dbca37f43dde84b0191f7a2a Mon Sep 17 00:00:00 2001 From: rexy712 Date: Sat, 30 Mar 2019 19:30:01 -0700 Subject: [PATCH] message deletion, getters for displayname and profile picture --- doc/TODO | 3 --- include/matrix.hpp | 7 ++++++- src/matrix.cpp | 22 +++++++++++++++++++++- src/test.cpp | 2 ++ 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/doc/TODO b/doc/TODO index eb3e518..a627723 100644 --- a/doc/TODO +++ b/doc/TODO @@ -14,10 +14,7 @@ matrix: send custom html messages kick users ban/unban users - profile_picture getter - display_name getter list room members - delete messages change password ability to select specification revision diff --git a/include/matrix.hpp b/include/matrix.hpp index 6af7830..adf860b 100644 --- a/include/matrix.hpp +++ b/include/matrix.hpp @@ -235,6 +235,8 @@ namespace matrix{ //networked getter + raii::rjp_string get_display_name(void)const; + raii::rjp_string get_profile_picture(void)const; raii::rjp_string room_alias_to_id(const raii::string_base& alias)const; std::vector list_rooms(void)const; @@ -262,9 +264,12 @@ namespace matrix{ raii::rjp_string send_message(const raii::string_base& room, const raii::string_base& text)const; raii::rjp_string send_audio(const raii::string_base& room, const audio_info& audio)const; raii::rjp_string send_file(const raii::string_base& room, const file_info& file)const; - void send_typing(const raii::string_base& room, bool active, int timeout = 5000)const; + raii::rjp_string redact_event(const raii::string_base& roomid, const raii::string_base& eventid, const raii::string_base& reason)const; + raii::rjp_string redact_event(const raii::string_base& roomid, const raii::string_base& eventid)const; + + template void set_message_callback(Func&& f){ m_message_callback = std::forward(f); diff --git a/src/matrix.cpp b/src/matrix.cpp index 1f55c77..85e4a06 100644 --- a/src/matrix.cpp +++ b/src/matrix.cpp @@ -90,6 +90,12 @@ namespace matrix{ raii::string reply = _put_curl(raii::string("{\"avatar_url\":\"" + media_url + "\"}"), m_urls.profile_picture(), raii::curl_llist()); } + raii::rjp_string bot::get_display_name(void)const{ + return _get_and_find(m_urls.displayname(), "displayname"_ss); + } + raii::rjp_string bot::get_profile_picture(void)const{ + return _get_and_find(m_urls.profile_picture(), "avatar_url"_ss); + } raii::rjp_string bot::room_alias_to_id(const raii::string_base& alias)const{ auto tmp = m_curl.encode(alias, alias.length()); return _get_and_find(raii::string(m_urls.alias_lookup() + tmp), "room_id"_ss); @@ -412,6 +418,20 @@ namespace matrix{ _put_curl("{\"typing\":false}"_ss, m_urls.typing(m_homeserver, m_access_token, m_curl.encode(room), m_curl.encode(m_userid)), raii::curl_llist()); } + raii::rjp_string bot::redact_event(const raii::string_base& roomid, const raii::string_base& eventid, const raii::string_base& reason)const{ + auto ret = _put_curl(raii::string("{\"reason\":\"" + reason + "\"}"), m_urls.redact(m_homeserver, m_access_token, m_curl.encode(roomid), m_curl.encode(eventid)), raii::curl_llist()); + if(!ret) return {}; + raii::rjp_ptr root(rjp_parse(ret.get())); + if(!root) return {}; + + RJP_search_res res = rjp_search_member(root.get(), "event_id", 0); + if(!res.value) return {}; + return raii::rjp_string(res.value); + } + raii::rjp_string bot::redact_event(const raii::string_base& roomid, const raii::string_base& eventid)const{ + return redact_event(roomid, eventid, ""_ss); + } + void bot::logout(void){ _get_curl(m_urls.logout(m_homeserver, m_access_token)); m_urls.invalidate_accesstoken(); @@ -756,7 +776,7 @@ namespace matrix{ return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/send/m.room.message?access_token=" + access_token); } raii::string bot::mat_url_list::redact(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid, const raii::string_base& eventid)const{ - return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/redact/" + eventid + "?access_token=" + access_token); + return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/redact/" + eventid + "/0?access_token=" + access_token); } raii::string bot::mat_url_list::power_level(const raii::string_base& homeserver, const raii::string_base& access_token, const raii::string_base& roomid)const{ return raii::string(s_proto + homeserver + "/_matrix/client/r0/rooms/" + roomid + "/state/m.room.power_levels?access_token=" + access_token); diff --git a/src/test.cpp b/src/test.cpp index 4517344..1a09ea5 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -452,6 +452,8 @@ int main(){ matbot.set_message_callback(sync_callback); matbot.set_invite_callback(invite_callback); + matbot.redact_event("!QeYfNDCRodtNohhnaI:matrix.org"_ss, "$1553965753281066lkKaO:matrix.org"_ss, "too gay"_ss); + while(!should_quit){ sync_reply = matbot.sync(30000); DEBUG_PRINT("syncing\n");