1
0
Fork 0
forked from External/ergo

Implement mode [+-]i.

This commit is contained in:
Jeremy Latt 2012-04-17 20:24:26 -07:00
parent 8f0bd1b07a
commit 99364e8b5f
7 changed files with 94 additions and 29 deletions

View file

@ -1,5 +1,9 @@
package irc
type Message interface {
Handle(s *Server, c *Client)
}
func (m *NickMessage) Handle(s *Server, c *Client) {
if s.nicks[m.nickname] != nil {
c.send <- ErrNickNameInUse(m.nickname)
@ -24,6 +28,7 @@ func (m *UserMessage) Handle(s *Server, c *Client) {
func (m *QuitMessage) Handle(s *Server, c *Client) {
c.send <- MessageError()
c.conn.Close()
delete(s.nicks, c.nick)
}
@ -35,6 +40,21 @@ func (m *PingMessage) Handle(s *Server, c *Client) {
c.send <- MessagePong()
}
func (m *ModeMessage) Handle(s *Server, c *Client) {
if m.nickname != c.nick {
c.send <- ErrUsersDontMatch(c.Nick())
return
}
for _, mode := range m.modes {
if mode == "+i" {
c.invisible = true
} else if mode == "-i" {
c.invisible = false
}
}
c.send <- ReplyUModeIs(c)
}
func tryRegister(s *Server, c *Client) {
if (!c.registered && c.nick != "" && c.username != "") {
c.registered = true