diff options
| author | ilotterytea <iltsu@alright.party> | 2024-05-01 01:12:07 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-05-01 01:12:07 +0500 |
| commit | 733a83a5f1eb3a16360063a28e25bbaf3d118061 (patch) | |
| tree | a047d5fb2b57d3c8949d7b773f55efeb0adbd51d /src | |
| parent | 44b6856601acc5c6658f84432d09408c29a9d4fa (diff) | |
feat: update user rights level
Diffstat (limited to 'src')
| -rw-r--r-- | src/commands/request_util.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/commands/request_util.cpp b/src/commands/request_util.cpp index fb4ebf4..77d94bc 100644 --- a/src/commands/request_util.cpp +++ b/src/commands/request_util.cpp @@ -1,5 +1,6 @@ #include "request_util.hpp" +#include <algorithm> #include <optional> #include <pqxx/pqxx> #include <string> @@ -105,14 +106,30 @@ namespace bot::command { schemas::User user(query[0]); + schemas::PermissionLevel level = schemas::PermissionLevel::USER; + const auto &badges = irc_message.sender.badges; + + if (user.get_alias_id() == channel.get_alias_id()) { + level = schemas::PermissionLevel::BROADCASTER; + } else if (std::any_of(badges.begin(), badges.end(), [&](const auto &x) { + return x.first == "moderator"; + })) { + level = schemas::PermissionLevel::MODERATOR; + } else if (std::any_of(badges.begin(), badges.end(), + [&](const auto &x) { return x.first == "vip"; })) { + level = schemas::PermissionLevel::VIP; + } + query = work->exec("SELECT * FROM user_rights WHERE user_id = " + std::to_string(user.get_id()) + " AND channel_id = " + std::to_string(channel.get_id())); if (query.empty()) { - work->exec("INSERT INTO user_rights (user_id, channel_id) VALUES (" + - std::to_string(user.get_id()) + ", " + - std::to_string(channel.get_id()) + ")"); + work->exec( + "INSERT INTO user_rights (user_id, channel_id, level) VALUES (" + + std::to_string(user.get_id()) + ", " + + std::to_string(channel.get_id()) + ", " + std::to_string(level) + + ")"); work->commit(); @@ -126,6 +143,15 @@ namespace bot::command { schemas::UserRights user_rights(query[0]); + if (user_rights.get_level() != level) { + work->exec("UPDATE user_rights SET level = " + std::to_string(level) + + " WHERE id = " + std::to_string(query[0][0].as<int>())); + + work->commit(); + + user_rights.set_level(level); + } + delete work; if (parts.empty()) { |
