1
0
mirror of https://github.com/anope/anope.git synced 2026-06-24 18:46:37 +02:00

irc2sql: fix changing status modes to update ison modes

This commit is contained in:
Adam
2016-11-05 10:36:28 -04:00
parent dba19d839a
commit a5fdf7c546
+26 -4
View File
@@ -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;
}