From 6b72931ba729bf6ede33cfa6877a5ad21e913c45 Mon Sep 17 00:00:00 2001
From: ouwou <26526779+ouwou@users.noreply.github.com>
Date: Fri, 21 Aug 2020 22:25:23 -0400
Subject: send chat messages
---
Abaddon.vcxproj | 2 ++
abaddon.cpp | 4 ++++
abaddon.hpp | 1 +
components/chatwindow.cpp | 3 ++-
discord/discord.cpp | 14 +++++++++++++-
discord/discord.hpp | 10 +++++++++-
discord/http.cpp | 6 +++---
windows/mainwindow.cpp | 4 ++--
8 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/Abaddon.vcxproj b/Abaddon.vcxproj
index 8e33741..87a56fd 100644
--- a/Abaddon.vcxproj
+++ b/Abaddon.vcxproj
@@ -117,6 +117,7 @@
_DEBUG;_CONSOLE;USE_LOCAL_PROXY;%(PreprocessorDefinitions)
true
stdcpp17
+ true
Console
@@ -132,6 +133,7 @@
NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
stdcpp17
+ true
Console
diff --git a/abaddon.cpp b/abaddon.cpp
index 67b0cd2..74d980d 100644
--- a/abaddon.cpp
+++ b/abaddon.cpp
@@ -152,6 +152,10 @@ void Abaddon::ActionListChannelItemClick(Snowflake id) {
}
}
+void Abaddon::ActionChatInputSubmit(std::string msg, Snowflake channel) {
+ m_discord.SendChatMessage(msg, channel);
+}
+
int main(int argc, char **argv) {
Gtk::Main::init_gtkmm_internals(); // why???
Abaddon abaddon;
diff --git a/abaddon.hpp b/abaddon.hpp
index 7c7debf..9d58358 100644
--- a/abaddon.hpp
+++ b/abaddon.hpp
@@ -24,6 +24,7 @@ public:
void ActionMoveGuildUp(Snowflake id);
void ActionMoveGuildDown(Snowflake id);
void ActionListChannelItemClick(Snowflake id);
+ void ActionChatInputSubmit(std::string msg, Snowflake channel);
std::string GetDiscordToken() const;
bool IsDiscordActive() const;
diff --git a/components/chatwindow.cpp b/components/chatwindow.cpp
index 25f6831..ee88ae3 100644
--- a/components/chatwindow.cpp
+++ b/components/chatwindow.cpp
@@ -136,9 +136,10 @@ bool ChatWindow::on_key_press_event(GdkEventKey *e) {
return false;
auto text = buffer->get_text();
-
buffer->set_text("");
+ m_abaddon->ActionChatInputSubmit(text, m_active_channel);
+
return true;
}
diff --git a/discord/discord.cpp b/discord/discord.cpp
index a7d2993..9aa8eed 100644
--- a/discord/discord.cpp
+++ b/discord/discord.cpp
@@ -117,6 +117,14 @@ const MessageData *DiscordClient::GetMessage(Snowflake id) const {
return &m_messages.at(id);
}
+void DiscordClient::SendChatMessage(std::string content, Snowflake channel) {
+ // @([^@#]{1,32})#(\\d{4})
+ CreateMessageObject obj;
+ obj.Content = content;
+ nlohmann::json j = obj;
+ m_http.MakePOST("/channels/" + std::to_string(channel) + "/messages", j.dump(), [](auto) {});
+}
+
void DiscordClient::UpdateToken(std::string token) {
m_token = token;
m_http.SetAuth(token);
@@ -173,7 +181,7 @@ void DiscordClient::HandleGatewayReady(const GatewayMessage &msg) {
m_user_settings = data.UserSettings;
}
-void DiscordClient::HandleGatewayMessageCreate(const GatewayMessage& msg) {
+void DiscordClient::HandleGatewayMessageCreate(const GatewayMessage &msg) {
MessageData data = msg.Data;
StoreMessage(data.ID, data);
m_abaddon->DiscordNotifyMessageCreate(data.ID);
@@ -442,6 +450,10 @@ void to_json(nlohmann::json &j, const HeartbeatMessage &m) {
j["d"] = m.Sequence;
}
+void to_json(nlohmann::json &j, const CreateMessageObject &m) {
+ j["content"] = m.Content;
+}
+
Snowflake::Snowflake()
: m_num(Invalid) {}
diff --git a/discord/discord.hpp b/discord/discord.hpp
index 051f715..ab390dc 100644
--- a/discord/discord.hpp
+++ b/discord/discord.hpp
@@ -9,7 +9,7 @@
// bruh
#ifdef GetMessage
-#undef GetMessage
+ #undef GetMessage
#endif
struct Snowflake {
@@ -341,6 +341,12 @@ struct HeartbeatMessage : GatewayMessage {
friend void to_json(nlohmann::json &j, const HeartbeatMessage &m);
};
+struct CreateMessageObject {
+ std::string Content;
+
+ friend void to_json(nlohmann::json &j, const CreateMessageObject &m);
+};
+
// https://stackoverflow.com/questions/29775153/stopping-long-sleep-threads/29775639#29775639
class HeartbeatWaiter {
public:
@@ -389,6 +395,8 @@ public:
void FetchMessagesInChannel(Snowflake id, std::function &)> cb);
const MessageData *GetMessage(Snowflake id) const;
+ void SendChatMessage(std::string content, Snowflake channel);
+
void UpdateToken(std::string token);
private:
diff --git a/discord/http.cpp b/discord/http.cpp
index db41aa4..d08fefe 100644
--- a/discord/http.cpp
+++ b/discord/http.cpp
@@ -37,20 +37,20 @@ void HTTPClient::MakePOST(std::string path, std::string payload, std::function cb) {
- printf("POST %s\n", path.c_str());
+ printf("GET %s\n", path.c_str());
auto url = cpr::Url { m_api_base + path };
auto headers = cpr::Header {
{ "Authorization", m_authorization },
diff --git a/windows/mainwindow.cpp b/windows/mainwindow.cpp
index 4d01a39..41f7ee8 100644
--- a/windows/mainwindow.cpp
+++ b/windows/mainwindow.cpp
@@ -5,8 +5,8 @@ MainWindow::MainWindow()
: m_main_box(Gtk::ORIENTATION_VERTICAL)
, m_content_box(Gtk::ORIENTATION_HORIZONTAL)
, m_chan_chat_paned(Gtk::ORIENTATION_HORIZONTAL) {
- set_default_size(800, 600);
-
+ set_default_size(1200, 800);
+
m_menu_discord.set_label("Discord");
m_menu_discord.set_submenu(m_menu_discord_sub);
m_menu_discord_connect.set_label("Connect");
--
cgit v1.2.3