From ba5ed6186f6624e4f8cc6f73c52e597a4fa1d531 Mon Sep 17 00:00:00 2001 From: Markus Mittendrein Date: Sat, 10 Oct 2015 00:21:20 +0200 Subject: Add irc watch command --- src/crsm.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/crsm.hpp | 2 ++ 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/src/crsm.cpp b/src/crsm.cpp index 46b40cb..f85ca52 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -338,6 +338,7 @@ void CRSM::readInput() ircModChecks.clear(); ircMods.clear(); ircModIOList.clear(); + ircModWatchList.clear(); ircStatusFifos.clear(); readConfig(); return; @@ -482,6 +483,21 @@ void CRSM::ircMessageReceived(IrcMessage *message) writeToServer(writeMessage + "\n"); } } + + if(ircModWatchList.length() > 0) + { + QString watchMsg = "<"; + if(target != message->nick()) + { + watchMsg += target + ":"; + } + watchMsg += message->nick() + "> " + mess; + + foreach(const ClientInfo& client, ircModWatchList) + { + connection->sendCommand(IrcCommand::createMessage(client.nick, watchMsg)); + } + } } else if(message->type() == IrcMessage::Join) { @@ -499,6 +515,7 @@ void CRSM::ircMessageReceived(IrcMessage *message) ircMods.removeAll(message->nick()); ircModChecks.removeAll(message->nick()); ircModIOList.removeAll(message->nick()); + ircModWatchList.removeAll(ClientInfo::ircClient(message->nick())); if(aliasWishEditor == message->nick()) { stopAliasWishEditing(); @@ -1373,6 +1390,7 @@ void CRSM::setupCmds() addCommand("irc io", &CRSM::io, IRC, Moderator, "Schaltet den IO-Modus ein bzw. aus.", "", "Schaltet den IO-Modus ein bzw. aus. Im IO-Modus wird die Ausgabe vom Clonk-Server an den Privat-Chat weitergeleitet und der Privat-Chat wird an den Clonk-Server weitergeleitet. Clonk-Befehle mit \\ statt /."); addCommand("irc reconnect", &CRSM::reconnectIrc, Management, UserType::Max, "Stellt die IRC-Verbindung wieder her."); addCommand("irc say", &CRSM::ircSay, IRC | Management, Moderator, "Schreibt die an .", " "); + addCommand("irc watch", &CRSM::ircWatch, IRC | Management, Moderator, "Sendet alle Nachrichten, die der Server im IRC-Netzwerk aufschnappt, an Moderatoren, die watch aktiviert haben.", ""); } addCommandGroup("exit", Management, UserType::Max, "Beendet den Server Mananger.", "Beendet den Server Mananger und falls ein Clonk-Server läuft auch diesen. Die Unterbefehle ermöglichen außerdem diverse Zusatzvarienten des Beendens.", &CRSM::exit); @@ -1937,10 +1955,10 @@ CMD_FUNCTION_IMPL(newalias) } CMD_FUNCTION_IMPL(modinfo) - respond(client, "Moderatoren sind (* ist aktiv, + verwendet IO):\n", RespondType::Private); + respond(client, "Moderatoren sind (* ist aktiv, + verwendet IO, - verwendet irc watch):\n", RespondType::Private); foreach(const QString &mod, Config.IRC.Moderators.keys()) { - respond(client, (ircMods.contains(mod) ? QString("*") : QString(" ")) + (ircModIOList.contains(mod) ? QString("+") : QString(" ")) + " " + Config.IRC.Moderators.value(mod) + "\n", RespondType::Private); + respond(client, (ircMods.contains(mod) ? QString("*") : QString(" ")) + (ircModIOList.contains(mod) ? QString("+") : QString(" ")) + (ircModWatchList.contains(ClientInfo::ircClient(mod)) ? QString("-") : QString(" ")) + " " + Config.IRC.Moderators.value(mod) + "\n", RespondType::Private); } } @@ -2249,6 +2267,38 @@ CMD_FUNCTION_IMPL(ircSay) } } +CMD_FUNCTION_IMPL(ircWatch) + if(args == "on") + { + if(ircModWatchList.contains(client)) + { + respond(client, "irc watch ist bereits aktiviert.\n", RespondType::Private); + } + else + { + ircModWatchList.append(client); + respond(client, "irc watch wurde aktiviert.\n", RespondType::Private); + } + } + else if(args == "off") + { + if(!ircModWatchList.contains(client)) + { + respond(client, "irc watch ist bereits deaktiviert.\n", RespondType::Private); + } + else + { + ircModWatchList.removeAll(client); + respond(client, "irc watch wurde deaktiviert.\n", RespondType::Private); + } + + } + else + { + respond(client, Config.CRSM.CommandSign + cmd + " kann nur mit \"on\" oder \"off\" verwendet werden.\n"); + } +} + IRC_CHECK_CALLBACK_IMPL(ircSayQuery) if(status <= 0) { diff --git a/src/crsm.hpp b/src/crsm.hpp index 4f5cb87..fca0d9b 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -211,6 +211,7 @@ private: QTextStream logstream; QTextCodec *codec; QStringList ircModIOList; + QList ircModWatchList; QString writtenToServer; QMap cmds; QStringList cmdGroups; @@ -321,6 +322,7 @@ private: CMD_FUNCTION(setConfigValue); CMD_FUNCTION(ircSay); + CMD_FUNCTION(ircWatch); IRC_CHECK_CALLBACK(ircSetAdmin); IRC_CHECK_CALLBACK(ircModCmd); -- cgit v1.2.3-54-g00ecf