Skip to content

Commit 16b0907

Browse files
authored
Merge pull request #33 from Madriix/master
Update
2 parents 12a487b + 0e5d850 commit 16b0907

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

bouncer.js

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,7 @@ function clientConnect(socket) {
760760
connection.connected = true;
761761
connection.opmode = BOUNCER_DEFAULT_OPMODE;
762762
connection.userhostInNames=false;
763+
connection.messagetags=false;
763764

764765
// Temp Buffer
765766
connection._buffer='';
@@ -823,11 +824,12 @@ function clientConnect(socket) {
823824
this.write("CAP REQ :userhost-in-names\n");
824825
this.userhostInNames=true;
825826
}
826-
if(lines[n].trim().indexOf("server-time")>=0) {
827-
this.write("CAP REQ :server-time\n");
828-
}
829827
if(lines[n].trim().indexOf("message-tags")>=0) {
830828
this.write("CAP REQ :message-tags\n");
829+
this.messagetags=true;
830+
}
831+
if(this.messagetags && lines[n].trim().indexOf("server-time")>=0) {
832+
this.write("CAP REQ :server-time\n");
831833
}
832834
if(SASL && lines[n].trim().indexOf("sasl")>=0) {
833835
this.write("CAP REQ :sasl\n");
@@ -881,7 +883,12 @@ function clientConnect(socket) {
881883
}
882884
}
883885

884-
let s = (data[2]=="JOIN" || data[2]=="PART" || data[2]=="QUIT" || data[2]=="MODE" || data[2]=="PING" || data[2]=="NICK" || data[2]=="KICK" ? data[2] : data[1]);
886+
let s = data[1];
887+
888+
if ( this.messagetags && (data[2]=="JOIN" || data[2]=="PART" || data[2]=="QUIT" || data[2]=="MODE" || data[2]=="PING" || data[2]=="NICK" || data[2]=="KICK") ) {
889+
s = data[2];
890+
}
891+
885892
switch(s) {
886893
case '001':
887894
if(!this.authenticated) {
@@ -902,20 +909,29 @@ function clientConnect(socket) {
902909
break;
903910
case '324':
904911
case 'MODE':
912+
_mode_target=[];
905913
if (data[1]=='324') {
906914
_target=data[3].trim();
907-
_sender=data[1].substr(1).split("!")[0];
915+
_sender=data[0].substr(1).split("!")[0];
908916
_mode=data[4].trim();
909917
if(data[5])
910918
_mode_target = data.slice(5,data.length);
911919
}
912-
else if (data[2]=='MODE') {
920+
else if (this.messagetags && data[2]=='MODE') {
913921
_target=data[3].trim();
914922
_sender=data[1].substr(1).split("!")[0];
915923
_mode=data[4].trim();
916924
if(data[5])
917925
_mode_target = data.slice(5,data.length);
918-
} else {
926+
}
927+
else if (!this.messagetags) {
928+
_target=data[2].trim();
929+
_sender=data[0].substr(1).split("!")[0];
930+
_mode=data[3].trim();
931+
if(data[4])
932+
_mode_target = data.slice(4,data.length);
933+
}
934+
else {
919935
_target=data[2].trim();
920936
_sender=data[2];
921937
_mode=data[3].trim();
@@ -1091,16 +1107,17 @@ function clientConnect(socket) {
10911107
this.motd+=lines[n]+"\n";
10921108
break;
10931109
case 'JOIN':
1094-
_temp = data[1].substr(1).split("!");
1110+
_temp = (this.messagetags ? data[1].substr(1).split("!") : data[0].substr(1).split("!"));
1111+
_datatemp = (this.messagetags ? 3 : 2);
10951112
_nick = _temp[0];
10961113
if(_temp[1])
10971114
_userhost = _temp[1];
10981115
if(_temp[1] && this.nick==_nick) {
10991116
this.ircuser=_temp[1].split("@")[0];
11001117
}
1101-
_channels = data[3].substr(0).trim().split(",");
1102-
if(data[3].indexOf(":")!=-1)
1103-
_channels = data[3].substr(1).trim().split(",");
1118+
_channels = data[_datatemp].substr(0).trim().split(",");
1119+
if(data[_datatemp].indexOf(":")!=-1)
1120+
_channels = data[_datatemp].substr(1).trim().split(",");
11041121
for(x=0;x<_channels.length;x++) {
11051122
_channel=_channels[x];
11061123
__channel=_channel.toUpperCase();
@@ -1169,8 +1186,8 @@ function clientConnect(socket) {
11691186
this.channels[_channel].topic_time=_time;
11701187
break;
11711188
case 'KICK':
1172-
_target=data[4].trim();
1173-
_channel=data[3].toUpperCase().trim();
1189+
_target=(this.messagetags ? data[4].trim() : data[3].trim());
1190+
_channel=(this.messagetags ? data[3].toUpperCase().trim() : data[2].toUpperCase().trim());
11741191
if(_target==this.nick) {
11751192
delete this.channels[_channel];
11761193
}
@@ -1182,8 +1199,8 @@ function clientConnect(socket) {
11821199
}
11831200
break;
11841201
case 'PART':
1185-
_target=data[3].toUpperCase().trim();
1186-
_sender=data[1].substr(1).split("!")[0];
1202+
_target=(this.messagetags ? data[3].toUpperCase().trim() : data[2].toUpperCase().trim());
1203+
_sender=(this.messagetags ? data[1].substr(1).split("!")[0] : data[0].substr(1).split("!")[0]);
11871204
if(_sender==this.nick) {
11881205
delete this.channels[_target];
11891206
}
@@ -1196,7 +1213,7 @@ function clientConnect(socket) {
11961213
}
11971214
break;
11981215
case 'QUIT':
1199-
_sender=data[1].substr(1).split("!")[0];
1216+
_sender=(this.messagetags ? data[1].substr(1).split("!")[0] : data[0].substr(1).split("!")[0]);
12001217
for (key in this.channels) {
12011218
if (this.channels.hasOwnProperty(key)) {
12021219
for(x=0;x<this.channels[key].names.length;x++) {

0 commit comments

Comments
 (0)