diff options
author | ouwou <26526779+ouwou@users.noreply.github.com> | 2024-07-05 03:51:58 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-07-05 03:51:58 -0400 |
commit | 68db143c8939e12dd569d6ac737213ad856c139b (patch) | |
tree | d5e814329fb19912b69b9804fc68b852674d8277 /src/discord/discord.hpp | |
parent | e6191d95341d164eacaf91739c8aa7020dd5c9b6 (diff) | |
parent | b19782c16dffd38ac5651641131a48f8ff961b32 (diff) | |
download | abaddon-portaudio-68db143c8939e12dd569d6ac737213ad856c139b.tar.gz abaddon-portaudio-68db143c8939e12dd569d6ac737213ad856c139b.zip |
Merge pull request #279 from uowuo/stages
Support for stages
Diffstat (limited to 'src/discord/discord.hpp')
-rw-r--r-- | src/discord/discord.hpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/discord/discord.hpp b/src/discord/discord.hpp index 4e898dc..483abf0 100644 --- a/src/discord/discord.hpp +++ b/src/discord/discord.hpp @@ -5,7 +5,7 @@ #include "objects.hpp" #include "store.hpp" #include "voiceclient.hpp" -#include "voicestateflags.hpp" +#include "voicestate.hpp" #include "websocket.hpp" #include <gdkmm/rgba.h> #include <sigc++/sigc++.h> @@ -65,6 +65,7 @@ public: void GetArchivedPrivateThreads(Snowflake channel_id, const sigc::slot<void(DiscordError, const ArchivedThreadsResponseData &)> &callback); std::vector<Snowflake> GetChildChannelIDs(Snowflake parent_id) const; std::optional<WebhookMessageData> GetWebhookMessageData(Snowflake message_id) const; + std::optional<StageInstance> GetStageInstanceFromChannel(Snowflake channel_id) const; // get ids of given list of members for who we do not have the member data template<typename Iter> @@ -86,6 +87,7 @@ public: Permission ComputePermissions(Snowflake member_id, Snowflake guild_id) const; Permission ComputeOverwrites(Permission base, Snowflake member_id, Snowflake channel_id) const; bool CanManageMember(Snowflake guild_id, Snowflake actor, Snowflake target) const; // kick, ban, edit nickname (cant think of a better name) + bool IsStageModerator(Snowflake user_id, Snowflake channel_id) const; void ChatMessageCallback(const std::string &nonce, const http::response_type &response, const sigc::slot<void(DiscordError code)> &callback); void SendChatMessageNoAttachments(const ChatSubmitParams ¶ms, const sigc::slot<void(DiscordError code)> &callback); @@ -201,6 +203,13 @@ public: [[nodiscard]] bool IsVoiceConnecting() const noexcept; [[nodiscard]] Snowflake GetVoiceChannelID() const noexcept; [[nodiscard]] std::optional<uint32_t> GetSSRCOfUser(Snowflake id) const; + [[nodiscard]] bool IsUserSpeaker(Snowflake user_id) const; + [[nodiscard]] bool HasUserRequestedToSpeak(Snowflake user_id) const; + [[nodiscard]] bool IsUserInvitedToSpeak(Snowflake user_id) const; + + void RequestToSpeak(Snowflake channel_id, bool want, const sigc::slot<void(DiscordError code)> &callback); + void SetStageSpeaking(Snowflake channel_id, bool want, const sigc::slot<void(DiscordError code)> &callback); + void DeclineInviteToSpeak(Snowflake channel_id, const sigc::slot<void(DiscordError code)> &callback); DiscordVoiceClient &GetVoiceClient(); @@ -208,7 +217,7 @@ public: void SetVoiceDeafened(bool is_deaf); #endif - [[nodiscard]] std::optional<std::pair<Snowflake, VoiceStateFlags>> GetVoiceState(Snowflake user_id) const; + [[nodiscard]] std::optional<std::pair<Snowflake, PackedVoiceState>> GetVoiceState(Snowflake user_id) const; [[nodiscard]] std::unordered_set<Snowflake> GetUsersInVoiceChannel(Snowflake channel_id); void SetReferringChannel(Snowflake id); @@ -295,6 +304,9 @@ private: void HandleGatewayMessageAck(const GatewayMessage &msg); void HandleGatewayUserGuildSettingsUpdate(const GatewayMessage &msg); void HandleGatewayGuildMembersChunk(const GatewayMessage &msg); + void HandleGatewayStageInstanceCreate(const GatewayMessage &msg); + void HandleGatewayStageInstanceUpdate(const GatewayMessage &msg); + void HandleGatewayStageInstanceDelete(const GatewayMessage &msg); void HandleGatewayReadySupplemental(const GatewayMessage &msg); void HandleGatewayReconnect(const GatewayMessage &msg); void HandleGatewayInvalidSession(const GatewayMessage &msg); @@ -345,6 +357,8 @@ private: std::unordered_set<Snowflake> m_muted_channels; std::unordered_map<Snowflake, int> m_unread; std::unordered_set<Snowflake> m_channel_muted_parent; + std::map<Snowflake, StageInstance> m_stage_instances; + std::map<Snowflake, Snowflake> m_channel_to_stage_instance; UserData m_user_data; UserSettings m_user_settings; @@ -388,7 +402,7 @@ private: void ClearVoiceState(Snowflake user_id); // todo sql i guess - std::unordered_map<Snowflake, std::pair<Snowflake, VoiceStateFlags>> m_voice_states; + std::unordered_map<Snowflake, std::pair<Snowflake, PackedVoiceState>> m_voice_states; std::unordered_map<Snowflake, std::unordered_set<Snowflake>> m_voice_state_channel_users; mutable std::mutex m_msg_mutex; @@ -446,6 +460,9 @@ public: typedef sigc::signal<void, ThreadMemberListUpdateData> type_signal_thread_member_list_update; typedef sigc::signal<void, MessageAckData> type_signal_message_ack; typedef sigc::signal<void, GuildMembersChunkData> type_signal_guild_members_chunk; + typedef sigc::signal<void, StageInstance> type_signal_stage_instance_create; + typedef sigc::signal<void, StageInstance> type_signal_stage_instance_update; + typedef sigc::signal<void, StageInstance> type_signal_stage_instance_delete; // not discord dispatch events typedef sigc::signal<void, Snowflake> type_signal_added_to_thread; @@ -477,6 +494,7 @@ public: using type_signal_voice_user_disconnect = sigc::signal<void(Snowflake, Snowflake)>; using type_signal_voice_user_connect = sigc::signal<void(Snowflake, Snowflake)>; using type_signal_voice_state_set = sigc::signal<void(Snowflake, Snowflake, VoiceStateFlags)>; + using type_signal_voice_speaker_state_changed = sigc::signal<void(Snowflake /* channel_id */, Snowflake /* user_id */, bool /* is_speaker */)>; type_signal_gateway_ready signal_gateway_ready(); type_signal_gateway_ready_supplemental signal_gateway_ready_supplemental(); @@ -519,6 +537,9 @@ public: type_signal_thread_member_list_update signal_thread_member_list_update(); type_signal_message_ack signal_message_ack(); type_signal_guild_members_chunk signal_guild_members_chunk(); + type_signal_stage_instance_create signal_stage_instance_create(); + type_signal_stage_instance_update signal_stage_instance_update(); + type_signal_stage_instance_delete signal_stage_instance_delete(); type_signal_added_to_thread signal_added_to_thread(); type_signal_removed_from_thread signal_removed_from_thread(); @@ -546,6 +567,7 @@ public: type_signal_voice_user_disconnect signal_voice_user_disconnect(); type_signal_voice_user_connect signal_voice_user_connect(); type_signal_voice_state_set signal_voice_state_set(); + type_signal_voice_speaker_state_changed signal_voice_speaker_state_changed(); protected: type_signal_gateway_ready m_signal_gateway_ready; @@ -589,6 +611,9 @@ protected: type_signal_thread_member_list_update m_signal_thread_member_list_update; type_signal_message_ack m_signal_message_ack; type_signal_guild_members_chunk m_signal_guild_members_chunk; + type_signal_stage_instance_create m_signal_stage_instance_create; + type_signal_stage_instance_update m_signal_stage_instance_update; + type_signal_stage_instance_delete m_signal_stage_instance_delete; type_signal_removed_from_thread m_signal_removed_from_thread; type_signal_added_to_thread m_signal_added_to_thread; @@ -616,4 +641,5 @@ protected: type_signal_voice_user_disconnect m_signal_voice_user_disconnect; type_signal_voice_user_connect m_signal_voice_user_connect; type_signal_voice_state_set m_signal_voice_state_set; + type_signal_voice_speaker_state_changed m_signal_voice_speaker_state_changed; }; |