summaryrefslogtreecommitdiff
path: root/modules/chanserv/main
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2017-03-19 18:36:03 -0400
committerAdam <Adam@anope.org>2017-03-19 18:36:03 -0400
commit2a886acbedb6b6386dbff3e591b0d4035d516b2a (patch)
tree765218b2fc476e9b1517d7f1e4aa78f57de87752 /modules/chanserv/main
parentf237405a52f6b8efb606c5181ffe3bd75a6a6a8a (diff)
Get rid of relying on if(this) in WhoSends()
Diffstat (limited to 'modules/chanserv/main')
-rw-r--r--modules/chanserv/main/channel.cpp9
-rw-r--r--modules/chanserv/main/channel.h1
-rw-r--r--modules/chanserv/main/chanserv.cpp19
3 files changed, 22 insertions, 7 deletions
diff --git a/modules/chanserv/main/channel.cpp b/modules/chanserv/main/channel.cpp
index d10abbc0d..25430656e 100644
--- a/modules/chanserv/main/channel.cpp
+++ b/modules/chanserv/main/channel.cpp
@@ -347,6 +347,15 @@ void ChannelImpl::SetPrivate(bool _private)
Set(&ChannelType::_private, _private);
}
+ServiceBot *ChannelImpl::WhoSends()
+{
+ BotInfo *bi = GetBI();
+ if (bi != nullptr)
+ return bi->bot;
+
+ return Config->GetClient("ChanServ");
+}
+
ChanServ::ChanAccess *ChannelImpl::GetAccess(unsigned index)
{
std::vector<ChanServ::ChanAccess *> a = GetRefs<ChanServ::ChanAccess *>();
diff --git a/modules/chanserv/main/channel.h b/modules/chanserv/main/channel.h
index bb79df3c5..1cc6dc408 100644
--- a/modules/chanserv/main/channel.h
+++ b/modules/chanserv/main/channel.h
@@ -141,6 +141,7 @@ class ChannelImpl : public ChanServ::Channel
void SetPrivate(bool) override;
bool IsFounder(const User *user) override;
+ ServiceBot *WhoSends() override;
ChanServ::ChanAccess *GetAccess(unsigned index) override;
ChanServ::AccessGroup AccessFor(const User *u, bool = true) override;
ChanServ::AccessGroup AccessFor(NickServ::Account *nc, bool = true) override;
diff --git a/modules/chanserv/main/chanserv.cpp b/modules/chanserv/main/chanserv.cpp
index dd6bdb472..be29c0ab8 100644
--- a/modules/chanserv/main/chanserv.cpp
+++ b/modules/chanserv/main/chanserv.cpp
@@ -380,17 +380,17 @@ class ChanServCore : public Module
return;
if (c->ci)
- c->SetMode(c->ci->WhoSends(), "REGISTERED", "", false);
+ c->SetMode(nullptr, "REGISTERED", "", false);
else
- c->RemoveMode(c->ci->WhoSends(), "REGISTERED", "", false);
+ c->RemoveMode(nullptr, "REGISTERED", "", false);
const Anope::string &require = Config->GetModule(this)->Get<Anope::string>("require");
if (!require.empty())
{
if (c->ci)
- c->SetModes(c->ci->WhoSends(), false, "+%s", require.c_str());
+ c->SetModes(nullptr, false, "+%s", require.c_str());
else
- c->SetModes(c->ci->WhoSends(), false, "-%s", require.c_str());
+ c->SetModes(nullptr, false, "-%s", require.c_str());
}
}
@@ -485,8 +485,13 @@ class ChanServCore : public Module
else
{
if (!ci->GetBot())
- ci->WhoSends()->Assign(NULL, ci);
- if (ci->c->FindUser(ci->GetBot()) == NULL)
+ {
+ ServiceBot *bi = ci->WhoSends();
+ if (bi != nullptr)
+ bi->Assign(nullptr, ci);
+ }
+
+ if (ci->GetBot() != nullptr && ci->c->FindUser(ci->GetBot()) == nullptr)
{
Anope::string botmodes = Config->GetModule("botserv/main")->Get<Anope::string>("botmodes",
Config->GetModule("chanserv/main")->Get<Anope::string>("botmodes"));
@@ -535,7 +540,7 @@ class ChanServCore : public Module
if (cu && cm && !cu->status.HasMode(cm->mchar))
{
/* Our -o and their mode change crossing, bounce their mode */
- c->RemoveMode(c->ci->WhoSends(), mode, param);
+ c->RemoveMode(nullptr, mode, param);
/* We don't set mlocks until after the join has finished processing, it will stack with this change,
* so there isn't much for the user to remove except -nt etc which is likely locked anyway.
*/