diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-18 17:07:21 -0500 |
---|---|---|
committer | ouwou <26526779+ouwou@users.noreply.github.com> | 2021-02-18 17:07:21 -0500 |
commit | 901028cec9a9d167e670218188449f40bbd23851 (patch) | |
tree | 706c63c457c64c63fc609729b96b56c86515b085 /discord | |
parent | 3ab3119602c46e7c4802b2b8e017752738cd7031 (diff) | |
download | abaddon-portaudio-901028cec9a9d167e670218188449f40bbd23851.tar.gz abaddon-portaudio-901028cec9a9d167e670218188449f40bbd23851.zip |
join guild -> accept invite, handle group dm invites
Diffstat (limited to 'discord')
-rw-r--r-- | discord/discord.cpp | 3 | ||||
-rw-r--r-- | discord/invite.cpp | 22 | ||||
-rw-r--r-- | discord/invite.hpp | 16 |
3 files changed, 39 insertions, 2 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp index 5f356f2..851357b 100644 --- a/discord/discord.cpp +++ b/discord/discord.cpp @@ -1186,7 +1186,6 @@ void DiscordClient::HandleGatewayInviteCreate(const GatewayMessage &msg) { invite.Code = std::move(data.Code); invite.CreatedAt = std::move(data.CreatedAt); invite.Channel = *m_store.GetChannel(data.ChannelID); - invite.Guild = *m_store.GetGuild(*invite.Channel->GuildID); invite.Inviter = std::move(data.Inviter); invite.IsTemporary = std::move(data.IsTemporary); invite.MaxAge = std::move(data.MaxAge); @@ -1194,6 +1193,8 @@ void DiscordClient::HandleGatewayInviteCreate(const GatewayMessage &msg) { invite.TargetUser = std::move(data.TargetUser); invite.TargetUserType = std::move(data.TargetUserType); invite.Uses = std::move(data.Uses); + if (data.GuildID.has_value()) + invite.Guild = m_store.GetGuild(*data.GuildID); m_signal_invite_create.emit(invite); } diff --git a/discord/invite.cpp b/discord/invite.cpp index 641d113..63043a1 100644 --- a/discord/invite.cpp +++ b/discord/invite.cpp @@ -1,5 +1,16 @@ #include "invite.hpp" +void from_json(const nlohmann::json &j, InviteChannelData &m) { + JS_D("id", m.ID); + JS_D("type", m.Type); + JS_ON("name", m.Name); + if (j.contains("recipients") && j.at("recipients").is_null()) { + m.RecipientUsernames.emplace(); + for (const auto &x : j.at("recipients")) + m.RecipientUsernames->push_back(x.at("username").get<std::string>()); + } +} + void from_json(const nlohmann::json &j, InviteData &m) { JS_D("code", m.Code); JS_O("guild", m.Guild); @@ -15,3 +26,14 @@ void from_json(const nlohmann::json &j, InviteData &m) { JS_O("temporary", m.IsTemporary); JS_O("created_at", m.CreatedAt); } + +InviteChannelData::InviteChannelData(const ChannelData &c) { + ID = c.ID; + Type = c.Type; + Name = c.Name; + if (Type == ChannelType::GROUP_DM) { + RecipientUsernames.emplace(); + for (const auto &r : c.GetDMRecipients()) + RecipientUsernames->push_back(r.Username); + } +} diff --git a/discord/invite.hpp b/discord/invite.hpp index 9c7a9c9..c4c2cf3 100644 --- a/discord/invite.hpp +++ b/discord/invite.hpp @@ -7,11 +7,25 @@ enum class ETargetUserType { STREAM = 1 }; +class InviteChannelData { +public: + InviteChannelData() = default; + InviteChannelData(const ChannelData &c); + + Snowflake ID; + ChannelType Type; + std::optional<std::string> Name; + std::optional<std::vector<std::string>> RecipientUsernames; + // std::optional<??> Icon; + + friend void from_json(const nlohmann::json &j, InviteChannelData &m); +}; + class InviteData { public: std::string Code; std::optional<GuildData> Guild; - std::optional<ChannelData> Channel; + std::optional<InviteChannelData> Channel; std::optional<UserData> Inviter; std::optional<UserData> TargetUser; std::optional<ETargetUserType> TargetUserType; |