diff options
| author | ilotterytea <iltsu@alright.party> | 2024-12-14 13:16:33 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-12-14 13:16:33 +0500 |
| commit | 6504ce844023f188dfb5350cd8ad34bfc94f5ac0 (patch) | |
| tree | 3ce68cdf13097d415127de6a2664fe1e2e51d50b /bot | |
| parent | d7b419837f58be4c75dfab756ffac025ed8fc962 (diff) | |
feat: spam command
Diffstat (limited to 'bot')
| -rw-r--r-- | bot/src/commands/command.cpp | 2 | ||||
| -rw-r--r-- | bot/src/constants.hpp | 4 | ||||
| -rw-r--r-- | bot/src/modules/spam.hpp | 54 |
3 files changed, 59 insertions, 1 deletions
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<mod::Timer>()); this->add_command(std::make_unique<mod::Help>()); this->add_command(std::make_unique<mod::Chatters>()); + this->add_command(std::make_unique<mod::Spam>()); } void CommandLoader::add_command(std::unique_ptr<Command> 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 <exception> +#include <string> +#include <vector> + +#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<ResponseError::NOT_ENOUGH_ARGUMENTS>( + request, bundle.localization, command::MESSAGE); + } + + std::vector<std::string> 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<std::string> output; + + for (int i = 0; i < count; i++) { + output.push_back(message); + } + + return command::Response(output); + } + }; + } +} |
