61 lines
1.0 KiB
Go
61 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"net"
|
|
|
|
irc "gopkg.in/sorcix/irc.v2"
|
|
"log"
|
|
"strconv"
|
|
)
|
|
|
|
type Client struct {
|
|
Entity
|
|
|
|
ssl bool
|
|
nick string
|
|
user string
|
|
host string
|
|
|
|
conn net.Conn
|
|
writebuffer chan *irc.Message
|
|
|
|
reader *irc.Decoder
|
|
writer *irc.Encoder
|
|
|
|
capHostInNames bool
|
|
}
|
|
|
|
func (c *Client) getPrefix() *irc.Prefix {
|
|
return &irc.Prefix{Name: c.nick, User: c.user, Host: c.host}
|
|
}
|
|
|
|
func (c *Client) write(msg *irc.Message) {
|
|
c.writebuffer <- msg
|
|
}
|
|
|
|
func (c *Client) handleWrite() {
|
|
for msg := range c.writebuffer {
|
|
c.Lock()
|
|
addnick := false
|
|
if _, err := strconv.Atoi(msg.Command); err == nil {
|
|
addnick = true
|
|
} else if msg.Command == irc.CAP {
|
|
addnick = true
|
|
}
|
|
|
|
if addnick {
|
|
msg.Params = append([]string{c.nick}, msg.Params...)
|
|
}
|
|
|
|
if len(msg.Command) >= 4 && msg.Command[0:4] != irc.PING && msg.Command[0:4] != irc.PONG {
|
|
log.Println(c.identifier, "->", msg)
|
|
}
|
|
c.writer.Encode(msg)
|
|
c.Unlock()
|
|
}
|
|
}
|
|
|
|
func (c *Client) sendNotice(notice string) {
|
|
c.write(&irc.Message{&anonirc, irc.NOTICE, []string{c.nick, "*** " + notice}})
|
|
}
|