#include "objects.hpp" void from_json(const nlohmann::json &j, GatewayMessage &m) { JS_D("op", m.Opcode); m.Data = j.at("d"); JS_ON("t", m.Type); JS_ON("s", m.Sequence); } void from_json(const nlohmann::json &j, HelloMessageData &m) { JS_D("heartbeat_interval", m.HeartbeatInterval); } void from_json(const nlohmann::json &j, MessageDeleteData &m) { JS_D("id", m.ID); JS_D("channel_id", m.ChannelID); JS_O("guild_id", m.GuildID); } void from_json(const nlohmann::json &j, MessageDeleteBulkData &m) { JS_D("ids", m.IDs); JS_D("channel_id", m.ChannelID); JS_O("guild_id", m.GuildID); } void from_json(const nlohmann::json &j, GuildMemberListUpdateMessage::GroupItem &m) { m.Type = "group"; JS_D("id", m.ID); JS_D("count", m.Count); } GuildMember GuildMemberListUpdateMessage::MemberItem::GetAsMemberData() const { return m_member_data; } void from_json(const nlohmann::json &j, GuildMemberListUpdateMessage::MemberItem &m) { m.Type = "member"; JS_D("user", m.User); JS_D("roles", m.Roles); JS_D("mute", m.IsMuted); JS_D("joined_at", m.JoinedAt); JS_D("deaf", m.IsDefeaned); JS_N("hoisted_role", m.HoistedRole); JS_ON("premium_since", m.PremiumSince); JS_ON("nick", m.Nickname); m.m_member_data = j; } void from_json(const nlohmann::json &j, GuildMemberListUpdateMessage::OpObject &m) { JS_D("op", m.Op); if (m.Op == "SYNC") { JS_D("range", m.Range); for (const auto &ij : j.at("items")) { if (ij.contains("group")) m.Items.push_back(std::make_unique(ij.at("group"))); else if (ij.contains("member")) m.Items.push_back(std::make_unique(ij.at("member"))); } } } void from_json(const nlohmann::json &j, GuildMemberListUpdateMessage &m) { JS_D("online_count", m.OnlineCount); JS_D("member_count", m.MemberCount); JS_D("id", m.ListIDHash); JS_D("guild_id", m.GuildID); JS_D("groups", m.Groups); JS_D("ops", m.Ops); } void to_json(nlohmann::json &j, const LazyLoadRequestMessage &m) { j["op"] = GatewayOp::LazyLoadRequest; j["d"] = nlohmann::json::object(); j["d"]["guild_id"] = m.GuildID; j["d"]["channels"] = nlohmann::json::object(); for (const auto &[key, chans] : m.Channels) { // apparently a map gets written as a list j["d"]["channels"][std::to_string(key)] = chans; } j["d"]["typing"] = m.ShouldGetTyping; j["d"]["activities"] = m.ShouldGetActivities; if (m.Members.size() > 0) j["d"]["members"] = m.Members; } void to_json(nlohmann::json &j, const UpdateStatusMessage &m) { j["op"] = GatewayOp::UpdateStatus; j["d"] = nlohmann::json::object(); j["d"]["activities"] = m.Activities; j["d"]["status"] = m.Status; j["d"]["afk"] = m.IsAFK; j["d"]["since"] = nullptr; } void from_json(const nlohmann::json &j, ReadyEventData &m) { JS_D("v", m.GatewayVersion); JS_D("user", m.User); JS_D("guilds", m.Guilds); JS_D("session_id", m.SessionID); JS_D("analytics_token", m.AnalyticsToken); JS_D("friend_suggestion_count", m.FriendSuggestionCount); JS_D("user_settings", m.UserSettings); JS_D("private_channels", m.PrivateChannels); } void to_json(nlohmann::json &j, const IdentifyProperties &m) { j["$os"] = m.OS; j["$browser"] = m.Browser; j["$device"] = m.Device; } void to_json(nlohmann::json &j, const IdentifyMessage &m) { j["op"] = GatewayOp::Identify; j["d"] = nlohmann::json::object(); j["d"]["token"] = m.Token; j["d"]["properties"] = m.Properties; if (m.LargeThreshold) j["d"]["large_threshold"] = m.LargeThreshold; } void to_json(nlohmann::json &j, const HeartbeatMessage &m) { j["op"] = GatewayOp::Heartbeat; if (m.Sequence == -1) j["d"] = nullptr; else j["d"] = m.Sequence; } void to_json(nlohmann::json &j, const CreateMessageObject &m) { j["content"] = m.Content; } void to_json(nlohmann::json &j, const MessageEditObject &m) { if (m.Content.size() > 0) j["content"] = m.Content; // todo EmbedData to_json // if (m.Embeds.size() > 0) // j["embeds"] = m.Embeds; if (m.Flags != -1) j["flags"] = m.Flags; } void from_json(const nlohmann::json &j, GuildMemberUpdateMessage &m) { JS_D("guild_id", m.GuildID); JS_D("roles", m.Roles); JS_D("user", m.User); 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_O("guild_id", m.GuildID); JS_D("status", m.Status); // JS_D("activities", m.Activities); JS_D("client_status", m.ClientStatus); } void to_json(nlohmann::json &j, const CreateDMObject &m) { std::vector conv; for (const auto &id : m.Recipients) conv.push_back(std::to_string(id)); j["recipients"] = conv; } void to_json(nlohmann::json &j, const ResumeMessage &m) { j["op"] = GatewayOp::Resume; j["d"] = nlohmann::json::object(); j["d"]["token"] = m.Token; j["d"]["session_id"] = m.SessionID; j["d"]["seq"] = m.Sequence; }