irc.client: nick command parsing, namelist notification after join, tests. Make +normal+ the default state for participants, not 'f'
parent
5fd42c4e54
commit
fcc1ee9cdd
|
@ -103,7 +103,7 @@ IN: irc.client.tests
|
|||
] unit-test
|
||||
|
||||
! Participants lists tests
|
||||
{ H{ { "somedude" f } } } [
|
||||
{ H{ { "somedude" +normal+ } } } [
|
||||
{ ":somedude!n=user@isp.net JOIN :#factortest" } make-client
|
||||
{ [ "factorbot" set-nick ]
|
||||
[ listeners>>
|
||||
|
@ -115,13 +115,13 @@ IN: irc.client.tests
|
|||
} cleave
|
||||
] unit-test
|
||||
|
||||
{ H{ { "somedude2" f } } } [
|
||||
{ H{ { "somedude2" +normal+ } } } [
|
||||
{ ":somedude!n=user@isp.net PART #factortest" } make-client
|
||||
{ [ "factorbot" set-nick ]
|
||||
[ listeners>>
|
||||
[ "#factortest" [ <irc-channel-listener>
|
||||
H{ { "somedude2" f }
|
||||
{ "somedude" f } } clone >>participants ] keep
|
||||
H{ { "somedude2" +normal+ }
|
||||
{ "somedude" +normal+ } } clone >>participants ] keep
|
||||
] dip set-at ]
|
||||
[ connect-irc ]
|
||||
[ drop 0.1 seconds sleep ]
|
||||
|
@ -130,13 +130,13 @@ IN: irc.client.tests
|
|||
} cleave
|
||||
] unit-test
|
||||
|
||||
{ H{ { "somedude2" f } } } [
|
||||
{ H{ { "somedude2" +normal+ } } } [
|
||||
{ ":somedude!n=user@isp.net QUIT" } make-client
|
||||
{ [ "factorbot" set-nick ]
|
||||
[ listeners>>
|
||||
[ "#factortest" [ <irc-channel-listener>
|
||||
H{ { "somedude2" f }
|
||||
{ "somedude" f } } clone >>participants ] keep
|
||||
H{ { "somedude2" +normal+ }
|
||||
{ "somedude" +normal+ } } clone >>participants ] keep
|
||||
] dip set-at ]
|
||||
[ connect-irc ]
|
||||
[ drop 0.1 seconds sleep ]
|
||||
|
@ -145,13 +145,13 @@ IN: irc.client.tests
|
|||
} cleave
|
||||
] unit-test
|
||||
|
||||
{ H{ { "somedude2" f } } } [
|
||||
{ H{ { "somedude2" +normal+ } } } [
|
||||
{ ":somedude2!n=user2@isp.net KICK #factortest somedude" } make-client
|
||||
{ [ "factorbot" set-nick ]
|
||||
[ listeners>>
|
||||
[ "#factortest" [ <irc-channel-listener>
|
||||
H{ { "somedude2" f }
|
||||
{ "somedude" f } } clone >>participants ] keep
|
||||
H{ { "somedude2" +normal+ }
|
||||
{ "somedude" +normal+ } } clone >>participants ] keep
|
||||
] dip set-at ]
|
||||
[ connect-irc ]
|
||||
[ drop 0.1 seconds sleep ]
|
||||
|
@ -159,3 +159,17 @@ IN: irc.client.tests
|
|||
[ terminate-irc ]
|
||||
} cleave
|
||||
] unit-test
|
||||
|
||||
! Namelist notification
|
||||
{ T{ participant-changed f f f } } [
|
||||
{ ":ircserver.net 353 factorbot @ #factortest :@factorbot "
|
||||
":ircserver.net 366 factorbot #factortest :End of /NAMES list." } make-client
|
||||
{ [ "factorbot" set-nick ]
|
||||
[ listeners>>
|
||||
[ "#factortest" [ <irc-channel-listener> ] keep ] dip set-at ]
|
||||
[ connect-irc ]
|
||||
[ drop 0.1 seconds sleep ]
|
||||
[ listeners>> [ "#factortest" ] dip at [ read-message drop ] [ read-message ] bi ]
|
||||
[ terminate-irc ]
|
||||
} cleave
|
||||
] unit-test
|
|
@ -220,7 +220,7 @@ M: privmsg handle-incoming-irc ( privmsg -- )
|
|||
M: join handle-incoming-irc ( join -- )
|
||||
{ [ maybe-forward-join ]
|
||||
[ dup trailing>> to-listener ]
|
||||
[ [ drop f ] [ prefix>> parse-name ] [ trailing>> ] tri add-participant ]
|
||||
[ [ drop +normal+ ] [ prefix>> parse-name ] [ trailing>> ] tri add-participant ]
|
||||
[ handle-participant-change ]
|
||||
} cleave ;
|
||||
|
||||
|
@ -252,8 +252,10 @@ M: quit handle-incoming-irc ( quit -- )
|
|||
[ >nick/mode 2array ] map >hashtable ;
|
||||
|
||||
M: names-reply handle-incoming-irc ( names-reply -- )
|
||||
[ names-reply>participants ] [ channel>> listener> ] bi
|
||||
[ (>>participants) ] [ drop ] if* ;
|
||||
[ names-reply>participants ] [ channel>> listener> ] bi [
|
||||
[ (>>participants) ]
|
||||
[ [ f f <participant-changed> ] dip name>> to-listener ] bi
|
||||
] [ drop ] if* ;
|
||||
|
||||
M: irc-broadcasted-message handle-incoming-irc ( irc-broadcasted-message -- )
|
||||
broadcast-message-to-listeners ;
|
||||
|
|
|
@ -40,8 +40,18 @@ mode new
|
|||
"ircserver.net" >>prefix
|
||||
"MODE" >>command
|
||||
{ "#factortest" "+ns" } >>parameters
|
||||
"#factortest" >>channel
|
||||
"#factortest" >>channel
|
||||
"+ns" >>mode
|
||||
1array
|
||||
[ ":ircserver.net MODE #factortest +ns"
|
||||
parse-irc-line f >>timestamp ] unit-test
|
||||
|
||||
nick new
|
||||
":someuser!n=user@some.where NICK :someuser2" >>line
|
||||
"someuser!n=user@some.where" >>prefix
|
||||
"NICK" >>command
|
||||
{ } >>parameters
|
||||
"someuser2" >>trailing
|
||||
1array
|
||||
[ ":someuser!n=user@some.where NICK :someuser2"
|
||||
parse-irc-line f >>timestamp ] unit-test
|
|
@ -12,6 +12,7 @@ TUPLE: ping < irc-message ;
|
|||
TUPLE: join < irc-message ;
|
||||
TUPLE: part < irc-message channel ;
|
||||
TUPLE: quit < irc-message ;
|
||||
TUPLE: nick < irc-message ;
|
||||
TUPLE: privmsg < irc-message name ;
|
||||
TUPLE: kick < irc-message channel who ;
|
||||
TUPLE: roomlist < irc-message channel names ;
|
||||
|
@ -34,6 +35,7 @@ M: ping irc-command-string ( ping -- string ) drop "PING" ;
|
|||
M: join irc-command-string ( join -- string ) drop "JOIN" ;
|
||||
M: part irc-command-string ( part -- string ) drop "PART" ;
|
||||
M: quit irc-command-string ( quit -- string ) drop "QUIT" ;
|
||||
M: nick irc-command-string ( nick -- string ) drop "NICK" ;
|
||||
M: privmsg irc-command-string ( privmsg -- string ) drop "PRIVMSG" ;
|
||||
M: notice irc-command-string ( notice -- string ) drop "NOTICE" ;
|
||||
M: mode irc-command-string ( mode -- string ) drop "MODE" ;
|
||||
|
@ -46,6 +48,7 @@ M: ping irc-command-parameters ( ping -- seq ) drop { } ;
|
|||
M: join irc-command-parameters ( join -- seq ) drop { } ;
|
||||
M: part irc-command-parameters ( part -- seq ) name>> 1array ;
|
||||
M: quit irc-command-parameters ( quit -- seq ) drop { } ;
|
||||
M: nick irc-command-parameters ( nick -- seq ) drop { } ;
|
||||
M: privmsg irc-command-parameters ( privmsg -- seq ) name>> 1array ;
|
||||
M: notice irc-command-parameters ( norice -- seq ) type>> 1array ;
|
||||
M: kick irc-command-parameters ( kick -- seq )
|
||||
|
@ -110,6 +113,7 @@ PRIVATE>
|
|||
{ "353" [ names-reply ] }
|
||||
{ "JOIN" [ join ] }
|
||||
{ "PART" [ part ] }
|
||||
{ "NICK" [ nick ] }
|
||||
{ "PRIVMSG" [ privmsg ] }
|
||||
{ "QUIT" [ quit ] }
|
||||
{ "MODE" [ mode ] }
|
||||
|
|
Loading…
Reference in New Issue