From f29e1cf383529a1a29f02b0669d973f5ee0b7a66 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 28 May 2014 12:07:29 -0400 Subject: Move most of the core pseudoclient logic to modules --- modules/bs_autoassign.cpp | 4 +- modules/commands/bs_assign.cpp | 18 +- modules/commands/bs_badwords.cpp | 28 +- modules/commands/bs_bot.cpp | 10 +- modules/commands/bs_control.cpp | 4 +- modules/commands/bs_info.cpp | 17 +- modules/commands/bs_kick.cpp | 68 +- modules/commands/bs_set.cpp | 6 +- modules/commands/cs_access.cpp | 155 ++--- modules/commands/cs_akick.cpp | 202 ++++-- modules/commands/cs_ban.cpp | 8 +- modules/commands/cs_clone.cpp | 24 +- modules/commands/cs_drop.cpp | 2 +- modules/commands/cs_enforce.cpp | 20 +- modules/commands/cs_entrymsg.cpp | 18 +- modules/commands/cs_flags.cpp | 46 +- modules/commands/cs_getkey.cpp | 2 +- modules/commands/cs_info.cpp | 4 +- modules/commands/cs_invite.cpp | 2 +- modules/commands/cs_kick.cpp | 8 +- modules/commands/cs_list.cpp | 17 +- modules/commands/cs_log.cpp | 12 +- modules/commands/cs_mode.cpp | 48 +- modules/commands/cs_register.cpp | 8 +- modules/commands/cs_seen.cpp | 15 +- modules/commands/cs_set.cpp | 60 +- modules/commands/cs_set_misc.cpp | 8 +- modules/commands/cs_status.cpp | 11 +- modules/commands/cs_suspend.cpp | 14 +- modules/commands/cs_sync.cpp | 4 +- modules/commands/cs_topic.cpp | 16 +- modules/commands/cs_unban.cpp | 6 +- modules/commands/cs_updown.cpp | 4 +- modules/commands/cs_xop.cpp | 66 +- modules/commands/greet.cpp | 14 +- modules/commands/help.cpp | 6 +- modules/commands/hs_del.cpp | 6 +- modules/commands/hs_group.cpp | 12 +- modules/commands/hs_list.cpp | 4 +- modules/commands/hs_off.cpp | 2 +- modules/commands/hs_on.cpp | 2 +- modules/commands/hs_request.cpp | 20 +- modules/commands/hs_set.cpp | 10 +- modules/commands/ms_cancel.cpp | 36 +- modules/commands/ms_check.cpp | 33 +- modules/commands/ms_del.cpp | 18 +- modules/commands/ms_ignore.cpp | 10 +- modules/commands/ms_info.cpp | 20 +- modules/commands/ms_list.cpp | 18 +- modules/commands/ms_read.cpp | 28 +- modules/commands/ms_rsend.cpp | 12 +- modules/commands/ms_sendall.cpp | 4 +- modules/commands/ms_set.cpp | 26 +- modules/commands/ms_staff.cpp | 4 +- modules/commands/ns_access.cpp | 12 +- modules/commands/ns_ajoin.cpp | 26 +- modules/commands/ns_alist.cpp | 14 +- modules/commands/ns_cert.cpp | 34 +- modules/commands/ns_drop.cpp | 2 +- modules/commands/ns_getemail.cpp | 6 +- modules/commands/ns_getpass.cpp | 4 +- modules/commands/ns_group.cpp | 55 +- modules/commands/ns_identify.cpp | 22 +- modules/commands/ns_info.cpp | 6 +- modules/commands/ns_list.cpp | 20 +- modules/commands/ns_recover.cpp | 39 +- modules/commands/ns_register.cpp | 24 +- modules/commands/ns_resetpass.cpp | 12 +- modules/commands/ns_set.cpp | 56 +- modules/commands/ns_set_misc.cpp | 12 +- modules/commands/ns_status.cpp | 2 +- modules/commands/ns_suspend.cpp | 16 +- modules/commands/ns_update.cpp | 2 +- modules/commands/os_akill.cpp | 2 +- modules/commands/os_config.cpp | 2 +- modules/commands/os_defcon.cpp | 10 +- modules/commands/os_dns.cpp | 14 +- modules/commands/os_forbid.cpp | 10 +- modules/commands/os_ignore.cpp | 6 +- modules/commands/os_info.cpp | 16 +- modules/commands/os_logsearch.cpp | 2 +- modules/commands/os_mode.cpp | 2 +- modules/commands/os_module.cpp | 2 +- modules/commands/os_news.cpp | 2 +- modules/commands/os_oline.cpp | 2 +- modules/commands/os_oper.cpp | 16 +- modules/commands/os_session.cpp | 6 +- modules/commands/os_set.cpp | 2 +- modules/commands/os_stats.cpp | 6 +- modules/cs_statusupdate.cpp | 12 +- modules/database/db_flatfile.cpp | 4 +- modules/database/db_old.cpp | 93 ++- modules/database/db_redis.cpp | 10 +- modules/database/db_sql_live.cpp | 2 +- modules/encryption/enc_bcrypt.cpp | 7 +- modules/encryption/enc_md5.cpp | 8 +- modules/encryption/enc_none.cpp | 6 +- modules/encryption/enc_old.cpp | 6 +- modules/encryption/enc_sha1.cpp | 6 +- modules/encryption/enc_sha256.cpp | 6 +- modules/extra/m_ldap.cpp | 6 +- modules/extra/m_ldap_authentication.cpp | 8 +- modules/extra/m_ldap_oper.cpp | 4 +- modules/extra/m_mysql.cpp | 4 +- modules/extra/m_sql_authentication.cpp | 4 +- modules/extra/m_sql_oper.cpp | 4 +- modules/extra/m_sqlite.cpp | 2 +- modules/extra/m_ssl_openssl.cpp | 8 +- modules/extra/stats/cs_fantasy_stats.cpp | 2 +- modules/extra/stats/m_chanstats.cpp | 20 +- modules/fantasy.cpp | 14 +- modules/m_dns.cpp | 42 +- modules/m_httpd.cpp | 2 +- modules/m_rewrite.cpp | 4 +- modules/m_sasl.cpp | 8 +- modules/m_xmlrpc_main.cpp | 20 +- modules/ns_maxemail.cpp | 6 +- modules/protocol/bahamut.cpp | 8 +- modules/protocol/charybdis.cpp | 14 +- modules/protocol/hybrid.cpp | 6 +- modules/protocol/inspircd20.cpp | 20 +- modules/protocol/ngircd.cpp | 8 +- modules/protocol/plexus.cpp | 12 +- modules/protocol/ratbox.cpp | 4 +- modules/protocol/unreal.cpp | 26 +- modules/pseudoclients/botserv.cpp | 235 ------- modules/pseudoclients/botserv/CMakeLists.txt | 1 + modules/pseudoclients/botserv/botserv.cpp | 237 +++++++ modules/pseudoclients/chanserv.cpp | 525 --------------- modules/pseudoclients/chanserv/CMakeLists.txt | 1 + modules/pseudoclients/chanserv/channel.cpp | 605 +++++++++++++++++ modules/pseudoclients/chanserv/channel.h | 41 ++ modules/pseudoclients/chanserv/chanserv.cpp | 736 +++++++++++++++++++++ modules/pseudoclients/global.cpp | 2 +- modules/pseudoclients/hostserv.cpp | 18 +- modules/pseudoclients/memoserv.cpp | 246 ------- modules/pseudoclients/memoserv/CMakeLists.txt | 1 + modules/pseudoclients/memoserv/memo.cpp | 58 ++ modules/pseudoclients/memoserv/memo.h | 11 + modules/pseudoclients/memoserv/memoinfo.cpp | 33 + modules/pseudoclients/memoserv/memoinfo.h | 10 + modules/pseudoclients/memoserv/memoserv.cpp | 291 ++++++++ modules/pseudoclients/nickserv.cpp | 594 ----------------- modules/pseudoclients/nickserv/CMakeLists.txt | 1 + modules/pseudoclients/nickserv/account.cpp | 264 ++++++++ modules/pseudoclients/nickserv/account.h | 22 + modules/pseudoclients/nickserv/identifyrequest.cpp | 51 ++ modules/pseudoclients/nickserv/identifyrequest.h | 13 + modules/pseudoclients/nickserv/nick.cpp | 198 ++++++ modules/pseudoclients/nickserv/nick.h | 18 + modules/pseudoclients/nickserv/nickserv.cpp | 666 +++++++++++++++++++ modules/pseudoclients/operserv.cpp | 2 +- modules/webcpanel/pages/chanserv/access.cpp | 29 +- modules/webcpanel/pages/chanserv/access.h | 2 +- modules/webcpanel/pages/chanserv/akick.cpp | 19 +- modules/webcpanel/pages/chanserv/akick.h | 2 +- modules/webcpanel/pages/chanserv/drop.cpp | 6 +- modules/webcpanel/pages/chanserv/drop.h | 2 +- modules/webcpanel/pages/chanserv/info.cpp | 2 +- modules/webcpanel/pages/chanserv/info.h | 2 +- modules/webcpanel/pages/chanserv/modes.cpp | 6 +- modules/webcpanel/pages/chanserv/modes.h | 2 +- modules/webcpanel/pages/chanserv/set.cpp | 4 +- modules/webcpanel/pages/chanserv/set.h | 2 +- modules/webcpanel/pages/chanserv/utils.cpp | 8 +- modules/webcpanel/pages/chanserv/utils.h | 2 +- modules/webcpanel/pages/hostserv/request.cpp | 4 +- modules/webcpanel/pages/hostserv/request.h | 2 +- modules/webcpanel/pages/index.cpp | 21 +- modules/webcpanel/pages/logout.cpp | 2 +- modules/webcpanel/pages/logout.h | 2 +- modules/webcpanel/pages/memoserv/memos.cpp | 60 +- modules/webcpanel/pages/memoserv/memos.h | 2 +- modules/webcpanel/pages/nickserv/access.cpp | 2 +- modules/webcpanel/pages/nickserv/access.h | 2 +- modules/webcpanel/pages/nickserv/alist.cpp | 12 +- modules/webcpanel/pages/nickserv/alist.h | 2 +- modules/webcpanel/pages/nickserv/cert.cpp | 2 +- modules/webcpanel/pages/nickserv/cert.h | 2 +- modules/webcpanel/pages/nickserv/info.cpp | 4 +- modules/webcpanel/pages/nickserv/info.h | 2 +- modules/webcpanel/pages/operserv/akill.cpp | 2 +- modules/webcpanel/pages/operserv/akill.h | 2 +- modules/webcpanel/static_fileserver.cpp | 2 +- modules/webcpanel/template_fileserver.cpp | 8 +- modules/webcpanel/webcpanel.cpp | 6 +- modules/webcpanel/webcpanel.h | 10 +- 187 files changed, 4499 insertions(+), 2720 deletions(-) delete mode 100644 modules/pseudoclients/botserv.cpp create mode 100644 modules/pseudoclients/botserv/CMakeLists.txt create mode 100644 modules/pseudoclients/botserv/botserv.cpp delete mode 100644 modules/pseudoclients/chanserv.cpp create mode 100644 modules/pseudoclients/chanserv/CMakeLists.txt create mode 100644 modules/pseudoclients/chanserv/channel.cpp create mode 100644 modules/pseudoclients/chanserv/channel.h create mode 100644 modules/pseudoclients/chanserv/chanserv.cpp delete mode 100644 modules/pseudoclients/memoserv.cpp create mode 100644 modules/pseudoclients/memoserv/CMakeLists.txt create mode 100644 modules/pseudoclients/memoserv/memo.cpp create mode 100644 modules/pseudoclients/memoserv/memo.h create mode 100644 modules/pseudoclients/memoserv/memoinfo.cpp create mode 100644 modules/pseudoclients/memoserv/memoinfo.h create mode 100644 modules/pseudoclients/memoserv/memoserv.cpp delete mode 100644 modules/pseudoclients/nickserv.cpp create mode 100644 modules/pseudoclients/nickserv/CMakeLists.txt create mode 100644 modules/pseudoclients/nickserv/account.cpp create mode 100644 modules/pseudoclients/nickserv/account.h create mode 100644 modules/pseudoclients/nickserv/identifyrequest.cpp create mode 100644 modules/pseudoclients/nickserv/identifyrequest.h create mode 100644 modules/pseudoclients/nickserv/nick.cpp create mode 100644 modules/pseudoclients/nickserv/nick.h create mode 100644 modules/pseudoclients/nickserv/nickserv.cpp (limited to 'modules') diff --git a/modules/bs_autoassign.cpp b/modules/bs_autoassign.cpp index e7543d646..e9a6e062b 100644 --- a/modules/bs_autoassign.cpp +++ b/modules/bs_autoassign.cpp @@ -14,11 +14,11 @@ class BSAutoAssign : public Module { public: BSAutoAssign(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR) - , EventHook("OnChanRegistered") + , EventHook("OnChanRegistered") { } - void OnChanRegistered(ChannelInfo *ci) override + void OnChanRegistered(ChanServ::Channel *ci) override { const Anope::string &bot = Config->GetModule(this)->Get("bot"); if (bot.empty()) diff --git a/modules/commands/bs_assign.cpp b/modules/commands/bs_assign.cpp index 90fb7ed56..fe7938fc8 100644 --- a/modules/commands/bs_assign.cpp +++ b/modules/commands/bs_assign.cpp @@ -32,7 +32,7 @@ class CommandBSAssign : public Command return; } - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); @@ -46,7 +46,7 @@ class CommandBSAssign : public Command return; } - AccessGroup access = source.AccessFor(ci); + ChanServ::AccessGroup access = source.AccessFor(ci); if (ci->HasExt("BS_NOBOT") || (!access.HasPriv("ASSIGN") && !source.HasPriv("botserv/administration"))) { source.Reply(ACCESS_DENIED); @@ -100,14 +100,14 @@ class CommandBSUnassign : public Command return; } - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); return; } - AccessGroup access = source.AccessFor(ci); + ChanServ::AccessGroup access = source.AccessFor(ci); if (!source.HasPriv("botserv/administration") && !access.HasPriv("ASSIGN")) { source.Reply(ACCESS_DENIED); @@ -157,7 +157,7 @@ class CommandBSSetNoBot : public Command void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); const Anope::string &value = params[1]; if (Anope::ReadOnly) @@ -174,7 +174,7 @@ class CommandBSSetNoBot : public Command if (value.equals_ci("ON")) { - Log(LOG_ADMIN, source, this, ci) << "to enable nobot"; + Log(LOG_ADMIN, source, this, ci) << "to enable nobot"; ci->Extend("BS_NOBOT"); if (ci->bi) @@ -183,7 +183,7 @@ class CommandBSSetNoBot : public Command } else if (value.equals_ci("OFF")) { - Log(LOG_ADMIN, source, this, ci) << "to disable nobot"; + Log(LOG_ADMIN, source, this, ci) << "to disable nobot"; ci->Shrink("BS_NOBOT"); source.Reply(_("No-bot mode is now \002off\002 on channel %s."), ci->name.c_str()); @@ -230,7 +230,7 @@ class BSAssign : public Module if (Anope::ReadOnly || !c->ci || targ->server != Me || !(bi = dynamic_cast(targ))) return; - AccessGroup access = c->ci->AccessFor(source); + ChanServ::AccessGroup access = c->ci->AccessFor(source); if (nobot.HasExt(c->ci) || (!access.HasPriv("ASSIGN") && !source->HasPriv("botserv/administration"))) { targ->SendMessage(bi, ACCESS_DENIED); @@ -253,7 +253,7 @@ class BSAssign : public Module targ->SendMessage(bi, _("Bot \002%s\002 has been assigned to %s."), bi->nick.c_str(), c->name.c_str()); } - void OnBotInfo(CommandSource &source, BotInfo *bi, ChannelInfo *ci, InfoFormatter &info) override + void OnBotInfo(CommandSource &source, BotInfo *bi, ChanServ::Channel *ci, InfoFormatter &info) override { if (nobot.HasExt(ci)) info.AddOption(_("No bot")); diff --git a/modules/commands/bs_badwords.cpp b/modules/commands/bs_badwords.cpp index 082dae0bd..b410aced2 100644 --- a/modules/commands/bs_badwords.cpp +++ b/modules/commands/bs_badwords.cpp @@ -31,11 +31,11 @@ struct BadWordImpl : BadWord, Serializable struct BadWordsImpl : BadWords { - Serialize::Reference ci; + Serialize::Reference ci; typedef std::vector list; Serialize::Checker badwords; - BadWordsImpl(Extensible *obj) : ci(anope_dynamic_static_cast(obj)), badwords("BadWord") { } + BadWordsImpl(Extensible *obj) : ci(anope_dynamic_static_cast(obj)), badwords("BadWord") { } ~BadWordsImpl(); @@ -72,7 +72,7 @@ struct BadWordsImpl : BadWords { if (this->badwords->empty() || index >= this->badwords->size()) return; - + (*bwevents)(&Event::BadWordEvents::OnBadWordDel, ci, (*this->badwords)[index]); delete this->badwords->at(index); @@ -103,7 +103,7 @@ BadWordsImpl::~BadWordsImpl() BadWordImpl::~BadWordImpl() { - ChannelInfo *ci = ChannelInfo::Find(chan); + ChanServ::Channel *ci = ChanServ::Find(chan); if (ci) { BadWordsImpl *badwords = ci->GetExt("badwords"); @@ -123,13 +123,13 @@ Serializable* BadWordImpl::Unserialize(Serializable *obj, Serialize::Data &data) data["ci"] >> sci; data["word"] >> sword; - ChannelInfo *ci = ChannelInfo::Find(sci); + ChanServ::Channel *ci = ChanServ::Find(sci); if (!ci) return NULL; unsigned int n; data["type"] >> n; - + BadWordImpl *bw; if (obj) bw = anope_dynamic_static_cast(obj); @@ -141,20 +141,20 @@ Serializable* BadWordImpl::Unserialize(Serializable *obj, Serialize::Data &data) BadWordsImpl *bws = ci->Require("badwords"); bws->badwords->push_back(bw); - + return bw; } class BadwordsDelCallback : public NumberList { CommandSource &source; - ChannelInfo *ci; + ChanServ::Channel *ci; BadWords *bw; Command *c; unsigned deleted; bool override; public: - BadwordsDelCallback(CommandSource &_source, ChannelInfo *_ci, Command *_c, const Anope::string &list) : NumberList(list, true), source(_source), ci(_ci), c(_c), deleted(0), override(false) + BadwordsDelCallback(CommandSource &_source, ChanServ::Channel *_ci, Command *_c, const Anope::string &list) : NumberList(list, true), source(_source), ci(_ci), c(_c), deleted(0), override(false) { if (!source.AccessFor(ci).HasPriv("BADWORDS") && source.HasPriv("botserv/administration")) this->override = true; @@ -185,7 +185,7 @@ class BadwordsDelCallback : public NumberList class CommandBSBadwords : public Command { private: - void DoList(CommandSource &source, ChannelInfo *ci, const Anope::string &word) + void DoList(CommandSource &source, ChanServ::Channel *ci, const Anope::string &word) { bool override = !source.AccessFor(ci).HasPriv("BADWORDS"); Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "LIST"; @@ -259,7 +259,7 @@ class CommandBSBadwords : public Command } } - void DoAdd(CommandSource &source, ChannelInfo *ci, const Anope::string &word) + void DoAdd(CommandSource &source, ChanServ::Channel *ci, const Anope::string &word) { size_t pos = word.rfind(' '); BadWordType bwtype = BW_ANY; @@ -308,7 +308,7 @@ class CommandBSBadwords : public Command source.Reply(_("\002%s\002 added to %s bad words list."), realword.c_str(), ci->name.c_str()); } - void DoDelete(CommandSource &source, ChannelInfo *ci, const Anope::string &word) + void DoDelete(CommandSource &source, ChanServ::Channel *ci, const Anope::string &word) { BadWords *badwords = ci->GetExt("badwords"); @@ -354,7 +354,7 @@ class CommandBSBadwords : public Command badwords->Check(); } - void DoClear(CommandSource &source, ChannelInfo *ci) + void DoClear(CommandSource &source, ChanServ::Channel *ci) { bool override = !source.AccessFor(ci).HasPriv("BADWORDS"); Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "CLEAR"; @@ -387,7 +387,7 @@ class CommandBSBadwords : public Command return; } - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); diff --git a/modules/commands/bs_bot.cpp b/modules/commands/bs_bot.cpp index 9aa572f00..977d4b72f 100644 --- a/modules/commands/bs_bot.cpp +++ b/modules/commands/bs_bot.cpp @@ -73,7 +73,7 @@ class CommandBSBot : public Command * if so. You need to drop the nick manually before you can use * it as a bot nick from now on -GD */ - if (NickAlias::Find(nick)) + if (NickServ::FindNick(nick)) { source.Reply(NICK_ALREADY_REGISTERED, nick.c_str()); return; @@ -176,7 +176,7 @@ class CommandBSBot : public Command * if so. You need to drop the nick manually before you can use * it as a bot nick from now on -GD */ - if (NickAlias::Find(nick)) + if (NickServ::FindNick(nick)) { source.Reply(NICK_ALREADY_REGISTERED, nick.c_str()); return; @@ -210,10 +210,10 @@ class CommandBSBot : public Command { IRCD->SendClientIntroduction(bi); unsigned minusers = Config->GetBlock("botserv")->Get("minusers"); - const std::set &channels = bi->GetChannels(); - for (std::set::const_iterator it = channels.begin(), it_end = channels.end(); it != it_end; ++it) + const std::set &channels = bi->GetChannels(); + for (std::set::const_iterator it = channels.begin(), it_end = channels.end(); it != it_end; ++it) { - const ChannelInfo *ci = *it; + const ChanServ::Channel *ci = *it; if (ci->c && ci->c->users.size() >= minusers) bi->Join(ci->c); diff --git a/modules/commands/bs_control.cpp b/modules/commands/bs_control.cpp index 38745c191..0311a9df2 100644 --- a/modules/commands/bs_control.cpp +++ b/modules/commands/bs_control.cpp @@ -24,7 +24,7 @@ class CommandBSSay : public Command { const Anope::string &text = params[1]; - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); @@ -84,7 +84,7 @@ class CommandBSAct : public Command { Anope::string message = params[1]; - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); diff --git a/modules/commands/bs_info.cpp b/modules/commands/bs_info.cpp index 49775a053..88ac15a48 100644 --- a/modules/commands/bs_info.cpp +++ b/modules/commands/bs_info.cpp @@ -20,18 +20,13 @@ class CommandBSInfo : public Command void send_bot_channels(std::vector &buffers, const BotInfo *bi) { Anope::string buf; - for (registered_channel_map::const_iterator it = RegisteredChannelList->begin(), it_end = RegisteredChannelList->end(); it != it_end; ++it) + for (ChanServ::Channel *ci : bi->GetChannels()) { - const ChannelInfo *ci = it->second; - - if (ci->bi == bi) + buf += " " + ci->name + " "; + if (buf.length() > 300) { - buf += " " + ci->name + " "; - if (buf.length() > 300) - { - buffers.push_back(buf); - buf.clear(); - } + buffers.push_back(buf); + buf.clear(); } } if (!buf.empty()) @@ -51,7 +46,7 @@ class CommandBSInfo : public Command const Anope::string &query = params[0]; BotInfo *bi = BotInfo::Find(query, true); - ChannelInfo *ci = ChannelInfo::Find(query); + ChanServ::Channel *ci = ChanServ::Find(query); InfoFormatter info(source.nc); if (bi) diff --git a/modules/commands/bs_kick.cpp b/modules/commands/bs_kick.cpp index 3a4d78c93..7ffd9d353 100644 --- a/modules/commands/bs_kick.cpp +++ b/modules/commands/bs_kick.cpp @@ -28,15 +28,15 @@ struct KickerDataImpl : KickerData capsmin = capspercent = 0; floodlines = floodsecs = 0; repeattimes = 0; - + dontkickops = dontkickvoices = false; } - void Check(ChannelInfo *ci) override + void Check(ChanServ::Channel *ci) override { if (amsgs || badwords || bolds || caps || colors || flood || italics || repeat || reverses || underlines) return; - + ci->Shrink("kickerdata"); } @@ -46,10 +46,10 @@ struct KickerDataImpl : KickerData void ExtensibleSerialize(const Extensible *e, const Serializable *s, Serialize::Data &data) const override { - if (s->GetSerializableType()->GetName() != "ChannelInfo") + if (s->GetSerializableType()->GetName() != "ChanServ::Channel") return; - const ChannelInfo *ci = anope_dynamic_static_cast(e); + const ChanServ::Channel *ci = anope_dynamic_static_cast(e); KickerData *kd = this->Get(ci); if (kd == NULL) return; @@ -76,10 +76,10 @@ struct KickerDataImpl : KickerData void ExtensibleUnserialize(Extensible *e, Serializable *s, Serialize::Data &data) override { - if (s->GetSerializableType()->GetName() != "ChannelInfo") + if (s->GetSerializableType()->GetName() != "ChanServ::Channel") return; - ChannelInfo *ci = anope_dynamic_static_cast(e); + ChanServ::Channel *ci = anope_dynamic_static_cast(e); KickerData *kd = ci->Require("kickerdata"); data["kickerdata:amsgs"] >> kd->amsgs; @@ -173,12 +173,12 @@ class CommandBSKickBase : public Command virtual bool OnHelp(CommandSource &source, const Anope::string &subcommand) override = 0; protected: - bool CheckArguments(CommandSource &source, const std::vector ¶ms, ChannelInfo* &ci) + bool CheckArguments(CommandSource &source, const std::vector ¶ms, ChanServ::Channel* &ci) { const Anope::string &chan = params[0]; const Anope::string &option = params[1]; - ci = ChannelInfo::Find(chan); + ci = ChanServ::Find(chan); if (Anope::ReadOnly) source.Reply(_("Sorry, kicker configuration is temporarily disabled.")); @@ -198,7 +198,7 @@ class CommandBSKickBase : public Command return false; } - void Process(CommandSource &source, ChannelInfo *ci, const Anope::string ¶m, const Anope::string &ttb, size_t ttb_idx, const Anope::string &optname, KickerData *kd, bool &val) + void Process(CommandSource &source, ChanServ::Channel *ci, const Anope::string ¶m, const Anope::string &ttb, size_t ttb_idx, const Anope::string &optname, KickerData *kd, bool &val) { if (param.equals_ci("ON")) { @@ -257,7 +257,7 @@ class CommandBSKickAMSG : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); @@ -293,14 +293,14 @@ class CommandBSKickBadwords : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); Process(source, ci, params[1], params.size() > 2 ? params[2] : "", TTB_BADWORDS, "badwords", kd, kd->badwords); kd->Check(ci); } - + } bool OnHelp(CommandSource &source, const Anope::string &subcommand) override @@ -332,7 +332,7 @@ class CommandBSKickBolds : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); @@ -366,7 +366,7 @@ class CommandBSKickCaps : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (!CheckArguments(source, params, ci)) return; @@ -462,7 +462,7 @@ class CommandBSKickColors : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); @@ -496,7 +496,7 @@ class CommandBSKickFlood : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (!CheckArguments(source, params, ci)) return; @@ -594,7 +594,7 @@ class CommandBSKickItalics : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); @@ -628,7 +628,7 @@ class CommandBSKickRepeat : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (!CheckArguments(source, params, ci)) return; @@ -716,7 +716,7 @@ class CommandBSKickReverses : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); @@ -750,7 +750,7 @@ class CommandBSKickUnderlines : public CommandBSKickBase void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci; + ChanServ::Channel *ci; if (CheckArguments(source, params, ci)) { KickerData *kd = ci->Require("kickerdata"); @@ -784,14 +784,14 @@ class CommandBSSetDontKickOps : public Command void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); return; } - AccessGroup access = source.AccessFor(ci); + ChanServ::AccessGroup access = source.AccessFor(ci); if (!source.HasPriv("botserv/administration") && !access.HasPriv("SET")) { source.Reply(ACCESS_DENIED); @@ -808,7 +808,7 @@ class CommandBSSetDontKickOps : public Command if (params[1].equals_ci("ON")) { bool override = !access.HasPriv("SET"); - Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to enable dontkickops"; + Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to enable dontkickops"; kd->dontkickops = true; source.Reply(_("Bot \002won't kick ops\002 on channel %s."), ci->name.c_str()); @@ -816,7 +816,7 @@ class CommandBSSetDontKickOps : public Command else if (params[1].equals_ci("OFF")) { bool override = !access.HasPriv("SET"); - Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to disable dontkickops"; + Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to disable dontkickops"; kd->dontkickops = false; source.Reply(_("Bot \002will kick ops\002 on channel %s."), ci->name.c_str()); @@ -849,14 +849,14 @@ class CommandBSSetDontKickVoices : public Command void Execute(CommandSource &source, const std::vector ¶ms) override { - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); return; } - AccessGroup access = source.AccessFor(ci); + ChanServ::AccessGroup access = source.AccessFor(ci); if (!source.HasPriv("botserv/administration") && !access.HasPriv("SET")) { source.Reply(ACCESS_DENIED); @@ -873,7 +873,7 @@ class CommandBSSetDontKickVoices : public Command if (params[1].equals_ci("ON")) { bool override = !access.HasPriv("SET"); - Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to enable dontkickvoices"; + Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to enable dontkickvoices"; kd->dontkickvoices = true; source.Reply(_("Bot \002won't kick voices\002 on channel %s."), ci->name.c_str()); @@ -881,7 +881,7 @@ class CommandBSSetDontKickVoices : public Command else if (params[1].equals_ci("OFF")) { bool override = !access.HasPriv("SET"); - Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to disable dontkickvoices"; + Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to disable dontkickvoices"; kd->dontkickvoices = false; source.Reply(_("Bot \002will kick voices\002 on channel %s."), ci->name.c_str()); @@ -1041,7 +1041,7 @@ class BSKick : public Module return ud; } - void check_ban(ChannelInfo *ci, User *u, KickerData *kd, int ttbtype) + void check_ban(ChanServ::Channel *ci, User *u, KickerData *kd, int ttbtype) { /* Don't ban ulines or protected users */ if (u->IsProtected()) @@ -1065,7 +1065,7 @@ class BSKick : public Module } } - void bot_kick(ChannelInfo *ci, User *u, const char *message, ...) + void bot_kick(ChanServ::Channel *ci, User *u, const char *message, ...) { va_list args; char buf[1024]; @@ -1112,7 +1112,7 @@ class BSKick : public Module } - void OnBotInfo(CommandSource &source, BotInfo *bi, ChannelInfo *ci, InfoFormatter &info) override + void OnBotInfo(CommandSource &source, BotInfo *bi, ChanServ::Channel *ci, InfoFormatter &info) override { if (!ci) return; @@ -1237,7 +1237,7 @@ class BSKick : public Module * But FIRST we check whether the user is protected in any * way. */ - ChannelInfo *ci = c->ci; + ChanServ::Channel *ci = c->ci; if (ci == NULL) return; KickerData *kd = kickerdata.Get(ci); @@ -1370,7 +1370,7 @@ class BSKick : public Module else { Anope::string wordbuf = " " + bw->word + " "; - + if ((casesensitive && nbuf.find(wordbuf) != Anope::string::npos) || (!casesensitive && nbuf.find_ci(wordbuf) != Anope::string::npos)) mustkick = true; } diff --git a/modules/commands/bs_set.cpp b/modules/commands/bs_set.cpp index 68aaf8d47..9c92e462c 100644 --- a/modules/commands/bs_set.cpp +++ b/modules/commands/bs_set.cpp @@ -85,14 +85,14 @@ class CommandBSSetBanExpire : public Command const Anope::string &chan = params[0]; const Anope::string &arg = params[1]; - ChannelInfo *ci = ChannelInfo::Find(chan); + ChanServ::Channel *ci = ChanServ::Find(chan); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, chan.c_str()); return; } - AccessGroup access = source.AccessFor(ci); + ChanServ::AccessGroup access = source.AccessFor(ci); if (!source.HasPriv("botserv/administration") && !access.HasPriv("SET")) { source.Reply(ACCESS_DENIED); @@ -208,7 +208,7 @@ class BSSet : public Module { } - void OnBotBan(User *u, ChannelInfo *ci, const Anope::string &mask) override + void OnBotBan(User *u, ChanServ::Channel *ci, const Anope::string &mask) override { if (!ci->banexpire) return; diff --git a/modules/commands/cs_access.cpp b/modules/commands/cs_access.cpp index 3bfbde97d..83d00f6ae 100644 --- a/modules/commands/cs_access.cpp +++ b/modules/commands/cs_access.cpp @@ -10,29 +10,30 @@ */ #include "module.h" +#include "modules/chanserv.h" #include "modules/cs_access.h" static std::map defaultLevels; -static inline void reset_levels(ChannelInfo *ci) +static inline void reset_levels(ChanServ::Channel *ci) { ci->ClearLevels(); for (std::map::iterator it = defaultLevels.begin(), it_end = defaultLevels.end(); it != it_end; ++it) ci->SetLevel(it->first, it->second); } -class AccessChanAccess : public ChanAccess +class AccessChanAccess : public ChanServ::ChanAccess { public: int level; - AccessChanAccess(AccessProvider *p) : ChanAccess(p), level(0) + AccessChanAccess(ChanServ::AccessProvider *p) : ChanAccess(p), level(0) { } bool HasPriv(const Anope::string &name) const override { - return this->ci->GetLevel(name) != ACCESS_INVALID && this->level >= this->ci->GetLevel(name); + return this->ci->GetLevel(name) != ChanServ::ACCESS_INVALID && this->level >= this->ci->GetLevel(name); } Anope::string AccessSerialize() const @@ -51,15 +52,15 @@ class AccessChanAccess : public ChanAccess } } - bool operator>(const ChanAccess &other) const override + bool operator>(const ChanServ::ChanAccess &other) const override { if (this->provider != other.provider) - return ChanAccess::operator>(other); + return ChanServ::ChanAccess::operator>(other); else return this->level > anope_dynamic_static_cast(&other)->level; } - bool operator<(const ChanAccess &other) const override + bool operator<(const ChanServ::ChanAccess &other) const override { if (this->provider != other.provider) return ChanAccess::operator<(other); @@ -68,17 +69,17 @@ class AccessChanAccess : public ChanAccess } }; -class AccessAccessProvider : public AccessProvider +class AccessAccessProvider : public ChanServ::AccessProvider { public: static AccessAccessProvider *me; - AccessAccessProvider(Module *o) : AccessProvider(o, "access/access") + AccessAccessProvider(Module *o) : ChanServ::AccessProvider(o, "access/access") { me = this; } - ChanAccess *Create() override + ChanServ::ChanAccess *Create() override { return new AccessChanAccess(this); } @@ -87,11 +88,11 @@ AccessAccessProvider* AccessAccessProvider::me; class CommandCSAccess : public Command { - void DoAdd(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoAdd(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { Anope::string mask = params[2]; - Privilege *p = NULL; - int level = ACCESS_INVALID; + ChanServ::Privilege *p = NULL; + int level = ChanServ::ACCESS_INVALID; try { @@ -99,7 +100,7 @@ class CommandCSAccess : public Command } catch (const ConvertException &) { - p = PrivilegeManager::FindPrivilege(params[3]); + p = ChanServ::service ? ChanServ::service->FindPrivilege(params[3]) : nullptr; if (p != NULL && defaultLevels[p->name]) level = defaultLevels[p->name]; } @@ -109,14 +110,14 @@ class CommandCSAccess : public Command source.Reply(_("Access level must be non-zero.")); return; } - else if (level <= ACCESS_INVALID || level >= ACCESS_FOUNDER) + else if (level <= ChanServ::ACCESS_INVALID || level >= ChanServ::ACCESS_FOUNDER) { - source.Reply(CHAN_ACCESS_LEVEL_RANGE, ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); + source.Reply(CHAN_ACCESS_LEVEL_RANGE, ChanServ::ACCESS_INVALID + 1, ChanServ::ACCESS_FOUNDER - 1); return; } - AccessGroup u_access = source.AccessFor(ci); - const ChanAccess *highest = u_access.Highest(); + ChanServ::AccessGroup u_access = source.AccessFor(ci); + const ChanServ::ChanAccess *highest = u_access.Highest(); AccessChanAccess tmp_access(AccessAccessProvider::me); tmp_access.ci = ci; @@ -143,7 +144,7 @@ class CommandCSAccess : public Command return; } - ChannelInfo *targ_ci = ChannelInfo::Find(mask); + ChanServ::Channel *targ_ci = ChanServ::Find(mask); if (targ_ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, mask.c_str()); @@ -159,7 +160,7 @@ class CommandCSAccess : public Command } else { - const NickAlias *na = NickAlias::Find(mask); + const NickServ::Nick *na = NickServ::FindNick(mask); if (!na && Config->GetModule("chanserv")->Get("disallow_hostmask_access")) { source.Reply(_("Masks and unregistered users may not be on access lists.")); @@ -180,7 +181,7 @@ class CommandCSAccess : public Command for (unsigned i = ci->GetAccessCount(); i > 0; --i) { - const ChanAccess *access = ci->GetAccess(i - 1); + const ChanServ::ChanAccess *access = ci->GetAccess(i - 1); if (mask.equals_ci(access->mask)) { /* Don't allow lowering from a level >= u_level */ @@ -201,7 +202,7 @@ class CommandCSAccess : public Command return; } - ServiceReference provider("AccessProvider", "access/access"); + ServiceReference provider("AccessProvider", "access/access"); if (!provider) return; AccessChanAccess *access = anope_dynamic_static_cast(provider->Create()); @@ -222,11 +223,11 @@ class CommandCSAccess : public Command source.Reply(_("\002%s\002 added to %s access list at level \002%d\002."), access->mask.c_str(), ci->name.c_str(), level); } - void DoDel(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoDel(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { Anope::string mask = params[2]; - if (!isdigit(mask[0]) && mask.find_first_of("#!*@") == Anope::string::npos && !NickAlias::Find(mask)) + if (!isdigit(mask[0]) && mask.find_first_of("#!*@") == Anope::string::npos && !NickServ::FindNick(mask)) { User *targ = User::Find(mask, true); if (targ != NULL) @@ -245,14 +246,14 @@ class CommandCSAccess : public Command class AccessDelCallback : public NumberList { CommandSource &source; - ChannelInfo *ci; + ChanServ::Channel *ci; Command *c; unsigned deleted; Anope::string Nicks; bool denied; bool override; public: - AccessDelCallback(CommandSource &_source, ChannelInfo *_ci, Command *_c, const Anope::string &numlist) : NumberList(numlist, true), source(_source), ci(_ci), c(_c), deleted(0), denied(false), override(false) + AccessDelCallback(CommandSource &_source, ChanServ::Channel *_ci, Command *_c, const Anope::string &numlist) : NumberList(numlist, true), source(_source), ci(_ci), c(_c), deleted(0), denied(false), override(false) { if (!source.AccessFor(ci).HasPriv("ACCESS_CHANGE") && source.HasPriv("chanserv/access/modify")) this->override = true; @@ -280,10 +281,10 @@ class CommandCSAccess : public Command if (!Number || Number > ci->GetAccessCount()) return; - ChanAccess *access = ci->GetAccess(Number - 1); + ChanServ::ChanAccess *access = ci->GetAccess(Number - 1); - AccessGroup ag = source.AccessFor(ci); - const ChanAccess *u_highest = ag.Highest(); + ChanServ::AccessGroup ag = source.AccessFor(ci); + const ChanServ::ChanAccess *u_highest = ag.Highest(); if ((!u_highest || *u_highest <= *access) && !ag.founder && !this->override && !access->mask.equals_ci(source.nc->display)) { @@ -308,12 +309,12 @@ class CommandCSAccess : public Command } else { - AccessGroup u_access = source.AccessFor(ci); - const ChanAccess *highest = u_access.Highest(); + ChanServ::AccessGroup u_access = source.AccessFor(ci); + const ChanServ::ChanAccess *highest = u_access.Highest(); for (unsigned i = ci->GetAccessCount(); i > 0; --i) { - ChanAccess *access = ci->GetAccess(i - 1); + ChanServ::ChanAccess *access = ci->GetAccess(i - 1); if (mask.equals_ci(access->mask)) { if (!access->mask.equals_ci(source.nc->display) && !u_access.founder && (!highest || *highest <= *access) && !source.HasPriv("chanserv/access/modify")) @@ -338,7 +339,7 @@ class CommandCSAccess : public Command return; } - void ProcessList(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms, ListFormatter &list) + void ProcessList(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms, ListFormatter &list) { const Anope::string &nick = params.size() > 2 ? params[2] : ""; @@ -349,10 +350,10 @@ class CommandCSAccess : public Command class AccessListCallback : public NumberList { ListFormatter &list; - ChannelInfo *ci; + ChanServ::Channel *ci; public: - AccessListCallback(ListFormatter &_list, ChannelInfo *_ci, const Anope::string &numlist) : NumberList(numlist, false), list(_list), ci(_ci) + AccessListCallback(ListFormatter &_list, ChanServ::Channel *_ci, const Anope::string &numlist) : NumberList(numlist, false), list(_list), ci(_ci) { } @@ -361,13 +362,13 @@ class CommandCSAccess : public Command if (!number || number > ci->GetAccessCount()) return; - const ChanAccess *access = ci->GetAccess(number - 1); + const ChanServ::ChanAccess *access = ci->GetAccess(number - 1); Anope::string timebuf; if (ci->c) for (Channel::ChanUserList::const_iterator cit = ci->c->users.begin(), cit_end = ci->c->users.end(); cit != cit_end; ++cit) { - ChanAccess::Path p; + ChanServ::ChanAccess::Path p; if (access->Matches(cit->second->user, cit->second->user->Account(), p)) timebuf = "Now"; } @@ -395,7 +396,7 @@ class CommandCSAccess : public Command { for (unsigned i = 0, end = ci->GetAccessCount(); i < end; ++i) { - const ChanAccess *access = ci->GetAccess(i); + const ChanServ::ChanAccess *access = ci->GetAccess(i); if (!nick.empty() && !Anope::Match(access->mask, nick)) continue; @@ -404,7 +405,7 @@ class CommandCSAccess : public Command if (ci->c) for (Channel::ChanUserList::const_iterator cit = ci->c->users.begin(), cit_end = ci->c->users.end(); cit != cit_end; ++cit) { - ChanAccess::Path p; + ChanServ::ChanAccess::Path p; if (access->Matches(cit->second->user, cit->second->user->Account(), p)) timebuf = "Now"; } @@ -434,7 +435,7 @@ class CommandCSAccess : public Command list.Process(replies); source.Reply(_("Access list for %s:"), ci->name.c_str()); - + for (unsigned i = 0; i < replies.size(); ++i) source.Reply(replies[i]); @@ -444,7 +445,7 @@ class CommandCSAccess : public Command return; } - void DoList(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoList(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { if (!ci->GetAccessCount()) { @@ -457,7 +458,7 @@ class CommandCSAccess : public Command this->ProcessList(source, ci, params, list); } - void DoView(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoView(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { if (!ci->GetAccessCount()) { @@ -470,7 +471,7 @@ class CommandCSAccess : public Command this->ProcessList(source, ci, params, list); } - void DoClear(CommandSource &source, ChannelInfo *ci) + void DoClear(CommandSource &source, ChanServ::Channel *ci) { if (!source.IsFounder(ci) && !source.HasPriv("chanserv/access/modify")) source.Reply(ACCESS_DENIED); @@ -506,7 +507,7 @@ class CommandCSAccess : public Command const Anope::string &nick = params.size() > 2 ? params[2] : ""; const Anope::string &s = params.size() > 3 ? params[3] : ""; - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); @@ -526,7 +527,7 @@ class CommandCSAccess : public Command has_access = true; else if (is_del) { - const NickAlias *na = NickAlias::Find(nick); + const NickServ::Nick *na = NickServ::FindNick(nick); if (na && na->nc == source.GetAccount()) has_access = true; } @@ -612,7 +613,7 @@ class CommandCSAccess : public Command class CommandCSLevels : public Command { - void DoSet(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoSet(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { const Anope::string &what = params[2]; const Anope::string &lev = params[3]; @@ -620,7 +621,7 @@ class CommandCSLevels : public Command int level; if (lev.equals_ci("FOUNDER")) - level = ACCESS_FOUNDER; + level = ChanServ::ACCESS_FOUNDER; else { try @@ -634,11 +635,11 @@ class CommandCSLevels : public Command } } - if (level <= ACCESS_INVALID || level > ACCESS_FOUNDER) - source.Reply(_("Level must be between %d and %d inclusive."), ACCESS_INVALID + 1, ACCESS_FOUNDER - 1); + if (level <= ChanServ::ACCESS_INVALID || level > ChanServ::ACCESS_FOUNDER) + source.Reply(_("Level must be between %d and %d inclusive."), ChanServ::ACCESS_INVALID + 1, ChanServ::ACCESS_FOUNDER - 1); else { - Privilege *p = PrivilegeManager::FindPrivilege(what); + ChanServ::Privilege *p = ChanServ::service ? ChanServ::service->FindPrivilege(what) : nullptr; if (p == NULL) source.Reply(_("Setting \002%s\002 not known. Type \002%s%s HELP LEVELS\002 for a list of valid settings."), what.c_str(), Config->StrictPrivmsg.c_str(), source.service->nick.c_str()); else @@ -649,7 +650,7 @@ class CommandCSLevels : public Command ci->SetLevel(p->name, level); this->onlevelchange(&Event::LevelChange::OnLevelChange, source, ci, p->name, level); - if (level == ACCESS_FOUNDER) + if (level == ChanServ::ACCESS_FOUNDER) source.Reply(_("Level for %s on channel %s changed to founder only."), p->name.c_str(), ci->name.c_str()); else source.Reply(_("Level for \002%s\002 on channel %s changed to \002%d\002."), p->name.c_str(), ci->name.c_str(), level); @@ -657,7 +658,7 @@ class CommandCSLevels : public Command } } - void DoDisable(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoDisable(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { const Anope::string &what = params[2]; @@ -668,14 +669,14 @@ class CommandCSLevels : public Command return; } - Privilege *p = PrivilegeManager::FindPrivilege(what); + ChanServ::Privilege *p = ChanServ::service ? ChanServ::service->FindPrivilege(what) : nullptr; if (p != NULL) { bool override = !source.AccessFor(ci).HasPriv("FOUNDER"); Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to disable " << p->name; - ci->SetLevel(p->name, ACCESS_INVALID); - this->onlevelchange(&Event::LevelChange::OnLevelChange, source, ci, p->name, ACCESS_INVALID); + ci->SetLevel(p->name, ChanServ::ACCESS_INVALID); + this->onlevelchange(&Event::LevelChange::OnLevelChange, source, ci, p->name, ChanServ::ACCESS_INVALID); source.Reply(_("\002%s\002 disabled on channel %s."), p->name.c_str(), ci->name.c_str()); return; @@ -684,26 +685,29 @@ class CommandCSLevels : public Command source.Reply(_("Setting \002%s\002 not known. Type \002%s%s HELP LEVELS\002 for a list of valid settings."), what.c_str(), Config->StrictPrivmsg.c_str(), source.service->nick.c_str()); } - void DoList(CommandSource &source, ChannelInfo *ci) + void DoList(CommandSource &source, ChanServ::Channel *ci) { + if (!ChanServ::service) + return; + source.Reply(_("Access level settings for channel %s:"), ci->name.c_str()); ListFormatter list(source.GetAccount()); list.AddColumn(_("Name")).AddColumn(_("Level")); - const std::vector &privs = PrivilegeManager::GetPrivileges(); + const std::vector &privs = ChanServ::service->GetPrivileges(); for (unsigned i = 0; i < privs.size(); ++i) { - const Privilege &p = privs[i]; + const ChanServ::Privilege &p = privs[i]; int16_t j = ci->GetLevel(p.name); ListFormatter::ListEntry entry; entry["Name"] = p.name; - if (j == ACCESS_INVALID) + if (j == ChanServ::ACCESS_INVALID) entry["Level"] = Language::Translate(source.GetAccount(), _("(disabled)")); - else if (j == ACCESS_FOUNDER) + else if (j == ChanServ::ACCESS_FOUNDER) entry["Level"] = Language::Translate(source.GetAccount(), _("(founder only)")); else entry["Level"] = stringify(j); @@ -718,7 +722,7 @@ class CommandCSLevels : public Command source.Reply(replies[i]); } - void DoReset(CommandSource &source, ChannelInfo *ci) + void DoReset(CommandSource &source, ChanServ::Channel *ci) { bool override = !source.AccessFor(ci).HasPriv("FOUNDER"); Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to reset all levels"; @@ -747,7 +751,7 @@ class CommandCSLevels : public Command const Anope::string &what = params.size() > 2 ? params[2] : ""; const Anope::string &s = params.size() > 3 ? params[3] : ""; - ChannelInfo *ci = ChannelInfo::Find(params[0]); + ChanServ::Channel *ci = ChanServ::Find(params[0]); if (ci == NULL) { source.Reply(CHAN_X_NOT_REGISTERED, params[0].c_str()); @@ -786,14 +790,17 @@ class CommandCSLevels : public Command ListFormatter list(source.GetAccount()); list.AddColumn(_("Name")).AddColumn(_("Description")); - const std::vector &privs = PrivilegeManager::GetPrivileges(); - for (unsigned i = 0; i < privs.size(); ++i) + if (ChanServ::service) { - const Privilege &p = privs[i]; - ListFormatter::ListEntry entry; - entry["Name"] = p.name; - entry["Description"] = Language::Translate(source.nc, p.desc.c_str()); - list.AddEntry(entry); + const std::vector &privs = ChanServ::service->GetPrivileges(); + for (unsigned i = 0; i < privs.size(); ++i) + { + const ChanServ::Privilege &p = privs[i]; + ListFormatter::ListEntry entry; + entry["Name"] = p.name; + entry["Description"] = Language::Translate(source.nc, p.desc.c_str()); + list.AddEntry(entry); + } } std::vector replies; @@ -862,7 +869,7 @@ class CSAccess : public Module const Anope::string &pname = priv->Get("name"); - Privilege *p = PrivilegeManager::FindPrivilege(pname); + ChanServ::Privilege *p = ChanServ::service ? ChanServ::service->FindPrivilege(pname) : nullptr; if (p == NULL) continue; @@ -870,20 +877,20 @@ class CSAccess : public Module if (value.empty()) continue; else if (value.equals_ci("founder")) - defaultLevels[p->name] = ACCESS_FOUNDER; + defaultLevels[p->name] = ChanServ::ACCESS_FOUNDER; else if (value.equals_ci("disabled")) - defaultLevels[p->name] = ACCESS_INVALID; + defaultLevels[p->name] = ChanServ::ACCESS_INVALID; else defaultLevels[p->name] = priv->Get("level"); } } - void OnCreateChan(ChannelInfo *ci) override + void OnCreateChan(ChanServ::Channel *ci) override { reset_levels(ci); } - EventReturn OnGroupCheckPriv(const AccessGroup *group, const Anope::string &priv) override + EventReturn OnGroupCheckPriv(const ChanServ::AccessGroup *group, const Anope::string &priv) override { if (group->ci == NULL) return EVENT_CONTINUE; diff --git a/modules/commands/cs_akick.cpp b/modules/commands/cs_akick.cpp index 61bc23181..b548d87a9 100644 --- a/modules/commands/cs_akick.cpp +++ b/modules/commands/cs_akick.cpp @@ -12,15 +12,89 @@ #include "module.h" #include "modules/cs_akick.h" +class AutoKickImpl : public AutoKick +{ + public: + ~AutoKickImpl() + { + if (this->ci) + { + std::vector::iterator it = std::find(this->ci->akick->begin(), this->ci->akick->end(), this); + if (it != this->ci->akick->end()) + this->ci->akick->erase(it); + + const NickServ::Nick *na = NickServ::FindNick(this->mask); + if (na != NULL) + na->nc->RemoveChannelReference(this->ci); + } + } + + void Serialize(Serialize::Data &data) const override + { + data["ci"] << this->ci->name; + if (this->nc) + data["nc"] << this->nc->display; + else + data["mask"] << this->mask; + data["reason"] << this->reason; + data["creator"] << this->creator; + data.SetType("addtime", Serialize::Data::DT_INT); data["addtime"] << this->addtime; + data.SetType("last_used", Serialize::Data::DT_INT); data["last_used"] << this->last_used; + } + + static Serializable* Unserialize(Serializable *obj, Serialize::Data &data) + { + Anope::string sci, snc; + + data["ci"] >> sci; + data["nc"] >> snc; + + ChanServ::Channel *ci = ChanServ::Find(sci); + if (!ci) + return NULL; + + AutoKick *ak; + NickServ::Account *nc = NickServ::FindAccount(snc); + if (obj) + { + ak = anope_dynamic_static_cast(obj); + data["creator"] >> ak->creator; + data["reason"] >> ak->reason; + ak->nc = NickServ::FindAccount(snc); + data["mask"] >> ak->mask; + data["addtime"] >> ak->addtime; + data["last_used"] >> ak->last_used; + } + else + { + time_t addtime, lastused; + data["addtime"] >> addtime; + data["last_used"] >> lastused; + + Anope::string screator, sreason, smask; + + data["creator"] >> screator; + data["reason"] >> sreason; + data["mask"] >> smask; + + if (nc) + ak = ci->AddAkick(screator, nc, sreason, addtime, lastused); + else + ak = ci->AddAkick(screator, smask, sreason, addtime, lastused); + } + + return ak; + } +}; + class CommandCSAKick : public Command { - void DoAdd(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoAdd(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { Anope::string mask = params[2]; Anope::string reason = params.size() > 3 ? params[3] : ""; - const NickAlias *na = NickAlias::Find(mask); - NickCore *nc = NULL; - const AutoKick *akick; + const NickServ::Nick *na = NickServ::FindNick(mask); + NickServ::Account *nc = NULL; unsigned reasonmax = Config->GetModule("chanserv")->Get("reasonmax", "200"); if (reason.length() > reasonmax) @@ -59,7 +133,7 @@ class CommandCSAKick : public Command } Entry e("", mask); - + mask = (e.nick.empty() ? "*" : e.nick) + "!" + (e.user.empty() ? "*" : e.user) + "@" + (e.host.empty() ? "*" : e.host); @@ -94,7 +168,7 @@ class CommandCSAKick : public Command * or whether the mask matches a user with higher/equal access - Viper */ else if (ci->HasExt("PEACE") && nc) { - AccessGroup nc_access = ci->AccessFor(nc), u_access = source.AccessFor(ci); + ChanServ::AccessGroup nc_access = ci->AccessFor(nc), u_access = source.AccessFor(ci); if (nc == ci->GetFounder() || nc_access >= u_access) { source.Reply(ACCESS_DENIED); @@ -103,13 +177,14 @@ class CommandCSAKick : public Command } else if (ci->HasExt("PEACE")) { +#if 0 /* Match against all currently online users with equal or * higher access. - Viper */ for (user_map::const_iterator it = UserListByNick.begin(); it != UserListByNick.end(); ++it) { User *u2 = it->second; - AccessGroup nc_access = ci->AccessFor(nc), u_access = source.AccessFor(ci); + ChanServ::AccessGroup nc_access = ci->AccessFor(nc), u_access = source.AccessFor(ci); Entry entry_mask("", mask); if ((ci->AccessFor(u2).HasPriv("FOUNDER") || nc_access >= u_access) && entry_mask.Matches(u2)) @@ -121,11 +196,11 @@ class CommandCSAKick : public Command /* Match against the lastusermask of all nickalias's with equal * or higher access. - Viper */ - for (nickalias_map::const_iterator it = NickAliasList->begin(), it_end = NickAliasList->end(); it != it_end; ++it) + for (nickalias_map::const_iterator it = NickServ::NickList->begin(), it_end = NickServ::NickList->end(); it != it_end; ++it) { na = it->second; - AccessGroup nc_access = ci->AccessFor(na->nc), u_access = source.AccessFor(ci); + ChanServ::AccessGroup nc_access = ci->AccessFor(na->nc), u_access = source.AccessFor(ci); if (na->nc && (na->nc == ci->GetFounder() || nc_access >= u_access)) { Anope::string buf = na->nick + "!" + na->last_usermask; @@ -136,14 +211,15 @@ class CommandCSAKick : public Command } } } +#endif } for (unsigned j = 0, end = ci->GetAkickCount(); j < end; ++j) { - akick = ci->GetAkick(j); - if (akick->nc ? akick->nc == nc : mask.equals_ci(akick->mask)) + AutoKick *ak = ci->GetAkick(j); + if (ak->nc ? ak->nc == nc : mask.equals_ci(ak->mask)) { - source.Reply(_("\002%s\002 already exists on %s autokick list."), akick->nc ? akick->nc->display.c_str() : akick->mask.c_str(), ci->name.c_str()); + source.Reply(_("\002%s\002 already exists on %s autokick list."), ak->nc ? ak->nc->display.c_str() : ak->mask.c_str(), ci->name.c_str()); return; } } @@ -154,21 +230,22 @@ class CommandCSAKick : public Command return; } + AutoKick *ak; if (nc) - akick = ci->AddAkick(source.GetNick(), nc, reason); + ak = ci->AddAkick(source.GetNick(), nc, reason); else - akick = ci->AddAkick(source.GetNick(), mask, reason); + ak = ci->AddAkick(source.GetNick(), mask, reason); Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, this, ci) << "to add " << mask << (reason == "" ? "" : ": ") << reason; - this->akickevents(&Event::Akick::OnAkickAdd, source, ci, akick); + this->akickevents(&Event::Akick::OnAkickAdd, source, ci, ak); source.Reply(_("\002%s\002 added to %s autokick list."), mask.c_str(), ci->name.c_str()); this->DoEnforce(source, ci); } - void DoDel(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms) + void DoDel(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms) { const Anope::string &mask = params[2]; unsigned i, end; @@ -185,12 +262,12 @@ class CommandCSAKick : public Command class AkickDelCallback : public NumberList { CommandSource &source; - ChannelInfo *ci; + ChanServ::Channel *ci; CommandCSAKick *c; unsigned deleted; - AccessGroup ag; + ChanServ::AccessGroup ag; public: - AkickDelCallback(CommandSource &_source, ChannelInfo *_ci, CommandCSAKick *_c, const Anope::string &list) : NumberList(list, true), source(_source), ci(_ci), c(_c), deleted(0), ag(source.AccessFor(ci)) + AkickDelCallback(CommandSource &_source, ChanServ::Channel *_ci, CommandCSAKick *_c, const Anope::string &list) : NumberList(list, true), source(_source), ci(_ci), c(_c), deleted(0), ag(source.AccessFor(ci)) { } @@ -209,12 +286,12 @@ class CommandCSAKick : public Command if (!number || number > ci->GetAkickCount()) return; - const AutoKick *akick = ci->GetAkick(number - 1); + const AutoKick *ak = ci->GetAkick(number - 1); - c->akickevents(&Event::Akick::OnAkickDel, source, ci, akick); + c->akickevents(&Event::Akick::OnAkickDel, source, ci, ak); bool override = !ag.HasPriv("AKICK"); - Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, c, ci) << "to delete " << (akick->nc ? akick->nc->display : akick->mask); + Log(override ? LOG_OVERRIDE : LOG_COMMAND, source, c, ci) << "to delete " << (ak->nc ? ak->nc->display : ak->mask); ++deleted; ci->EraseAkick(number - 1); @@ -225,14 +302,14 @@ class CommandCSAKick : public Command } else { - const NickAlias *na = NickAlias::Find(mask); - const NickCore *nc = na ? *na->nc : NULL; + const NickServ::Nick *na = NickServ::FindNick(mask); + const NickServ::Account *nc = na ? *na->nc : NULL; for (i = 0, end = ci->GetAkickCount(); i < end; ++i) { - const AutoKick *akick = ci->GetAkick(i); + const AutoKick *ak = ci->GetAkick(i); - if (akick->nc ? akick->nc == nc : mask.equals_ci(akick->mask)) + if (ak->nc ? ak->nc == nc : mask.equals_ci(ak->mask)) break; } @@ -253,7 +330,7 @@ class CommandCSAKick : public Command } } - void ProcessList(CommandSource &source, ChannelInfo *ci, const std::vector ¶ms, ListFormatter &list) + void ProcessList(CommandSource &source, ChanServ::Channel *ci, const std::vector ¶ms, ListFormatter &list) { const Anope::string &mask = params.size() > 2 ? params[2] : ""; @@ -262,10 +339,10 @@ class CommandCSAKick :