summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2021-02-18 17:07:21 -0500
committerouwou <26526779+ouwou@users.noreply.github.com>2021-02-18 17:07:21 -0500
commit901028cec9a9d167e670218188449f40bbd23851 (patch)
tree706c63c457c64c63fc609729b96b56c86515b085 /discord
parent3ab3119602c46e7c4802b2b8e017752738cd7031 (diff)
downloadabaddon-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.cpp3
-rw-r--r--discord/invite.cpp22
-rw-r--r--discord/invite.hpp16
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;