join guild -> accept invite, handle group dm invites

This commit is contained in:
ouwou
2021-02-18 17:07:21 -05:00
parent 3ab3119602
commit 901028cec9
5 changed files with 42 additions and 3 deletions

View File

@@ -65,6 +65,8 @@ void JoinGuildDialog::CheckCode() {
m_info.set_text(invite->Guild->Name + " (" + std::to_string(*invite->MemberCount) + " members)");
else
m_info.set_text(invite->Guild->Name);
} else {
m_info.set_text("Group DM (" + std::to_string(*invite->MemberCount) + " members)");
}
} else {
m_ok.set_sensitive(false);

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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;

View File

@@ -16,7 +16,7 @@ MainWindow::MainWindow()
m_menu_discord_disconnect.set_label("Disconnect");
m_menu_discord_disconnect.set_sensitive(false);
m_menu_discord_set_token.set_label("Set Token");
m_menu_discord_join_guild.set_label("Join Guild");
m_menu_discord_join_guild.set_label("Accept Invite");
m_menu_discord_join_guild.set_sensitive(false);
m_menu_discord_set_status.set_label("Set Status");
m_menu_discord_set_status.set_sensitive(false);