#pragma once #include "CNShardServer.hpp" #define CMD_PREFIX '/' typedef void (*CommandHandler)(std::string fullString, std::vector& args, CNSocket* sock); struct ChatCommand { int requiredAccLevel; std::string help; CommandHandler handlr; ChatCommand(int r, CommandHandler h): requiredAccLevel(r), handlr(h) {} ChatCommand(int r, CommandHandler h, std::string str): requiredAccLevel(r), help(str), handlr(h) {} ChatCommand(): ChatCommand(0, nullptr) {} }; namespace ChatManager { extern std::map commands; extern std::vector dump; void init(); bool runCmd(std::string full, CNSocket* sock); void registerCommand(std::string cmd, int requiredLevel, CommandHandler handlr, std::string help = ""); void chatHandler(CNSocket* sock, CNPacketData* data); void emoteHandler(CNSocket* sock, CNPacketData* data); void menuChatHandler(CNSocket* sock, CNPacketData* data); void sendServerMessage(CNSocket* sock, std::string msg); // uses MOTD void announcementHandler(CNSocket* sock, CNPacketData* data); std::string sanitizeText(std::string text, bool allowNewlines=false); }