From 2b2611d5a2bb9f2bec1ef71285e3a4e2d848392c Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sun, 15 Dec 2024 00:08:06 +0500 Subject: feat: userid command --- bot/src/commands/command.cpp | 2 + bot/src/modules/user.hpp | 95 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 bot/src/modules/user.hpp (limited to 'bot') diff --git a/bot/src/commands/command.cpp b/bot/src/commands/command.cpp index 7dd4e47..169ca71 100644 --- a/bot/src/commands/command.cpp +++ b/bot/src/commands/command.cpp @@ -20,6 +20,7 @@ #include "../modules/settings.hpp" #include "../modules/spam.hpp" #include "../modules/timer.hpp" +#include "../modules/user.hpp" #include "../utils/chrono.hpp" #include "request.hpp" #include "response.hpp" @@ -38,6 +39,7 @@ namespace bot { this->add_command(std::make_unique()); this->add_command(std::make_unique()); this->add_command(std::make_unique()); + this->add_command(std::make_unique()); } void CommandLoader::add_command(std::unique_ptr command) { diff --git a/bot/src/modules/user.hpp b/bot/src/modules/user.hpp new file mode 100644 index 0000000..71f2747 --- /dev/null +++ b/bot/src/modules/user.hpp @@ -0,0 +1,95 @@ +#pragma once + +#include +#include +#include + +#include "../bundle.hpp" +#include "../commands/command.hpp" +#include "../commands/response_error.hpp" +#include "cpr/api.h" +#include "cpr/cprtypes.h" +#include "cpr/response.h" +#include "nlohmann/json.hpp" + +namespace bot { + namespace mod { + class User : public command::Command { + std::string get_name() const override { return "userid"; } + + int get_delay_seconds() const override { return 10; } + + command::Response run(const InstanceBundle &bundle, + const command::Request &request) const override { + if (!request.message.has_value()) { + throw ResponseException( + request, bundle.localization, command::CommandArgument::VALUE); + } + + std::vector parts = + utils::string::split_text(request.message.value(), ','); + + std::vector ids; + std::vector logins; + + for (const std::string &part : parts) { + if (ids.size() + logins.size() >= 3) break; + try { + int id = std::stoi(part); + ids.push_back(part); + } catch (std::exception e) { + logins.push_back(part); + } + } + + std::string query; + + if (!ids.empty()) { + query += "id="; + query += utils::string::join_vector(ids, ','); + + if (!logins.empty()) query += "&"; + } + + if (!logins.empty()) { + query += "login="; + query += utils::string::join_vector(logins, ','); + } + + if (query.empty()) { + throw ResponseException( + request, bundle.localization, request.message.value()); + } + + cpr::Response response = + cpr::Get(cpr::Url{"https://api.ivr.fi/v2/twitch/user?" + query}); + + if (response.status_code != 200) { + throw ResponseException( + request, bundle.localization, response.status_code, + response.status_line); + } + + nlohmann::json j = nlohmann::json::parse(response.text); + + std::vector msgs; + + for (const auto &x : j) { + std::string name = x["login"]; + std::string id = x["id"]; + + std::string is_banned = x["banned"] ? "⛔" : "✅"; + std::string ban_reason; + if (x.contains("banReason")) ban_reason = x["banReason"]; + + std::string msg = is_banned + " " + name + " (" + id + ")" + + (ban_reason.empty() ? "" : ": ") + ban_reason; + + msgs.push_back(request.user.get_alias_name() + ": " + msg); + } + + return command::Response(msgs); + } + }; + } +} -- cgit v1.2.3