summaryrefslogtreecommitdiff
path: root/src/discord/message.cpp
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2023-04-13 16:29:56 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2023-04-13 16:29:56 -0400
commitc084230767053e942b29941a8728f421e256cf1d (patch)
treeae58dc5d3978930ec5ed1fb0e65d108b56369d42 /src/discord/message.cpp
parent7b5dc8a86532cf00ab49a1922dbd4ce21cdaf01f (diff)
parent44ab35dfd591c4c357673cc2ce3cb3a6964a1fff (diff)
downloadabaddon-portaudio-c084230767053e942b29941a8728f421e256cf1d.tar.gz
abaddon-portaudio-c084230767053e942b29941a8728f421e256cf1d.zip
Merge branch 'master' of https://github.com/uowuo/abaddon into voice
Diffstat (limited to 'src/discord/message.cpp')
-rw-r--r--src/discord/message.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/discord/message.cpp b/src/discord/message.cpp
index ac12916..f5d8ad8 100644
--- a/src/discord/message.cpp
+++ b/src/discord/message.cpp
@@ -197,7 +197,7 @@ void from_json(const nlohmann::json &j, Message &m) {
JS_D("tts", m.IsTTS);
JS_D("mention_everyone", m.DoesMentionEveryone);
JS_D("mentions", m.Mentions);
- // JS_D("mention_roles", m.MentionRoles);
+ JS_D("mention_roles", m.MentionRoles);
// JS_O("mention_channels", m.MentionChannels);
JS_D("attachments", m.Attachments);
JS_D("embeds", m.Embeds);
@@ -235,6 +235,7 @@ void Message::from_json_edited(const nlohmann::json &j) {
JS_O("tts", IsTTS);
JS_O("mention_everyone", DoesMentionEveryone);
JS_O("mentions", Mentions);
+ JS_O("mention_roles", MentionRoles);
JS_O("embeds", Embeds);
JS_O("nonce", Nonce);
JS_O("pinned", IsPinned);
@@ -264,9 +265,17 @@ bool Message::IsEdited() const {
return m_edited;
}
-bool Message::DoesMention(Snowflake id) const noexcept {
+bool Message::DoesMentionEveryoneOrUser(Snowflake id) const noexcept {
if (DoesMentionEveryone) return true;
return std::any_of(Mentions.begin(), Mentions.end(), [id](const UserData &user) {
return user.ID == id;
});
}
+
+bool Message::DoesMention(Snowflake id) const noexcept {
+ if (DoesMentionEveryoneOrUser(id)) return true;
+ if (!GuildID.has_value()) return false; // nothing left to check
+ const auto member = Abaddon::Get().GetDiscordClient().GetMember(id, *GuildID);
+ if (!member.has_value()) return false;
+ return std::find_first_of(MentionRoles.begin(), MentionRoles.end(), member->Roles.begin(), member->Roles.end()) != MentionRoles.end();
+}