@@ -395,3 +395,51 @@ def on_away(conn, nick, irc_paramlist):
395395 reason = None
396396
397397 conn .memory ["users" ][nick ].update (is_away = (reason is not None ), away_message = reason )
398+
399+
400+ @hook .irc_raw ('352' )
401+ def on_who (conn , irc_paramlist ):
402+ _ , ident , host , server , nick , status , realname = irc_paramlist
403+ realname = realname .split (None , 1 )[1 ]
404+ user = conn .memory ["users" ][nick ]
405+ status = list (status )
406+ is_away = status .pop (0 ) == "G"
407+ is_oper = status [:1 ] == "*"
408+ user .update (
409+ ident = ident ,
410+ host = host ,
411+ server = server ,
412+ realname = realname ,
413+ is_away = is_away ,
414+ is_oper = is_oper ,
415+ )
416+
417+
418+ @hook .irc_raw ('311' )
419+ def on_whois_name (conn , irc_paramlist ):
420+ _ , nick , ident , host , _ , realname = irc_paramlist
421+ conn .memory ["users" ][nick ].update (ident = ident , host = host , realname = realname )
422+
423+
424+ @hook .irc_raw ('330' )
425+ def on_whois_acct (conn , irc_paramlist ):
426+ _ , nick , acct = irc_paramlist [:2 ]
427+ conn .memory ["users" ][nick ]["account" ] = acct
428+
429+
430+ @hook .irc_raw ('301' )
431+ def on_whois_away (conn , irc_paramlist ):
432+ _ , nick , msg = irc_paramlist
433+ conn .memory ["users" ][nick ].update (is_away = True , away_message = msg )
434+
435+
436+ @hook .irc_raw ('312' )
437+ def on_whois_server (conn , irc_paramlist ):
438+ _ , nick , server , _ = irc_paramlist
439+ conn .memory ["users" ][nick ].update (server = server )
440+
441+
442+ @hook .irc_raw ('313' )
443+ def on_whois_oper (conn , irc_paramlist ):
444+ nick = irc_paramlist [1 ]
445+ conn .memory ["users" ][nick ].update (is_oper = True )
0 commit comments