add cc shell command

This commit is contained in:
Martin Michelsen
2024-10-15 22:07:56 -07:00
parent 34bd2cd6a7
commit cac9589b81
+42
View File
@@ -7,6 +7,7 @@
#include <phosg/Random.hh>
#include <phosg/Strings.hh>
#include "ChatCommands.hh"
#include "ReceiveCommands.hh"
#include "SendCommands.hh"
#include "ServerState.hh"
@@ -876,6 +877,47 @@ CommandDefinition c_describe_tournament(
}
});
CommandDefinition c_cc(
"cc", "cc COMMAND\n\
Execute a chat command as if a client had sent it in-game. The command\n\
should be specified exactly as it would be typed in-game; for example:\n\
cc $itemnotifs on\n\
This command cannot send chat messages to other players or to the server\n\
(in proxy sessions); it can only execute chat commands.",
true,
+[](CommandArgs& args) {
shared_ptr<ProxyServer::LinkedSession> ses;
try {
ses = args.shell->get_proxy_session(args.session_name);
} catch (const exception&) {
}
if (ses.get()) {
on_chat_command(ses, args.args);
} else {
shared_ptr<Client> c;
if (args.session_name.empty()) {
c = args.s->game_server->get_client();
} else {
auto clients = args.s->game_server->get_clients_by_identifier(args.session_name);
if (clients.empty()) {
throw runtime_error("no such client");
}
if (clients.size() > 1) {
throw runtime_error("multiple clients found");
}
c = std::move(clients[0]);
}
if (c) {
on_chat_command(c, args.args);
} else {
throw runtime_error("no client available");
}
}
return;
});
void f_sc_ss(CommandArgs& args) {
string data = phosg::parse_data_string(args.args, nullptr, phosg::ParseDataFlags::ALLOW_FILES);
if (data.size() == 0) {