Add support for RPL_VISIBLEHOST
This commit is contained in:
parent
b0dbb3cef1
commit
78d9a84a6f
@ -1132,6 +1132,17 @@ func (dc *downstreamConn) updateNick() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dc *downstreamConn) updateHost() {
|
||||||
|
if uc := dc.upstream(); uc != nil && uc.hostname != "" && uc.hostname != dc.hostname {
|
||||||
|
dc.SendMessage(&irc.Message{
|
||||||
|
Prefix: dc.prefix(),
|
||||||
|
Command: rpl_visiblehost,
|
||||||
|
Params: []string{dc.nick, uc.hostname, "is now your visible host"},
|
||||||
|
})
|
||||||
|
dc.hostname = uc.hostname
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (dc *downstreamConn) updateRealname() {
|
func (dc *downstreamConn) updateRealname() {
|
||||||
if uc := dc.upstream(); uc != nil && uc.realname != dc.realname && dc.caps.IsEnabled("setname") {
|
if uc := dc.upstream(); uc != nil && uc.realname != dc.realname && dc.caps.IsEnabled("setname") {
|
||||||
dc.SendMessage(&irc.Message{
|
dc.SendMessage(&irc.Message{
|
||||||
@ -1471,6 +1482,7 @@ func (dc *downstreamConn) welcome(ctx context.Context) error {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dc.updateHost()
|
||||||
dc.updateRealname()
|
dc.updateRealname()
|
||||||
dc.updateAccount()
|
dc.updateAccount()
|
||||||
|
|
||||||
|
1
irc.go
1
irc.go
@ -19,6 +19,7 @@ const (
|
|||||||
rpl_topicwhotime = "333"
|
rpl_topicwhotime = "333"
|
||||||
rpl_whospcrpl = "354"
|
rpl_whospcrpl = "354"
|
||||||
rpl_whoisaccount = "330"
|
rpl_whoisaccount = "330"
|
||||||
|
rpl_visiblehost = "396"
|
||||||
err_invalidcapcmd = "410"
|
err_invalidcapcmd = "410"
|
||||||
|
|
||||||
// https://ircv3.net/specs/extensions/bot-mode
|
// https://ircv3.net/specs/extensions/bot-mode
|
||||||
|
37
upstream.go
37
upstream.go
@ -122,6 +122,7 @@ type upstreamConn struct {
|
|||||||
nickCM string
|
nickCM string
|
||||||
username string
|
username string
|
||||||
realname string
|
realname string
|
||||||
|
hostname string
|
||||||
modes userModes
|
modes userModes
|
||||||
channels upstreamChannelCasemapMap
|
channels upstreamChannelCasemapMap
|
||||||
caps capRegistry
|
caps capRegistry
|
||||||
@ -637,18 +638,52 @@ func (uc *upstreamConn) handleMessage(ctx context.Context, msg *irc.Message) err
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
case irc.RPL_LOGGEDIN:
|
case irc.RPL_LOGGEDIN:
|
||||||
if err := parseMessageParams(msg, nil, nil, &uc.account); err != nil {
|
var rawPrefix string
|
||||||
|
if err := parseMessageParams(msg, nil, &rawPrefix, &uc.account); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
prefix := irc.ParsePrefix(rawPrefix)
|
||||||
|
uc.username = prefix.User
|
||||||
|
uc.hostname = prefix.Host
|
||||||
|
|
||||||
uc.logger.Printf("logged in with account %q", uc.account)
|
uc.logger.Printf("logged in with account %q", uc.account)
|
||||||
uc.forEachDownstream(func(dc *downstreamConn) {
|
uc.forEachDownstream(func(dc *downstreamConn) {
|
||||||
dc.updateAccount()
|
dc.updateAccount()
|
||||||
|
dc.updateHost()
|
||||||
})
|
})
|
||||||
case irc.RPL_LOGGEDOUT:
|
case irc.RPL_LOGGEDOUT:
|
||||||
|
var rawPrefix string
|
||||||
|
if err := parseMessageParams(msg, nil, &rawPrefix); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
uc.account = ""
|
uc.account = ""
|
||||||
|
|
||||||
|
prefix := irc.ParsePrefix(rawPrefix)
|
||||||
|
uc.username = prefix.User
|
||||||
|
uc.hostname = prefix.Host
|
||||||
|
|
||||||
uc.logger.Printf("logged out")
|
uc.logger.Printf("logged out")
|
||||||
uc.forEachDownstream(func(dc *downstreamConn) {
|
uc.forEachDownstream(func(dc *downstreamConn) {
|
||||||
dc.updateAccount()
|
dc.updateAccount()
|
||||||
|
dc.updateHost()
|
||||||
|
})
|
||||||
|
case rpl_visiblehost:
|
||||||
|
var rawHost string
|
||||||
|
if err := parseMessageParams(msg, nil, &rawHost); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
parts := strings.SplitN(rawHost, "@", 2)
|
||||||
|
if len(parts) == 2 {
|
||||||
|
uc.username, uc.hostname = parts[0], parts[1]
|
||||||
|
} else {
|
||||||
|
uc.hostname = rawHost
|
||||||
|
}
|
||||||
|
|
||||||
|
uc.forEachDownstream(func(dc *downstreamConn) {
|
||||||
|
dc.updateHost()
|
||||||
})
|
})
|
||||||
case irc.ERR_NICKLOCKED, irc.RPL_SASLSUCCESS, irc.ERR_SASLFAIL, irc.ERR_SASLTOOLONG, irc.ERR_SASLABORTED:
|
case irc.ERR_NICKLOCKED, irc.RPL_SASLSUCCESS, irc.ERR_SASLFAIL, irc.ERR_SASLTOOLONG, irc.ERR_SASLABORTED:
|
||||||
var info string
|
var info string
|
||||||
|
Loading…
Reference in New Issue
Block a user