mirror of
https://github.com/celisej567/abaddon.git
synced 2026-09-27 16:16:35 +03:00
manage emojis
This commit is contained in:
@@ -616,6 +616,21 @@ void DiscordClient::ModifyRolePosition(Snowflake guild_id, Snowflake role_id, in
|
||||
});
|
||||
}
|
||||
|
||||
void DiscordClient::ModifyEmojiName(Snowflake guild_id, Snowflake emoji_id, const Glib::ustring &name, sigc::slot<void(bool success)> callback) {
|
||||
ModifyGuildEmojiObject obj;
|
||||
obj.Name = name;
|
||||
|
||||
m_http.MakePATCH("/guilds/" + std::to_string(guild_id) + "/emojis/" + std::to_string(emoji_id), nlohmann::json(obj).dump(), [this, callback](const http::response_type &response) {
|
||||
callback(CheckCode(response));
|
||||
});
|
||||
}
|
||||
|
||||
void DiscordClient::DeleteEmoji(Snowflake guild_id, Snowflake emoji_id, sigc::slot<void(bool success)> callback) {
|
||||
m_http.MakeDELETE("/guilds/" + std::to_string(guild_id) + "/emojis/" + std::to_string(emoji_id), [this, callback](const http::response_type &response) {
|
||||
callback(CheckCode(response, 204));
|
||||
});
|
||||
}
|
||||
|
||||
bool DiscordClient::CanModifyRole(Snowflake guild_id, Snowflake role_id, Snowflake user_id) const {
|
||||
const auto guild = *GetGuild(guild_id);
|
||||
if (guild.OwnerID == user_id) return true;
|
||||
@@ -687,6 +702,18 @@ void DiscordClient::FetchAuditLog(Snowflake guild_id, sigc::slot<void(AuditLogDa
|
||||
});
|
||||
}
|
||||
|
||||
void DiscordClient::FetchGuildEmojis(Snowflake guild_id, sigc::slot<void(std::vector<EmojiData>)> callback) {
|
||||
m_http.MakeGET("/guilds/" + std::to_string(guild_id) + "/emojis", [this, callback](const http::response_type &response) {
|
||||
if (!CheckCode(response)) return;
|
||||
auto emojis = nlohmann::json::parse(response.text).get<std::vector<EmojiData>>();
|
||||
m_store.BeginTransaction();
|
||||
for (const auto &emoji : emojis)
|
||||
m_store.SetEmoji(emoji.ID, emoji);
|
||||
m_store.EndTransaction();
|
||||
callback(std::move(emojis));
|
||||
});
|
||||
}
|
||||
|
||||
void DiscordClient::FetchUserProfile(Snowflake user_id, sigc::slot<void(UserProfileData)> callback) {
|
||||
m_http.MakeGET("/users/" + std::to_string(user_id) + "/profile", [this, callback](const http::response_type &response) {
|
||||
if (!CheckCode(response)) return;
|
||||
@@ -919,6 +946,9 @@ void DiscordClient::HandleGatewayMessage(std::string str) {
|
||||
case GatewayEvent::READY_SUPPLEMENTAL: {
|
||||
HandleGatewayReadySupplemental(m);
|
||||
} break;
|
||||
case GatewayEvent::GUILD_EMOJIS_UPDATE: {
|
||||
HandleGatewayGuildEmojisUpdate(m);
|
||||
} break;
|
||||
}
|
||||
} break;
|
||||
default:
|
||||
@@ -1317,6 +1347,20 @@ void DiscordClient::HandleGatewayUserNoteUpdate(const GatewayMessage &msg) {
|
||||
m_signal_note_update.emit(data.ID, data.Note);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayGuildEmojisUpdate(const GatewayMessage &msg) {
|
||||
// like the real client, the emoji data sent in this message is ignored
|
||||
// we just use it as a signal to re-request all emojis
|
||||
GuildEmojisUpdateObject data = msg.Data;
|
||||
const auto cb = [this, id = data.GuildID](const std::vector<EmojiData> &emojis) {
|
||||
m_store.BeginTransaction();
|
||||
for (const auto &emoji : emojis)
|
||||
m_store.SetEmoji(emoji.ID, emoji);
|
||||
m_store.EndTransaction();
|
||||
m_signal_guild_emojis_update.emit(id, emojis);
|
||||
};
|
||||
FetchGuildEmojis(data.GuildID, cb);
|
||||
}
|
||||
|
||||
void DiscordClient::HandleGatewayReadySupplemental(const GatewayMessage &msg) {
|
||||
ReadySupplementalData data = msg.Data;
|
||||
for (const auto &p : data.MergedPresences.Friends) {
|
||||
@@ -1637,6 +1681,7 @@ void DiscordClient::LoadEventMap() {
|
||||
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;
|
||||
m_event_map["GUILD_EMOJIS_UPDATE"] = GatewayEvent::GUILD_EMOJIS_UPDATE;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_gateway_ready DiscordClient::signal_gateway_ready() {
|
||||
@@ -1742,3 +1787,7 @@ DiscordClient::type_signal_presence_update DiscordClient::signal_presence_update
|
||||
DiscordClient::type_signal_note_update DiscordClient::signal_note_update() {
|
||||
return m_signal_note_update;
|
||||
}
|
||||
|
||||
DiscordClient::type_signal_guild_emojis_update DiscordClient::signal_guild_emojis_update() {
|
||||
return m_signal_guild_emojis_update;
|
||||
}
|
||||
|
||||
@@ -129,6 +129,8 @@ public:
|
||||
void ModifyRoleColor(Snowflake guild_id, Snowflake role_id, uint32_t color, sigc::slot<void(bool success)> callback);
|
||||
void ModifyRoleColor(Snowflake guild_id, Snowflake role_id, Gdk::RGBA color, sigc::slot<void(bool success)> callback);
|
||||
void ModifyRolePosition(Snowflake guild_id, Snowflake role_id, int position, sigc::slot<void(bool success)> callback);
|
||||
void ModifyEmojiName(Snowflake guild_id, Snowflake emoji_id, const Glib::ustring &name, sigc::slot<void(bool success)> callback);
|
||||
void DeleteEmoji(Snowflake guild_id, Snowflake emoji_id, sigc::slot<void(bool success)> callback);
|
||||
|
||||
bool CanModifyRole(Snowflake guild_id, Snowflake role_id) const;
|
||||
bool CanModifyRole(Snowflake guild_id, Snowflake role_id, Snowflake user_id) const;
|
||||
@@ -153,6 +155,8 @@ public:
|
||||
|
||||
void FetchAuditLog(Snowflake guild_id, sigc::slot<void(AuditLogData)> callback);
|
||||
|
||||
void FetchGuildEmojis(Snowflake guild_id, sigc::slot<void(std::vector<EmojiData>)> callback);
|
||||
|
||||
void FetchUserProfile(Snowflake user_id, sigc::slot<void(UserProfileData)> callback);
|
||||
void FetchUserNote(Snowflake user_id, sigc::slot<void(std::string note)> callback);
|
||||
void SetUserNote(Snowflake user_id, std::string note);
|
||||
@@ -204,6 +208,7 @@ private:
|
||||
void HandleGatewayInviteCreate(const GatewayMessage &msg);
|
||||
void HandleGatewayInviteDelete(const GatewayMessage &msg);
|
||||
void HandleGatewayUserNoteUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayGuildEmojisUpdate(const GatewayMessage &msg);
|
||||
void HandleGatewayReadySupplemental(const GatewayMessage &msg);
|
||||
void HandleGatewayReconnect(const GatewayMessage &msg);
|
||||
void HandleGatewayInvalidSession(const GatewayMessage &msg);
|
||||
@@ -289,7 +294,8 @@ public:
|
||||
typedef sigc::signal<void, InviteDeleteObject> type_signal_invite_delete;
|
||||
typedef sigc::signal<void, Snowflake, PresenceStatus> type_signal_presence_update;
|
||||
typedef sigc::signal<void, Snowflake, std::string> type_signal_note_update;
|
||||
typedef sigc::signal<void, bool, GatewayCloseCode> type_signal_disconnected; // bool true if reconnecting
|
||||
typedef sigc::signal<void, Snowflake, std::vector<EmojiData>> type_signal_guild_emojis_update; // guild id
|
||||
typedef sigc::signal<void, bool, GatewayCloseCode> type_signal_disconnected; // bool true if reconnecting
|
||||
typedef sigc::signal<void> type_signal_connected;
|
||||
|
||||
type_signal_gateway_ready signal_gateway_ready();
|
||||
@@ -316,6 +322,7 @@ public:
|
||||
type_signal_invite_delete signal_invite_delete(); // safe to assume guild id is set
|
||||
type_signal_presence_update signal_presence_update();
|
||||
type_signal_note_update signal_note_update();
|
||||
type_signal_guild_emojis_update signal_guild_emojis_update();
|
||||
type_signal_disconnected signal_disconnected();
|
||||
type_signal_connected signal_connected();
|
||||
|
||||
@@ -344,6 +351,7 @@ protected:
|
||||
type_signal_invite_delete m_signal_invite_delete;
|
||||
type_signal_presence_update m_signal_presence_update;
|
||||
type_signal_note_update m_signal_note_update;
|
||||
type_signal_guild_emojis_update m_signal_guild_emojis_update;
|
||||
type_signal_disconnected m_signal_disconnected;
|
||||
type_signal_connected m_signal_connected;
|
||||
};
|
||||
|
||||
@@ -28,10 +28,24 @@ void to_json(nlohmann::json &j, const EmojiData &m) {
|
||||
JS_IF("available", m.IsAvailable);
|
||||
}
|
||||
|
||||
std::string EmojiData::GetURL() const {
|
||||
return "https://cdn.discordapp.com/emojis/" + std::to_string(ID) + ".png";
|
||||
std::string EmojiData::GetURL(const char *ext, const char *size) const {
|
||||
if (size != nullptr)
|
||||
return "https://cdn.discordapp.com/emojis/" + std::to_string(ID) + "." + ext + "?size=" + size;
|
||||
else
|
||||
return "https://cdn.discordapp.com/emojis/" + std::to_string(ID) + "." + ext;
|
||||
}
|
||||
|
||||
std::string EmojiData::URLFromID(std::string emoji_id, std::string ext) {
|
||||
return "https://cdn.discordapp.com/emojis/" + emoji_id + "." + ext;
|
||||
std::string EmojiData::URLFromID(const std::string &emoji_id, const char *ext, const char *size) {
|
||||
if (size != nullptr)
|
||||
return "https://cdn.discordapp.com/emojis/" + emoji_id + "." + ext + "?size=" + size;
|
||||
else
|
||||
return "https://cdn.discordapp.com/emojis/" + emoji_id + "." + ext;
|
||||
}
|
||||
|
||||
std::string EmojiData::URLFromID(Snowflake emoji_id, const char *ext, const char *size) {
|
||||
return URLFromID(std::to_string(emoji_id), ext, size);
|
||||
}
|
||||
|
||||
std::string EmojiData::URLFromID(const Glib::ustring &emoji_id, const char *ext, const char *size) {
|
||||
return URLFromID(emoji_id.raw(), ext, size);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,8 @@ struct EmojiData {
|
||||
friend void from_json(const nlohmann::json &j, EmojiData &m);
|
||||
friend void to_json(nlohmann::json &j, const EmojiData &m);
|
||||
|
||||
std::string GetURL() const;
|
||||
static std::string URLFromID(std::string emoji_id, std::string ext = "png");
|
||||
std::string GetURL(const char *ext = "png", const char *size = nullptr) const;
|
||||
static std::string URLFromID(const std::string &emoji_id, const char *ext = "png", const char *size = nullptr);
|
||||
static std::string URLFromID(Snowflake emoji_id, const char *ext = "png", const char *size = nullptr);
|
||||
static std::string URLFromID(const Glib::ustring &emoji_id, const char *ext = "png", const char *size = nullptr);
|
||||
};
|
||||
|
||||
@@ -386,3 +386,11 @@ void to_json(nlohmann::json &j, const ModifyGuildRolePositionsObject::PositionPa
|
||||
void to_json(nlohmann::json &j, const ModifyGuildRolePositionsObject &m) {
|
||||
j = m.Positions;
|
||||
}
|
||||
|
||||
void from_json(const nlohmann::json &j, GuildEmojisUpdateObject &m) {
|
||||
JS_D("guild_id", m.GuildID);
|
||||
}
|
||||
|
||||
void to_json(nlohmann::json &j, const ModifyGuildEmojiObject &m) {
|
||||
JS_IF("name", m.Name);
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ enum class GatewayEvent : int {
|
||||
INVITE_DELETE,
|
||||
USER_NOTE_UPDATE,
|
||||
READY_SUPPLEMENTAL,
|
||||
GUILD_EMOJIS_UPDATE,
|
||||
};
|
||||
|
||||
enum class GatewayCloseCode : uint16_t {
|
||||
@@ -539,3 +540,18 @@ struct ModifyGuildRolePositionsObject {
|
||||
|
||||
friend void to_json(nlohmann::json &j, const ModifyGuildRolePositionsObject &m);
|
||||
};
|
||||
|
||||
struct GuildEmojisUpdateObject {
|
||||
Snowflake GuildID;
|
||||
// std::vector<EmojiData> Emojis;
|
||||
// GuildHashes, undocumented
|
||||
|
||||
friend void from_json(const nlohmann::json &j, GuildEmojisUpdateObject &m);
|
||||
};
|
||||
|
||||
struct ModifyGuildEmojiObject {
|
||||
std::optional<std::string> Name;
|
||||
// std::optional<std::vector<Snowflake>> Roles;
|
||||
|
||||
friend void to_json(nlohmann::json &j, const ModifyGuildEmojiObject &m);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user