From 55734bd65ea3bf394cded568a8bc02206fa6d790 Mon Sep 17 00:00:00 2001 From: Randy Sommerfeld <cyan@synchro.net> Date: Tue, 15 Jun 2021 10:34:14 +0700 Subject: [PATCH] Fix mode desync on server SJOIN. Thanks to Retros for finding where this was coming from! --- exec/load/ircd/server.js | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/exec/load/ircd/server.js b/exec/load/ircd/server.js index 9f57d23ac4..19499ae65c 100644 --- a/exec/load/ircd/server.js +++ b/exec/load/ircd/server.js @@ -922,7 +922,7 @@ function Server_Work(cmdline) { ), false /*bcast*/); } - if (tmp.created >= parseInt(p[0])) { /* We have TS superiority */ + if (tmp.created >= parseInt(p[0])) { /* They have TS superiority */ if (k.isop) tmp.modelist[CHANMODE_OP][n.id] = n.id; if (k.isvoice) @@ -936,7 +936,30 @@ function Server_Work(cmdline) { n.nick ), false /*bcast*/); } + } else { /* We have TS superiority */ + if (k.isop) { + k.isop = false; + this.rawout(format(":%s MODE %s -o %s", + ServerName, + tmp.nam, + k.nick + )); + } + if (k.isvoice) { + k.isvoice = false; + this.rawout(format(":%s MODE %s -v %s", + ServerName, + tmp.nam, + k.nick + )); + } } + + j[i] = format("%s%s%s", + k.isop ? "@" : "", + k.isvoice ? "+" : "", + k.nick + ); } if (tmp.created > parseInt(p[0])) @@ -948,7 +971,7 @@ function Server_Work(cmdline) { tmp.created, tmp.nam, tmp.chanmode(true /* pass args */), - p[p.length-1] + j.join(" ") ) ); } else { /* User single SJOIN */ -- GitLab