package irclogs import ( "bufio" "fmt" "log" "net" "net/textproto" ) type IRCClient struct { Host string port int nick string pass string caps []string conn net.Conn } func NewIRCClient(host string, port int, nick string, pass string, capabilities []string) IRCClient { return IRCClient{ Host: host, port: port, nick: nick, pass: pass, caps: capabilities, } } func (c *IRCClient) Connect() (err error) { conn, err := net.Dial("tcp", net.JoinHostPort(c.Host, fmt.Sprintf("%d", c.port))) if err != nil { return } c.conn = conn c.authorize() tp := textproto.NewReader(bufio.NewReader(c.conn)) for { message, err := tp.ReadLine() if err != nil { log.Panicf("Failed to read a line: %v\n", err) } log.Printf("IRC message: %s\n", message) } } func (c *IRCClient) authorize() { c.SendRaw(fmt.Sprintf("NICK %s", c.nick)) c.SendRaw(fmt.Sprintf("PASS %s", c.pass)) for _, cap := range c.caps { c.SendRaw(fmt.Sprintf("CAP REQ :%s", cap)) } } func (c *IRCClient) SendRaw(message string) { fmt.Fprintf(c.conn, "%s\r\n", message) }