summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorilotterytea <iltsu@alright.party>2024-05-01 01:12:07 +0500
committerilotterytea <iltsu@alright.party>2024-05-01 01:12:07 +0500
commit733a83a5f1eb3a16360063a28e25bbaf3d118061 (patch)
treea047d5fb2b57d3c8949d7b773f55efeb0adbd51d /src
parent44b6856601acc5c6658f84432d09408c29a9d4fa (diff)
feat: update user rights level
Diffstat (limited to 'src')
-rw-r--r--src/commands/request_util.cpp32
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()) {