summaryrefslogtreecommitdiff
path: root/src/channels.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/channels.cpp')
-rw-r--r--src/channels.cpp18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/channels.cpp b/src/channels.cpp
index eca0bdd34..26623c24d 100644
--- a/src/channels.cpp
+++ b/src/channels.cpp
@@ -833,11 +833,13 @@ void Channel::SetModes(BotInfo *bi, bool EnforceMLock, const char *cmodes, ...)
* @param ac Number of args
* @param av args
*/
-void ChanSetInternalModes(Channel *c, int ac, const char **av)
+void ChanSetInternalModes(Channel *c, int ac, const char **av, User *setter)
{
if (!ac)
return;
+ Anope::string modestring;
+ Anope::string paramstring;
int k = 0, j = 0, add = -1;
for (unsigned int i = 0, end = strlen(av[0]); i < end; ++i)
{
@@ -846,9 +848,11 @@ void ChanSetInternalModes(Channel *c, int ac, const char **av)
switch (av[0][i])
{
case '+':
+ modestring += '+';
add = 1;
continue;
case '-':
+ modestring += '-';
add = 0;
continue;
default:
@@ -857,6 +861,7 @@ void ChanSetInternalModes(Channel *c, int ac, const char **av)
cm = ModeManager::FindChannelModeByChar(av[0][i]);
if (!cm)
continue;
+ modestring += cm->ModeChar;
}
if (cm->Type == MODE_REGULAR)
@@ -880,6 +885,11 @@ void ChanSetInternalModes(Channel *c, int ac, const char **av)
}
if (++j < ac)
{
+ User *u = NULL;
+ if (cm->Type == MODE_STATUS && (u = finduser(av[j])))
+ paramstring += " " + u->nick;
+ else
+ paramstring += " " + Anope::string(av[j]);
if (add)
c->SetModeInternal(cm, av[j]);
else
@@ -889,6 +899,9 @@ void ChanSetInternalModes(Channel *c, int ac, const char **av)
Log() << "warning: ChanSetInternalModes() recieved more modes requiring params than params, modes: " << merge_args(ac, av) << ", ac: " << ac << ", j: " << j;
}
+ if (setter)
+ Log(setter, c, "mode") << modestring << paramstring;
+
if (j + k + 1 < ac)
Log() << "warning: ChanSetInternalModes() recieved more params than modes requiring them, modes: " << merge_args(ac, av) << ", ac: " << ac << ", j: " << j << " k: " << k;
}
@@ -1311,9 +1324,6 @@ void do_cmode(const Anope::string &source, int ac, const char **av)
--ac;
++av;
- User *u = finduser(source);
- if (u)
- Log(u, c, "mode") << merge_args(ac, av);
ChanSetInternalModes(c, ac, av);
}