diff options
author | Adam <Adam@anope.org> | 2016-11-05 10:36:28 -0400 |
---|---|---|
committer | Adam <Adam@anope.org> | 2016-11-05 10:36:28 -0400 |
commit | a5fdf7c546ccb0f70a70543ea8afb54d155a13cc (patch) | |
tree | 1663a622791eebb4f2d3d32d6cd4f70b266512b9 | |
parent | dba19d839af717a697ed54ed5da9c27aef76052a (diff) |
irc2sql: fix changing status modes to update ison modes
-rw-r--r-- | modules/extra/stats/irc2sql/irc2sql.cpp | 30 |
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 ¶m) { - 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; } |