mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-19 20:11:59 +03:00
show status indicator in dm list, handle (some of) READY_SUPPLEMENTAL
This commit is contained in:
@@ -791,6 +791,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
|
||||
case GatewayEvent::USER_NOTE_UPDATE: {
|
||||
HandleGatewayUserNoteUpdate(m);
|
||||
} break;
|
||||
case GatewayEvent::READY_SUPPLEMENTAL: {
|
||||
HandleGatewayReadySupplemental(m);
|
||||
} break;
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
@@ -1174,6 +1177,22 @@ void DiscordClient::HandleGatewayUserNoteUpdate(const GatewayMessage &msg) {
|
||||
m_signal_note_update.emit(data.ID, data.Note);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) {
|
||||
ReadySupplementalData data = msg.Data;
|
||||
for (const auto &p : data.MergedPresences.Friends) {
|
||||
const auto s = p.Presence.Status;
|
||||
if (s == "online")
|
||||
m_user_to_status[p.UserID] = PresenceStatus::Online;
|
||||
else if (s == "offline")
|
||||
m_user_to_status[p.UserID] = PresenceStatus::Offline;
|
||||
else if (s == "idle")
|
||||
m_user_to_status[p.UserID] = PresenceStatus::Idle;
|
||||
else if (s == "dnd")
|
||||
m_user_to_status[p.UserID] = PresenceStatus::DND;
|
||||
m_signal_presence_update.emit(p.UserID, m_user_to_status.at(p.UserID));
|
||||
}
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayReconnect(const GatewayMessage &msg) {
|
||||
printf("received reconnect\n");
|
||||
m_signal_disconnected.emit(true, GatewayCloseCode::Reconnecting);
|
||||
@@ -1455,6 +1474,7 @@ void DiscordClient::LoadEventMap() {
|
||||
m_event_map["INVITE_CREATE"] = GatewayEvent::INVITE_CREATE;
|
||||
m_event_map["INVITE_DELETE"] = GatewayEvent::INVITE_DELETE;
|
||||
m_event_map["USER_NOTE_UPDATE"] = GatewayEvent::USER_NOTE_UPDATE;
|
||||
m_event_map["READY_SUPPLEMENTAL"] = GatewayEvent::READY_SUPPLEMENTAL;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
|
||||
|
||||
@@ -179,6 +179,7 @@ private:
|
||||
void HandleGatewayInviteCreate(const GatewayMessage &msg);
|
||||
void HandleGatewayInviteDelete(const GatewayMessage &msg);
|
||||
void HandleGatewayUserNoteUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayReadySupplemental(const GatewayMessage &msg);
|
||||
void HandleGatewayReconnect(const GatewayMessage &msg);
|
||||
void HandleGatewayInvalidSession(const GatewayMessage &msg);
|
||||
void HeartbeatThread();
|
||||
|
||||
@@ -120,6 +120,21 @@ void from_json(const nlohmann::json &j, ReadyEventData &m) {
|
||||
JS_ON("merged_members", m.MergedMembers);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, MergedPresence &m) {
|
||||
JS_D("user_id", m.UserID);
|
||||
JS_O("last_modified", m.LastModified);
|
||||
m.Presence = j;
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, SupplementalMergedPresencesData &m) {
|
||||
JS_D("guilds", m.Guilds);
|
||||
JS_D("friends", m.Friends);
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, ReadySupplementalData &m) {
|
||||
JS_D("merged_presences", m.MergedPresences);
|
||||
}
|
||||
|
||||
void to_json(nlohmann::json &j, const IdentifyProperties &m) {
|
||||
j["os"] = m.OS;
|
||||
j["browser"] = m.Browser;
|
||||
|
||||
@@ -62,6 +62,7 @@ enum class GatewayEvent : int {
|
||||
INVITE_CREATE,
|
||||
INVITE_DELETE,
|
||||
USER_NOTE_UPDATE,
|
||||
READY_SUPPLEMENTAL,
|
||||
};
|
||||
|
||||
enum class GatewayCloseCode : uint16_t {
|
||||
@@ -213,6 +214,27 @@ struct ReadyEventData {
|
||||
friend void from_json(const nlohmann::json &j, ReadyEventData &m);
|
||||
};
|
||||
|
||||
struct MergedPresence {
|
||||
Snowflake UserID;
|
||||
std::optional<uint64_t> LastModified;
|
||||
PresenceData Presence;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, MergedPresence &m);
|
||||
};
|
||||
|
||||
struct SupplementalMergedPresencesData {
|
||||
std::vector<std::vector<MergedPresence>> Guilds;
|
||||
std::vector<MergedPresence> Friends;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, SupplementalMergedPresencesData &m);
|
||||
};
|
||||
|
||||
struct ReadySupplementalData {
|
||||
SupplementalMergedPresencesData MergedPresences;
|
||||
|
||||
friend void from_json(const nlohmann::json &j, ReadySupplementalData &m);
|
||||
};
|
||||
|
||||
struct IdentifyProperties {
|
||||
std::string OS;
|
||||
std::string Browser;
|
||||
|
||||
Reference in New Issue
Block a user