1
- // jbnc v0.3
1
+ // jbnc v0.4
2
2
// Copyright (C) 2020 Andrew Lee <andrew@imperialfamily.com>
3
3
// All Rights Reserved.
4
4
const tls = require ( 'tls' ) ;
@@ -199,8 +199,8 @@ server = doServer(tlsOptions,function(socket) {
199
199
_server = _server_pass [ 0 ] . split ( ":" ) ;
200
200
this . irc . server = _server [ 0 ] ;
201
201
this . irc . port = ( _server [ 1 ] ? _server [ 1 ] . trim ( ) : 6667 ) ;
202
- if ( _server_pass [ 1 ] ) {
203
- this . irc . serverpassword = _server_pass [ 1 ] ;
202
+ if ( origin [ 0 ] . split ( "||" ) [ 0 ] ) {
203
+ this . irc . serverpassword = origin [ 0 ] . split ( "||" ) [ 0 ] ;
204
204
}
205
205
if ( origin [ 2 ] )
206
206
this . clientbuffer = origin [ 2 ] . trim ( ) ;
@@ -448,6 +448,7 @@ server = doServer(tlsOptions,function(socket) {
448
448
this . write ( ":*jbnc NOTICE * :Sayonara.\n" ) ;
449
449
connections [ this . hash ] . write ( "QUIT :jbnc gateway\n" ) ;
450
450
connections [ this . hash ] . end ( ) ;
451
+ delete connections [ this . hash ] ;
451
452
break ;
452
453
case 'PASS' :
453
454
if ( command [ 3 ] ) {
@@ -600,13 +601,15 @@ function clientReconnect(socket) {
600
601
socket . write ( connection . motd + "\n" ) ;
601
602
socket . write ( ":*jbnc 376 " + connection . nick + " :End of /MOTD command.\n" ) ;
602
603
}
604
+
605
+ socket . write ( ":*jbnc PRIVMSG " + connection . nick + " :Attaching you to the network\n" ) ;
603
606
604
607
// Loop thru channels and send JOINs
605
608
for ( key in connection . channels ) {
606
609
if ( connection . channels . hasOwnProperty ( key ) ) {
607
610
_channel = connection . channels [ key ] ;
608
611
609
- socket . write ( ":" + connection . nick + "!" + connection . ircuser + "@" + connection . host + " JOIN :" + _channel . name + "\n" ) ;
612
+ socket . write ( "@time=null;msgid=null :" + connection . nick + "!" + connection . ircuser + "@" + connection . host + " JOIN :" + _channel . name + "\n" ) ;
610
613
_mode_params = '' ;
611
614
for ( x = 0 ; x < _channel . modes . length ; x ++ ) {
612
615
switch ( _channel . modes [ x ] ) {
@@ -771,14 +774,21 @@ function clientConnect(socket) {
771
774
this . write ( "CAP REQ :userhost-in-names\n" ) ;
772
775
this . userhostInNames = true ;
773
776
}
777
+ if ( lines [ n ] . trim ( ) . indexOf ( "server-time" ) >= 0 ) {
778
+ this . write ( "CAP REQ :server-time\n" ) ;
779
+ }
780
+ if ( lines [ n ] . trim ( ) . indexOf ( "message-tags" ) >= 0 ) {
781
+ this . write ( "CAP REQ :message-tags\n" ) ;
782
+ }
774
783
this . write ( "CAP END\n" ) ;
775
784
}
776
785
else {
777
786
this . write ( "CAP END\n" ) ;
778
787
}
779
788
continue ;
780
789
}
781
- switch ( data [ 1 ] ) {
790
+ let s = ( data [ 2 ] == "JOIN" || data [ 2 ] == "PART" || data [ 2 ] == "QUIT" || data [ 2 ] == "MODE" || data [ 2 ] == "PING" || data [ 2 ] == "NICK" ? data [ 2 ] : data [ 1 ] ) ;
791
+ switch ( s ) {
782
792
case '001' :
783
793
if ( ! this . authenticated ) {
784
794
this . authenticated = true ;
@@ -798,19 +808,36 @@ function clientConnect(socket) {
798
808
break ;
799
809
case '324' :
800
810
case 'MODE' :
801
- _target = data [ 1 ] == '324' ?data [ 3 ] . trim ( ) :data [ 2 ] . trim ( ) ;
802
- _sender = data [ 0 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
803
- _mode = data [ 1 ] == '324' ?data [ 4 ] . trim ( ) :data [ 3 ] . trim ( ) ;
804
- _mode = _mode . indexOf ( ":" ) != - 1 ?_mode . substr ( 1 ) :_mode ;
805
- _mode_target = [ ] ;
806
- if ( data [ 1 ] == '324' ) {
807
- if ( data [ 5 ] )
808
- _mode_target = data . slice ( 5 , data . length ) ;
809
- }
810
- else {
811
- if ( data [ 4 ] )
812
- _mode_target = data . slice ( 4 , data . length ) ;
811
+ if ( data [ 2 ] == "MODE" ) {
812
+ _target = data [ 1 ] == '324' ?data [ 3 ] . trim ( ) :data [ 2 ] . trim ( ) ;
813
+ _sender = data [ 1 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
814
+ _mode = data [ 1 ] == '324' ?data [ 4 ] . trim ( ) :data [ 3 ] . trim ( ) ;
815
+ _mode = _mode . indexOf ( ":" ) != - 1 ?_mode . substr ( 1 ) :_mode ;
816
+ _mode_target = [ ] ;
817
+ if ( data [ 1 ] == '324' ) {
818
+ if ( data [ 5 ] )
819
+ _mode_target = data . slice ( 5 , data . length ) ;
820
+ }
821
+ else {
822
+ if ( data [ 4 ] )
823
+ _mode_target = data . slice ( 4 , data . length ) ;
824
+ }
825
+ } else {
826
+ _target = data [ 1 ] == '324' ?data [ 3 ] . trim ( ) :data [ 2 ] . trim ( ) ;
827
+ _sender = data [ 0 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
828
+ _mode = data [ 1 ] == '324' ?data [ 4 ] . trim ( ) :data [ 3 ] . trim ( ) ;
829
+ _mode = _mode . indexOf ( ":" ) != - 1 ?_mode . substr ( 1 ) :_mode ;
830
+ _mode_target = [ ] ;
831
+ if ( data [ 1 ] == '324' ) {
832
+ if ( data [ 5 ] )
833
+ _mode_target = data . slice ( 5 , data . length ) ;
834
+ }
835
+ else {
836
+ if ( data [ 4 ] )
837
+ _mode_target = data . slice ( 4 , data . length ) ;
838
+ }
813
839
}
840
+
814
841
_mode_count = 0 ;
815
842
_add = true ;
816
843
// walk thru modes
@@ -977,16 +1004,16 @@ function clientConnect(socket) {
977
1004
this . motd += lines [ n ] + "\n" ;
978
1005
break ;
979
1006
case 'JOIN' :
980
- _temp = data [ 0 ] . substr ( 1 ) . split ( "!" ) ;
1007
+ _temp = data [ 1 ] . substr ( 1 ) . split ( "!" ) ;
981
1008
_nick = _temp [ 0 ] ;
982
1009
if ( _temp [ 1 ] )
983
1010
_userhost = _temp [ 1 ] ;
984
1011
if ( _temp [ 1 ] && this . nick == _nick ) {
985
1012
this . ircuser = _temp [ 1 ] . split ( "@" ) [ 0 ] ;
986
1013
}
987
- _channels = data [ 2 ] . substr ( 0 ) . trim ( ) . split ( "," ) ;
988
- if ( data [ 2 ] . indexOf ( ":" ) != - 1 )
989
- _channels = data [ 2 ] . substr ( 1 ) . trim ( ) . split ( "," ) ;
1014
+ _channels = data [ 3 ] . substr ( 0 ) . trim ( ) . split ( "," ) ;
1015
+ if ( data [ 3 ] . indexOf ( ":" ) != - 1 )
1016
+ _channels = data [ 3 ] . substr ( 1 ) . trim ( ) . split ( "," ) ;
990
1017
for ( x = 0 ; x < _channels . length ; x ++ ) {
991
1018
_channel = _channels [ x ] ;
992
1019
__channel = _channel . toUpperCase ( ) ;
@@ -1068,8 +1095,8 @@ function clientConnect(socket) {
1068
1095
}
1069
1096
break ;
1070
1097
case 'PART' :
1071
- _target = data [ 2 ] . toUpperCase ( ) . trim ( ) ;
1072
- _sender = data [ 0 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
1098
+ _target = data [ 3 ] . toUpperCase ( ) . trim ( ) ;
1099
+ _sender = data [ 1 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
1073
1100
if ( _sender == this . nick ) {
1074
1101
delete this . channels [ _target ] ;
1075
1102
}
@@ -1082,7 +1109,7 @@ function clientConnect(socket) {
1082
1109
}
1083
1110
break ;
1084
1111
case 'QUIT' :
1085
- _sender = data [ 0 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
1112
+ _sender = data [ 1 ] . substr ( 1 ) . split ( "!" ) [ 0 ] ;
1086
1113
for ( key in this . channels ) {
1087
1114
if ( this . channels . hasOwnProperty ( key ) ) {
1088
1115
for ( x = 0 ; x < this . channels [ key ] . names . length ; x ++ )
@@ -1115,8 +1142,8 @@ function clientConnect(socket) {
1115
1142
this . _getnames [ _channel ] = false ;
1116
1143
break ;
1117
1144
case 'NICK' :
1118
- if ( data [ 0 ] . substr ( 1 ) . split ( "!" ) [ 0 ] == this . nick ) {
1119
- this . nick = data [ 2 ] . substr ( 1 ) . trim ( ) ;
1145
+ if ( data [ 1 ] . substr ( 1 ) . split ( "!" ) [ 0 ] == this . nick ) {
1146
+ this . nick = data [ 3 ] . substr ( 1 ) . trim ( ) ;
1120
1147
}
1121
1148
break ;
1122
1149
case '433' :
@@ -1132,6 +1159,10 @@ function clientConnect(socket) {
1132
1159
this . write ( "PONG " + data [ 1 ] . substr ( 1 ) . trim ( ) + "\n" ) ;
1133
1160
continue ;
1134
1161
}
1162
+ if ( data [ 1 ] == "PING" ) {
1163
+ this . write ( "PONG " + data [ 2 ] . substr ( 1 ) . trim ( ) + "\n" ) ;
1164
+ continue ;
1165
+ }
1135
1166
if ( lines [ n ] . length > 1 ) {
1136
1167
for ( m = 0 ; m < this . parents . length ; m ++ ) {
1137
1168
this . parents [ m ] . write ( lines [ n ] + "\n" ) ;
0 commit comments