diff options
Diffstat (limited to 'modules/chanserv/info.cpp')
-rw-r--r-- | modules/chanserv/info.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/modules/chanserv/info.cpp b/modules/chanserv/info.cpp new file mode 100644 index 000000000..5f625b317 --- /dev/null +++ b/modules/chanserv/info.cpp @@ -0,0 +1,115 @@ +/* + * Anope IRC Services + * + * Copyright (C) 2003-2016 Anope Team <team@anope.org> + * + * This file is part of Anope. Anope is free software; you can + * redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software + * Foundation, version 2. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see see <http://www.gnu.org/licenses/>. + */ + +#include "module.h" +#include "modules/chanserv/info.h" + +class CommandCSInfo : public Command +{ + public: + CommandCSInfo(Module *creator) : Command(creator, "chanserv/info", 1, 2) + { + this->SetDesc(_("Lists information about the specified registered channel")); + this->SetSyntax(_("\037channel\037")); + this->AllowUnregistered(true); + } + + void Execute(CommandSource &source, const std::vector<Anope::string> ¶ms) override + { + const Anope::string &chan = params[0]; + + NickServ::Account *nc = source.nc; + ChanServ::Channel *ci = ChanServ::Find(chan); + if (ci == NULL) + { + source.Reply(_("Channel \002{0}\002 isn't registered."), chan); + return; + } + + bool has_auspex = source.HasPriv("chanserv/auspex"); + bool show_all = false; + + /* Should we show all fields? Only for sadmins and identified users */ + if (source.AccessFor(ci).HasPriv("INFO") || has_auspex) + show_all = true; + + InfoFormatter info(nc); + + source.Reply(_("Information for channel \002{0}\002:"), ci->GetName()); + if (ci->GetFounder()) + info[_("Founder")] = ci->GetFounder()->GetDisplay(); + + if (show_all && ci->GetSuccessor()) + info[_("Successor")] = ci->GetSuccessor()->GetDisplay(); + + if (!ci->GetDesc().empty()) + info[_("Description")] = ci->GetDesc(); + + info[_("Registered")] = Anope::strftime(ci->GetTimeRegistered(), source.GetAccount()); + info[_("Last used")] = Anope::strftime(ci->GetLastUsed(), source.GetAccount()); + + if (show_all) + { + switch (ci->GetBanType()) + { + case 0: + info[_("Ban type")] = stringify("0: *!user@host"); + break; + case 1: + info[_("Ban type")] = stringify("1: *!*user@host"); + break; + case 2: + info[_("Ban type")] = stringify("2: *!*@host"); + break; + case 3: + info[_("Ban type")] = stringify("3: *!*user@*.domain"); + break; + } + } + + EventManager::Get()->Dispatch(&Event::ChanInfo::OnChanInfo, source, ci, info, show_all); + + std::vector<Anope::string> replies; + info.Process(replies); + + for (unsigned i = 0; i < replies.size(); ++i) + source.Reply(replies[i]); + } + + bool OnHelp(CommandSource &source, const Anope::string &subcommand) override + { + source.Reply(_("Shows information about \037channel\037, including its founder, description, time of registration, and last time used." + " If the user issuing the command has \002{0}\002 privilege on \037channel\037, then the successor, last topic set, settings and expiration time will also be displayed when applicable.")); + return true; + } +}; + +class CSInfo : public Module +{ + CommandCSInfo commandcsinfo; + + public: + CSInfo(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR) + , commandcsinfo(this) + { + + } +}; + +MODULE_INIT(CSInfo) |