summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorouwou <26526779+ouwou@users.noreply.github.com>2022-08-10 23:20:27 -0400
committerouwou <26526779+ouwou@users.noreply.github.com>2022-08-10 23:20:27 -0400
commit96ec5bb6652b1a2eb3b6a11ed3468da190dad359 (patch)
treeaa7528e72818a6e5a55888820df845cf602e8013
parentacb80da387b001b65d7f25c7eca5a2ccd7e208b4 (diff)
downloadabaddon-portaudio-96ec5bb6652b1a2eb3b6a11ed3468da190dad359.tar.gz
abaddon-portaudio-96ec5bb6652b1a2eb3b6a11ed3468da190dad359.zip
fix removing roles from members (maybe)
-rw-r--r--src/discord/store.cpp22
-rw-r--r--src/discord/store.hpp1
2 files changed, 23 insertions, 0 deletions
diff --git a/src/discord/store.cpp b/src/discord/store.cpp
index 998bc41..f08f0c8 100644
--- a/src/discord/store.cpp
+++ b/src/discord/store.cpp
@@ -254,6 +254,14 @@ void Store::SetGuildMember(Snowflake guild_id, Snowflake user_id, const GuildMem
s->Reset();
{
+ auto &s = m_stmt_clr_member_roles;
+ s->Bind(1, user_id);
+ s->Bind(2, guild_id);
+ s->Step();
+ s->Reset();
+ }
+
+ {
auto &s = m_stmt_set_member_roles;
BeginTransaction();
@@ -1881,6 +1889,20 @@ bool Store::CreateStatements() {
return false;
}
+ m_stmt_clr_member_roles = std::make_unique<Statement>(m_db, R"(
+ DELETE FROM member_roles
+ WHERE user = ? AND
+ EXISTS (
+ SELECT 1 FROM roles
+ WHERE member_roles.role = roles.id
+ AND roles.guild = ?
+ )
+ )");
+ if (!m_stmt_clr_member_roles->OK()) {
+ fprintf(stderr, "failed to prepare clear member roles statement: %s\n", m_db.ErrStr());
+ return false;
+ }
+
m_stmt_set_guild_emoji = std::make_unique<Statement>(m_db, R"(
REPLACE INTO guild_emojis VALUES (
?, ?
diff --git a/src/discord/store.hpp b/src/discord/store.hpp
index d863fa6..da97dd5 100644
--- a/src/discord/store.hpp
+++ b/src/discord/store.hpp
@@ -281,6 +281,7 @@ private:
STMT(set_interaction);
STMT(set_member_roles);
STMT(get_member_roles);
+ STMT(clr_member_roles);
STMT(set_guild_emoji);
STMT(get_guild_emojis);
STMT(clr_guild_emoji);