1 #pragma once
2 
3 /// @file
4 /// @brief An ephemeral event describing the presence of a user.
5 
6 #if __has_include(<nlohmann/json_fwd.hpp>)
7 #include <nlohmann/json_fwd.hpp>
8 #else
9 #include <nlohmann/json.hpp>
10 #endif
11 
12 #include <optional>
13 #include <string>
14 #include <string_view>
15 
16 namespace mtx {
17 //! Presence specific types.
18 namespace presence {
19 //! The current presence state.
20 enum PresenceState
21 {
22     online,      //!< The user is online.
23     offline,     //!< The user is offline.
24     unavailable, //!< The user is online, but currently not available.
25 };
26 
27 std::string
28 to_string(PresenceState state);
29 PresenceState
30 from_string(std::string_view str);
31 }
32 
33 namespace events {
34 namespace presence {
35 //! The `m.presence` ephemeral event.
36 struct Presence
37 {
38     std::string avatar_url;  //! The current avatar URL for this user, if any.
39     std::string displayname; //! The current display name for this user, if any.
40     uint64_t
41       last_active_ago; //! The last time since this used performed some action, in milliseconds.
42     mtx::presence::PresenceState presence; //! Required. The presence state for this user. One
43                                            //! of: ["online", "offline", "unavailable"]
44     bool currently_active;                 //! Whether the user is currently active
45     std::string status_msg;                //! An optional description to accompany the presence.
46 };
47 
48 void
49 from_json(const nlohmann::json &obj, Presence &presence);
50 void
51 to_json(nlohmann::json &obj, const Presence &presence);
52 }
53 }
54 }
55