mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-25 21:39:25 +01:00
Implement nick changing.
This commit is contained in:
parent
99364e8b5f
commit
e7734f572b
@ -2,6 +2,7 @@ package irc
|
||||
|
||||
import (
|
||||
"net"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
@ -46,3 +47,20 @@ func (c *Client) UModeString() string {
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (c *Client) HasNick() bool {
|
||||
return c.nick != ""
|
||||
}
|
||||
|
||||
func (c *Client) HasUser() bool {
|
||||
return c.username != ""
|
||||
}
|
||||
|
||||
func (c *Client) Hostname() string {
|
||||
addr := c.conn.RemoteAddr().String()
|
||||
index := strings.LastIndex(addr, ":")
|
||||
if index != -1 {
|
||||
return addr[0:index]
|
||||
}
|
||||
return addr
|
||||
}
|
||||
|
@ -9,12 +9,17 @@ func (m *NickMessage) Handle(s *Server, c *Client) {
|
||||
c.send <- ErrNickNameInUse(m.nickname)
|
||||
return
|
||||
}
|
||||
oldNick := c.nick
|
||||
if c.nick != "" {
|
||||
delete(s.nicks, c.nick)
|
||||
}
|
||||
c.nick = m.nickname
|
||||
s.nicks[c.nick] = c
|
||||
tryRegister(s, c)
|
||||
if c.registered {
|
||||
c.send <- ReplyNick(oldNick, c)
|
||||
} else {
|
||||
tryRegister(s, c)
|
||||
}
|
||||
}
|
||||
|
||||
func (m *UserMessage) Handle(s *Server, c *Client) {
|
||||
@ -56,9 +61,9 @@ func (m *ModeMessage) Handle(s *Server, c *Client) {
|
||||
}
|
||||
|
||||
func tryRegister(s *Server, c *Client) {
|
||||
if (!c.registered && c.nick != "" && c.username != "") {
|
||||
if (!c.registered && c.HasNick() && c.HasUser()) {
|
||||
c.registered = true
|
||||
c.send <- ReplyWelcome(c.Nick(), c.username, "localhost")
|
||||
c.send <- ReplyWelcome(c)
|
||||
c.send <- ReplyYourHost(c.Nick(), "irc.jlatt.com")
|
||||
c.send <- ReplyCreated(c.Nick(), "2012/04/07")
|
||||
c.send <- ReplyMyInfo(c.Nick(), "irc.jlatt.com")
|
||||
|
@ -11,7 +11,8 @@ const (
|
||||
RPL_CREATED = "003"
|
||||
RPL_MYINFO = "004"
|
||||
RPL_UMODEIS = "221"
|
||||
RPL_NONE = "300"
|
||||
RPL_INFO = "371"
|
||||
RPL_NICK = "NICK"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -4,8 +4,12 @@ import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func ReplyWelcome(nick string, user string, host string) string {
|
||||
return fmt.Sprintf("%s %s Welcome to the Internet Relay Network %s!%s@%s", RPL_WELCOME, nick, nick, user, host)
|
||||
func ReplyNick(oldNick string, c *Client) string {
|
||||
return fmt.Sprintf(":%s!%s@%s %s :%s", oldNick, c.username, c.Hostname(), RPL_NICK, c.Nick())
|
||||
}
|
||||
|
||||
func ReplyWelcome(c *Client) string {
|
||||
return fmt.Sprintf("%s %s Welcome to the Internet Relay Network %s!%s@%s", RPL_WELCOME, c.Nick(), c.Nick(), c.username, c.Hostname())
|
||||
}
|
||||
|
||||
func ReplyYourHost(nick string, server string) string {
|
||||
|
Loading…
Reference in New Issue
Block a user