mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-06 20:15:19 +03:00
add PRESENCE_UPDATE handling (for user object only)
This commit is contained in:
@@ -519,6 +519,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
|
||||
case GatewayEvent::GUILD_MEMBER_UPDATE: {
|
||||
HandleGatewayGuildMemberUpdate(m);
|
||||
} break;
|
||||
case GatewayEvent::PRESENCE_UPDATE: {
|
||||
HandleGatewayPresenceUpdate(m);
|
||||
} break;
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
@@ -600,6 +603,12 @@ void DiscordClient::HandleGatewayGuildMemberUpdate(const GatewayMessage &msg) {
|
||||
m_store.SetGuildMemberData(data.GuildID, data.User.ID, member);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayPresenceUpdate(const GatewayMessage &msg) {
|
||||
PresenceUpdateMessage data = msg.Data;
|
||||
auto cur = m_store.GetUser(data.User.at("id").get<Snowflake>());
|
||||
User::update_from_json(data.User, *cur);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayMessageUpdate(const GatewayMessage &msg) {
|
||||
Snowflake id = msg.Data.at("id");
|
||||
|
||||
@@ -728,6 +737,7 @@ void DiscordClient::LoadEventMap() {
|
||||
m_event_map["GUILD_DELETE"] = GatewayEvent::GUILD_DELETE;
|
||||
m_event_map["MESSAGE_DELETE_BULK"] = GatewayEvent::MESSAGE_DELETE_BULK;
|
||||
m_event_map["GUILD_MEMBER_UPDATE"] = GatewayEvent::GUILD_MEMBER_UPDATE;
|
||||
m_event_map["PRESENCE_UPDATE"] = GatewayEvent::PRESENCE_UPDATE;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
|
||||
|
||||
@@ -124,6 +124,7 @@ private:
|
||||
void HandleGatewayGuildDelete(const GatewayMessage &msg);
|
||||
void HandleGatewayMessageDeleteBulk(const GatewayMessage &msg);
|
||||
void HandleGatewayGuildMemberUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayPresenceUpdate(const GatewayMessage &msg);
|
||||
void HeartbeatThread();
|
||||
void SendIdentify();
|
||||
|
||||
|
||||
@@ -141,3 +141,17 @@ void from_json(const nlohmann::json &j, GuildMemberUpdateMessage &m) {
|
||||
JS_ON("nick", m.Nick);
|
||||
JS_D("joined_at", m.JoinedAt);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, ClientStatus &m) {
|
||||
JS_O("desktop", m.Desktop);
|
||||
JS_O("mobile", m.Mobile);
|
||||
JS_O("web", m.Web);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, PresenceUpdateMessage &m) {
|
||||
m.User = j.at("user");
|
||||
JS_D("guild_id", m.GuildID);
|
||||
JS_D("status", m.Status);
|
||||
// JS_D("activities", m.Activities);
|
||||
JS_D("client_status", m.ClientStatus);
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ enum class GatewayEvent : int {
|
||||
GUILD_DELETE,
|
||||
MESSAGE_DELETE_BULK,
|
||||
GUILD_MEMBER_UPDATE,
|
||||
PRESENCE_UPDATE,
|
||||
};
|
||||
|
||||
struct GatewayMessage {
|
||||
@@ -201,3 +202,21 @@ struct GuildMemberUpdateMessage {
|
||||
|
||||
friend void from_json(const nlohmann::json &j, GuildMemberUpdateMessage &m);
|
||||
};
|
||||
|
||||
struct ClientStatus {
|
||||
std::string Desktop; // opt
|
||||
std::string Mobile; // opt
|
||||
std::string Web; // opt
|
||||
|
||||
friend void from_json(const nlohmann::json &j, ClientStatus &m);
|
||||
};
|
||||
|
||||
struct PresenceUpdateMessage {
|
||||
nlohmann::json User; // the client updates an existing object from this data
|
||||
Snowflake GuildID;
|
||||
std::string Status;
|
||||
// std::vector<Activity> Activities;
|
||||
ClientStatus ClientStatus;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, PresenceUpdateMessage &m);
|
||||
};
|
||||
|
||||
@@ -32,3 +32,22 @@ void from_json(const nlohmann::json &j, User &m) {
|
||||
JS_ON("nsfw_allowed", m.IsNSFWAllowed);
|
||||
JS_ON("phone", m.Phone);
|
||||
}
|
||||
|
||||
void User::update_from_json(const nlohmann::json &j, User &m) {
|
||||
JS_ON("username", m.Username);
|
||||
JS_ON("discriminator", m.Discriminator);
|
||||
JS_ON("avatar", m.Avatar);
|
||||
JS_ON("bot", m.IsBot);
|
||||
JS_ON("system", m.IsSystem);
|
||||
JS_ON("mfa_enabled", m.IsMFAEnabled);
|
||||
JS_ON("locale", m.Locale);
|
||||
JS_ON("verified", m.IsVerified);
|
||||
JS_ON("email", m.Email);
|
||||
JS_ON("flags", m.Flags);
|
||||
JS_ON("premium_type", m.PremiumType);
|
||||
JS_ON("public_flags", m.PublicFlags);
|
||||
JS_ON("desktop", m.IsDesktop);
|
||||
JS_ON("mobile", m.IsMobile);
|
||||
JS_ON("nsfw_allowed", m.IsNSFWAllowed);
|
||||
JS_ON("phone", m.Phone);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ struct User {
|
||||
std::string Phone; // null?
|
||||
|
||||
friend void from_json(const nlohmann::json &j, User &m);
|
||||
static void update_from_json(const nlohmann::json &j, User &m);
|
||||
|
||||
bool HasAvatar() const;
|
||||
std::string GetAvatarURL(std::string ext = "png", std::string size = "32") const;
|
||||
|
||||
Reference in New Issue
Block a user