diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2025-05-27 23:14:59 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2025-05-27 23:15:04 +0800 |
| commit | 22958daa261326ea3b6f7b5215368647a9f8bfa4 (patch) | |
| tree | 29ca17031d1c74e66c5a4d8c6770bbda21a044a1 /src | |
| parent | 4f449ea7719abf92e59fe398b06743a3c4fb9bd9 (diff) | |
commands: use type safe optional for reason
Diffstat (limited to 'src')
| -rw-r--r-- | src/commands.cpp | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/src/commands.cpp b/src/commands.cpp index 544468d..53ec3ad 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -1,16 +1,19 @@ -#include "commands.hpp" #include "commandHandler.hpp" +#include "commands.hpp" #include "format.hpp" +#include "log.hpp" #include "sessionManager.hpp" +#define NOREASON "No reason specified"; + struct SKickArgs { - std::string target; - std::string reason; + std::string target; + std::optional<std::string> reason; }; struct SMuteArgs { - std::string target; - std::string reason; + std::string target; + std::optional<std::string> reason; }; void registerCommands() { @@ -22,13 +25,11 @@ void registerCommands() { g_pCommandHandler->registerCommand(CCommandHandler::makeCommand<SKickArgs>({.name = "kick", .parser = [](const std::string &args) -> std::pair<SKickArgs, bool> { size_t pos = args.find(' '); std::string target = args; - std::string reason = "Kicked: No reason specified"; + std::optional<std::string> reason = std::nullopt; if (pos != std::string::npos) { target = args.substr(0, pos); reason = args.substr(pos + 1); - if (reason.empty()) - reason = "Kicked: No reason specified"; } if (target.empty()) @@ -40,8 +41,9 @@ void registerCommands() { if (!session) return {.result = "User '" + data.target + "' not found", .good = false}; - g_pSessionManager->kick(session, true, data.reason); - return {.result = "Kicked '" + data.target + "': " + data.reason, .good = true}; }})); + const auto reason = data.reason ? *data.reason : NOREASON; + g_pSessionManager->kick(session, true, reason); + return {.result = "Kicked '" + data.target + "': " + reason, .good = true}; }})); g_pCommandHandler->registerCommand({.requireAdmin = false, .name = "list", .parser = [](const std::string &args) -> CCommandHandler::SParseResult { (void)args; @@ -57,13 +59,11 @@ void registerCommands() { g_pCommandHandler->registerCommand(CCommandHandler::makeCommand<SMuteArgs>({.name = "mute", .parser = [](const std::string &args) -> std::pair<SMuteArgs, bool> { size_t pos = args.find(' '); std::string target = args; - std::string reason = "Muted: No reason specified"; + std::optional<std::string> reason; if (pos != std::string::npos) { target = args.substr(0, pos); - reason = args.substr(pos + 1); - if (reason.empty()) - reason = "Muted: No reason specified"; + reason = args.substr(pos + 1); } if (target.empty()) @@ -74,9 +74,11 @@ void registerCommands() { if (!session) return {.result = "User '" + data.target + "' not found", .good = false}; + const auto reason = data.reason ? *data.reason : NOREASON; + session->setMuted(true); - session->write("You have been muted"); - return {.result = "Muted '" + data.target + "': " + data.reason, .good = true}; }})); + session->write("You have been muted for: {}", reason); + return {.result = "Muted '" + data.target + "': " + reason, .good = true}; }})); // TODO: use fmt g_pCommandHandler->registerCommand(CCommandHandler::makeCommand<SMuteArgs>({.name = "unmute", .parser = [](const std::string &args) -> std::pair<SMuteArgs, bool> { if (args.empty()) |
