12 #include "aegis/config.hpp"
13 #include "aegis/utility.hpp"
14 #if !defined(AEGIS_DISABLE_ALL_CACHE)
15 #include "aegis/snowflake.hpp"
16 #include "aegis/gateway/objects/presence.hpp"
17 #include "aegis/fwd.hpp"
18 #include <nlohmann/json.hpp>
23 #include <shared_mutex>
28 #if (AEGIS_HAS_STD_SHARED_MUTEX == 1)
29 using shared_mutex = std::shared_mutex;
31 using shared_mutex = std::shared_timed_mutex;
34 using json = nlohmann::json;
49 std::vector<snowflake> roles;
69 std::shared_lock<shared_mutex> l(_m);
70 std::string _username = _name;
71 return std::move(_username);
80 return _discriminator;
89 std::shared_lock<shared_mutex> l(_m);
90 std::string t_avatar = _avatar;
91 return std::move(t_avatar);
116 AEGIS_DECL std::string
get_mention() const noexcept;
124 AEGIS_DECL guild_info & get_guild_info_nolock(
snowflake guild_id) noexcept;
126 AEGIS_DECL guild_info * get_guild_info_nocreate(
snowflake guild_id) const noexcept;
175 shared_mutex &
mtx() noexcept
189 presence::user_status _status = presence::user_status::Offline;
191 uint16_t _discriminator = 0;
193 bool _is_bot =
false;
194 bool _mfa_enabled =
false;
195 std::vector<std::unique_ptr<guild_info>> guilds;
196 mutable shared_mutex _m;
199 AEGIS_DECL
void _load(
guild * _guild,
const json & obj,
shards::shard * _shard,
bool self_add =
true);
202 AEGIS_DECL
void _load_nolock(
guild * _guild,
const json & obj,
shards::shard * _shard,
bool self_add =
true,
bool guild_lock =
true);
205 AEGIS_DECL guild_info & _join(
snowflake guild_id);
208 AEGIS_DECL guild_info & _join_nolock(
snowflake guild_id);
213 std::unique_lock<shared_mutex> l(
mtx());
214 guilds.erase(std::find_if(std::begin(guilds), std::end(guilds), [&guild_id](
const std::unique_ptr<guild_info> & gi)
216 if (gi->
id == guild_id)
Stores creation time and extra data specific to Discord for entities.
Definition: snowflake.hpp:21
Class for performing actions pertaining to a specified guild.
Definition: guild.hpp:159
uint16_t get_discriminator() const noexcept
Get the discriminator of this user.
Definition: user.hpp:78
snowflake get_dm_id() const noexcept
Definition: user.hpp:157
Primary class for managing a bot interface.
Definition: core.hpp:157
std::string get_mention() const noexcept
Builds a mention for this user.
Definition: user.cpp:206
bool is_mfa_enabled() const noexcept
Get the status of multi factor authentication.
Definition: user.hpp:107
Definition: message.hpp:57
bool mute
Definition: user.hpp:53
void set_dm_id(snowflake _id) noexcept
Set the DM channel id for the user.
Definition: user.hpp:166
shared_mutex & mtx() noexcept
Definition: user.hpp:175
snowflake get_id() const noexcept
Get the snowflake of this user.
Definition: user.hpp:138
Stores user-specific and guild-specific attributes of users.
Definition: user.hpp:37
Definition: presence.hpp:27
snowflake id
Definition: user.hpp:47
bool has_dm() const noexcept
Whether the DM channel id for this user has been cached yet.
Definition: user.hpp:147
std::string get_avatar() const noexcept
Get the avatar hash of this user.
Definition: user.hpp:87
std::string get_username() const noexcept
Get the nickname of this user.
Definition: user.hpp:67
uint64_t joined_at
Definition: user.hpp:51
Member owned guild information.
Definition: user.hpp:45
std::string get_name(snowflake guild_id) noexcept
Get the nickname of this user.
Definition: user.cpp:159
bool is_bot() const noexcept
Check whether user is a bot.
Definition: user.hpp:98
guild_info & get_guild_info(snowflake guild_id) noexcept
Get the member owned guild information object.
Definition: user.cpp:102
bool deaf
Definition: user.hpp:52
std::string get_full_name() const noexcept
Get the full name (username#discriminator) of this user.
Definition: user.cpp:25
Tracks websocket shards and their connections.
Definition: shard.hpp:42
lib::optional< std::string > nickname
Definition: user.hpp:50