diff options
Diffstat (limited to 'src/messages.cpp')
-rw-r--r-- | src/messages.cpp | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/src/messages.cpp b/src/messages.cpp index 0ecefd7ef..0348eab4b 100644 --- a/src/messages.cpp +++ b/src/messages.cpp @@ -156,32 +156,50 @@ int m_privmsg(const Anope::string &source, const Anope::string &receiver, const if (bi) { - if (bi->nick.equals_ci(Config.s_OperServ)) + if (message[0] == '\1' && message[message.length() - 1] == '\1') { - if (!is_oper(u) && Config.OSOpersOnly) + if (message.substr(0, 6).equals_ci("\1PING ")) { - notice_lang(Config.s_OperServ, u, ACCESS_DENIED); - if (Config.WallBadOS) - ircdproto->SendGlobops(OperServ, "Denied access to %s from %s!%s@%s (non-oper)", Config.s_OperServ.c_str(), u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str()); + Anope::string buf = message; + buf.erase(buf.begin()); + buf.erase(buf.end() - 1); + ircdproto->SendCTCP(bi, u->nick, "%s", buf.c_str()); + } + else if (message.substr(0, 9).equals_ci("\1VERSION\1")) + { + ircdproto->SendCTCP(bi, u->nick, "VERSION Anope-%s %s :%s - (%s) -- %s", Anope::Version().c_str(), Config.ServerName.c_str(), ircd->name, Config.EncModuleList.begin()->c_str(), Anope::Build().c_str()); } - else - operserv(u, message); } - else if (bi->nick.equals_ci(Config.s_NickServ)) - nickserv(u, message); + else if (bi->nick.equals_ci(Config.s_NickServ) || bi->nick.equals_ci(Config.s_MemoServ) || (!Config.s_BotServ.empty() && bi->nick.equals_ci(Config.s_BotServ))) + mod_run_cmd(bi, u, message); else if (bi->nick.equals_ci(Config.s_ChanServ)) { if (!is_oper(u) && Config.CSOpersOnly) notice_lang(Config.s_ChanServ, u, ACCESS_DENIED); else - chanserv(u, message); + mod_run_cmd(bi, u, message); } - else if (bi->nick.equals_ci(Config.s_MemoServ)) - memoserv(u, message); else if (!Config.s_HostServ.empty() && bi->nick.equals_ci(Config.s_HostServ)) - hostserv(u, message); - else if (!Config.s_BotServ.empty() && bi->nick.equals_ci(Config.s_BotServ)) - botserv(u, bi, message); + { + if (!ircd->vhost) + notice_lang(Config.s_HostServ, u, SERVICE_OFFLINE, Config.s_HostServ.c_str()); + else + mod_run_cmd(bi, u, message); + } + else if (bi->nick.equals_ci(Config.s_OperServ)) + { + if (!is_oper(u) && Config.OSOpersOnly) + { + notice_lang(Config.s_OperServ, u, ACCESS_DENIED); + if (Config.WallBadOS) + ircdproto->SendGlobops(OperServ, "Denied access to %s from %s!%s@%s (non-oper)", Config.s_OperServ.c_str(), u->nick.c_str(), u->GetIdent().c_str(), u->host.c_str()); + } + else + { + Alog() << Config.s_OperServ << ": " << u->nick << ": " << message; + mod_run_cmd(bi, u, message); + } + } } } |