summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/channels.cpp10
-rw-r--r--src/users.cpp1
2 files changed, 11 insertions, 0 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index 4d68af99c..312e78aa6 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -482,6 +482,7 @@ long chanrec::PartUser(userrec *user, const char* reason)
}
user->chans[i]->uc_modes = 0;
user->chans[i]->channel = NULL;
+ this->RemoveAllPrefixes(user);
break;
}
}
@@ -528,6 +529,7 @@ long chanrec::ServerKickUser(userrec* user, const char* reason, bool triggereven
this->WriteChannelWithServ(ServerInstance->Config->ServerName, "KICK %s %s :%s", this->name, user->nick, reason);
user->chans[i]->uc_modes = 0;
user->chans[i]->channel = NULL;
+ this->RemoveAllPrefixes(user);
break;
}
}
@@ -610,6 +612,7 @@ long chanrec::KickUser(userrec *src, userrec *user, const char* reason)
this->WriteChannel(src, "KICK %s %s :%s", this->name, user->nick, reason);
(*i)->uc_modes = 0;
(*i)->channel = NULL;
+ this->RemoveAllPrefixes(user);
break;
}
}
@@ -976,3 +979,10 @@ void chanrec::SetPrefix(userrec* user, char prefix, unsigned int prefix_value, b
}
}
+void chanrec::RemoveAllPrefixes(userrec* user)
+{
+ prefixlist::iterator n = prefixes.find(user);
+ if (n != prefixes.end())
+ prefixes.erase(n);
+}
+
diff --git a/src/users.cpp b/src/users.cpp
index 3953db233..3b02e82b9 100644
--- a/src/users.cpp
+++ b/src/users.cpp
@@ -1744,6 +1744,7 @@ void userrec::PurgeEmptyChannels()
ucrec* uc = *f;
if (uc->channel)
{
+ uc->channel->RemoveAllPrefixes(this);
if (uc->channel->DelUser(this) == 0)
{
/* No users left in here, mark it for deletion */