diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/Matrix.cpp | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/src/plugins/Matrix.cpp b/src/plugins/Matrix.cpp index a07d050..c87d604 100644 --- a/src/plugins/Matrix.cpp +++ b/src/plugins/Matrix.cpp @@ -1892,10 +1892,35 @@ namespace QuickMedia { body = user_display_name + " joined the room"; } } else if(strcmp(membership_json.GetString(), "leave") == 0) { - if(sent_by_somebody_else) - body = user_display_name + " was kicked from the room by " + sender_display_name; - else - body = user_display_name + " left the room"; + if(sent_by_somebody_else) { + bool unbanned = false; + if(unsigned_json.IsObject()) { + const rapidjson::Value &prev_content_json = GetMember(unsigned_json, "prev_content"); + if(prev_content_json.IsObject()) { + const rapidjson::Value &prev_membership_json = GetMember(prev_content_json, "membership"); + if(prev_membership_json.IsString() && strcmp(prev_membership_json.GetString(), "ban") == 0) { + body = user_display_name + " was unbanned from the room by " + sender_display_name; + unbanned = true; + } + } + } + if(!unbanned) + body = user_display_name + " was kicked from the room by " + sender_display_name; + } else { + bool invite = false; + if(unsigned_json.IsObject()) { + const rapidjson::Value &prev_content_json = GetMember(unsigned_json, "prev_content"); + if(prev_content_json.IsObject()) { + const rapidjson::Value &prev_membership_json = GetMember(prev_content_json, "membership"); + if(prev_membership_json.IsString() && strcmp(prev_membership_json.GetString(), "invite") == 0) { + body = user_display_name + " rejected the invitation"; + invite = true; + } + } + } + if(!invite) + body = user_display_name + " left the room"; + } if(!reason_str.empty()) body += ", reason: " + reason_str; } else if(strcmp(membership_json.GetString(), "invite") == 0) { |