summaryrefslogtreecommitdiff
path: root/discord
diff options
context:
space:
mode:
Diffstat (limited to 'discord')
-rw-r--r--discord/discord.cpp14
-rw-r--r--discord/discord.hpp1
2 files changed, 13 insertions, 2 deletions
diff --git a/discord/discord.cpp b/discord/discord.cpp
index 5b6bf4e..0b97a8a 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -420,10 +420,20 @@ void DiscordClient::UpdateStatus(PresenceStatus status, bool is_afk, const Activ
}
void DiscordClient::CreateDM(Snowflake user_id) {
- // actual client uses an array called recipients
+ CreateDM(user_id, [](...) {});
+}
+
+void DiscordClient::CreateDM(Snowflake user_id, sigc::slot<void(bool success, Snowflake channel_id)> callback) {
CreateDMObject obj;
obj.Recipients.push_back(user_id);
- m_http.MakePOST("/users/@me/channels", nlohmann::json(obj).dump(), [](auto) {});
+ m_http.MakePOST("/users/@me/channels", nlohmann::json(obj).dump(), [this, callback](const http::response &response) {
+ if (!CheckCode(response)) {
+ callback(false, Snowflake::Invalid);
+ return;
+ }
+ auto channel = nlohmann::json::parse(response.text).get<ChannelData>();
+ callback(response.status_code == 200, channel.ID);
+ });
}
std::optional<Snowflake> DiscordClient::FindDM(Snowflake user_id) {
diff --git a/discord/discord.hpp b/discord/discord.hpp
index 42eb197..6ac714d 100644
--- a/discord/discord.hpp
+++ b/discord/discord.hpp
@@ -108,6 +108,7 @@ public:
void UpdateStatus(PresenceStatus status, bool is_afk);
void UpdateStatus(PresenceStatus status, bool is_afk, const ActivityData &obj);
void CreateDM(Snowflake user_id);
+ void CreateDM(Snowflake user_id, sigc::slot<void(bool success, Snowflake channel_id)> callback);
std::optional<Snowflake> FindDM(Snowflake user_id); // wont find group dms
void AddReaction(Snowflake id, Glib::ustring param);
void RemoveReaction(Snowflake id, Glib::ustring param);