summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorAdam <Adam@anope.org>2016-11-05 10:36:28 -0400
committerAdam <Adam@anope.org>2016-11-05 10:36:28 -0400
commita5fdf7c546ccb0f70a70543ea8afb54d155a13cc (patch)
tree1663a622791eebb4f2d3d32d6cd4f70b266512b9 /modules
parentdba19d839af717a697ed54ed5da9c27aef76052a (diff)
irc2sql: fix changing status modes to update ison modes
Diffstat (limited to 'modules')
-rw-r--r--modules/extra/stats/irc2sql/irc2sql.cpp30
1 files changed, 26 insertions, 4 deletions
diff --git a/modules/extra/stats/irc2sql/irc2sql.cpp b/modules/extra/stats/irc2sql/irc2sql.cpp
index 7baa191f5..fc8c12971 100644
--- a/modules/extra/stats/irc2sql/irc2sql.cpp
+++ b/modules/extra/stats/irc2sql/irc2sql.cpp
@@ -227,10 +227,32 @@ void IRC2SQL::OnJoinChannel(User *u, Channel *c)
EventReturn IRC2SQL::OnChannelModeSet(Channel *c, MessageSource &setter, ChannelMode *mode, const Anope::string &param)
{
- query = "UPDATE `" + prefix + "chan` SET modes=@modes@ WHERE channel=@channel@";
- query.SetValue("channel", c->name);
- query.SetValue("modes", c->GetModes(true,true));
- this->RunQuery(query);
+ if (mode->type == MODE_STATUS)
+ {
+ User *u = User::Find(param);
+ if (u == NULL)
+ return EVENT_CONTINUE;
+
+ ChanUserContainer *cc = u->FindChannel(c);
+ if (cc == NULL)
+ return EVENT_CONTINUE;
+
+ query = "UPDATE `" + prefix + "user` AS u, `" + prefix + "ison` AS i, `" + prefix + "chan` AS c"
+ " SET i.modes=@modes@"
+ " WHERE u.nick=@nick@ AND c.channel=@channel@"
+ " AND u.nickid = i.nickid AND c.chanid = i.chanid";
+ query.SetValue("nick", u->nick);
+ query.SetValue("modes", cc->status.Modes());
+ query.SetValue("channel", c->name);
+ this->RunQuery(query);
+ }
+ else
+ {
+ query = "UPDATE `" + prefix + "chan` SET modes=@modes@ WHERE channel=@channel@";
+ query.SetValue("channel", c->name);
+ query.SetValue("modes", c->GetModes(true,true));
+ this->RunQuery(query);
+ }
return EVENT_CONTINUE;
}