summaryrefslogtreecommitdiff
path: root/src/chanserv.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/chanserv.cpp')
-rw-r--r--src/chanserv.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/chanserv.cpp b/src/chanserv.cpp
index 9d8fb411a..338d0f311 100644
--- a/src/chanserv.cpp
+++ b/src/chanserv.cpp
@@ -837,17 +837,22 @@ ChanServTimer::ChanServTimer(Channel *chan) : Timer(Config->CSInhabit), c(chan)
{
if (c->ci)
c->ci->SetFlag(CI_INHABIT);
- ChanServ->Join(c);
+ if (!c->ci->bi)
+ ChanServ->Join(*c);
+ else if (!c->FindUser(c->ci->bi))
+ c->ci->bi->Join(*c);
}
void ChanServTimer::Tick(time_t)
{
- if (!c->ci)
+ if (!c || !c->ci)
return;
c->ci->UnsetFlag(CI_INHABIT);
- if (c->users.size() == 1 || c->ci->bi != ChanServ)
- ChanServ->Part(c);
+ if (!c->ci->bi)
+ ChanServ->Part(*c);
+ else if (c->users.size() == 1 || c->users.size() < Config->BSMinUsers)
+ c->ci->bi->Part(*c);
}