From 6504ce844023f188dfb5350cd8ad34bfc94f5ac0 Mon Sep 17 00:00:00 2001 From: ilotterytea Date: Sat, 14 Dec 2024 13:16:33 +0500 Subject: feat: spam command --- bot/src/commands/command.cpp | 2 ++ bot/src/constants.hpp | 4 +++- bot/src/modules/spam.hpp | 54 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 bot/src/modules/spam.hpp (limited to 'bot/src') diff --git a/bot/src/commands/command.cpp b/bot/src/commands/command.cpp index 8d75999..3f99d9e 100644 --- a/bot/src/commands/command.cpp +++ b/bot/src/commands/command.cpp @@ -17,6 +17,7 @@ #include "../modules/massping.hpp" #include "../modules/notify.hpp" #include "../modules/ping.hpp" +#include "../modules/spam.hpp" #include "../modules/timer.hpp" #include "../utils/chrono.hpp" #include "request.hpp" @@ -34,6 +35,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/constants.hpp b/bot/src/constants.hpp index b72a4c6..5819913 100644 --- a/bot/src/constants.hpp +++ b/bot/src/constants.hpp @@ -12,4 +12,6 @@ const std::string DEFAULT_PREFIX = "!"; #endif const auto START_TIME = std::chrono::steady_clock::now(); -#define MARKOV_RESPONSE_CHANCE 1 \ No newline at end of file +#define MARKOV_RESPONSE_CHANCE 1 +#define SPAM_DEFAULT_COUNT 5 +#define SPAM_MAX_COUNT 30 \ No newline at end of file diff --git a/bot/src/modules/spam.hpp b/bot/src/modules/spam.hpp new file mode 100644 index 0000000..bc2c7f3 --- /dev/null +++ b/bot/src/modules/spam.hpp @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include + +#include "../bundle.hpp" +#include "../commands/command.hpp" +#include "../commands/response_error.hpp" + +namespace bot { + namespace mod { + class Spam : public command::Command { + std::string get_name() const override { return "spam"; } + + schemas::PermissionLevel get_permission_level() const override { + return schemas::PermissionLevel::MODERATOR; + } + + 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::MESSAGE); + } + + std::vector parts = + utils::string::split_text(request.message.value(), ' '); + + int count = SPAM_DEFAULT_COUNT; + std::string message = request.message.value(); + + try { + count = std::stoi(parts[0]); + + if (count > SPAM_MAX_COUNT) count = SPAM_MAX_COUNT; + message = utils::string::join_vector( + {parts.begin() + 1, parts.end()}, ' '); + } catch (std::exception &e) { + } + + std::vector output; + + for (int i = 0; i < count; i++) { + output.push_back(message); + } + + return command::Response(output); + } + }; + } +} -- cgit v1.2.3