105 lines
2.9 KiB
Markdown
105 lines
2.9 KiB
Markdown
|
# go-irc
|
||
|
|
||
|
[![GoDoc](https://img.shields.io/badge/doc-GoDoc-blue.svg)](https://godoc.org/github.com/go-irc/irc)
|
||
|
[![Build Status](https://img.shields.io/travis/go-irc/irc.svg)](https://travis-ci.org/go-irc/irc)
|
||
|
[![Coverage Status](https://img.shields.io/coveralls/go-irc/irc.svg)](https://coveralls.io/github/go-irc/irc?branch=master)
|
||
|
|
||
|
This package was originally created to only handle message parsing,
|
||
|
but has since been expanded to include a small abstraction around a
|
||
|
connection and a simple client.
|
||
|
|
||
|
This library is not designed to hide any of the IRC elements from
|
||
|
you. If you just want to build a simple chat bot and don't want to
|
||
|
deal with IRC in particular, there are a number of other libraries
|
||
|
which provide a more full featured client if that's what you're
|
||
|
looking for.
|
||
|
|
||
|
This library is meant to stay as simple as possible so it can be a
|
||
|
building block for other packages.
|
||
|
|
||
|
This library aims for API compatibility whenever possible. New
|
||
|
functions and other additions will most likely not result in a major
|
||
|
version increase unless they break the API. This library aims to
|
||
|
follow the semver recommendations mentioned on gopkg.in.
|
||
|
|
||
|
Due to complications in how to support x/net/context vs the built-in context
|
||
|
package, only go 1.7+ is officially supported.
|
||
|
|
||
|
## Import Paths
|
||
|
|
||
|
All development happens on the `master` branch and when features are
|
||
|
considered stable enough, a new release will be tagged.
|
||
|
|
||
|
As a result of this, there are multiple import locations.
|
||
|
|
||
|
* `gopkg.in/irc.v2` should be used to develop against the commits
|
||
|
tagged as stable
|
||
|
* `github.com/go-irc/irc` should be used to develop against the master branch
|
||
|
|
||
|
## Development
|
||
|
|
||
|
In order to run the tests, make sure all submodules are up to date. If you are
|
||
|
just using this library, these are not needed.
|
||
|
|
||
|
## Example
|
||
|
|
||
|
```go
|
||
|
package main
|
||
|
|
||
|
import (
|
||
|
"log"
|
||
|
"net"
|
||
|
|
||
|
"github.com/belak/irc"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
conn, err := net.Dial("tcp", "chat.freenode.net:6667")
|
||
|
if err != nil {
|
||
|
log.Fatalln(err)
|
||
|
}
|
||
|
|
||
|
config := irc.ClientConfig{
|
||
|
Nick: "i_have_a_nick",
|
||
|
Pass: "password",
|
||
|
User: "username",
|
||
|
Name: "Full Name",
|
||
|
Handler: irc.HandlerFunc(func(c *irc.Client, m *irc.Message) {
|
||
|
if m.Command == "001" {
|
||
|
// 001 is a welcome event, so we join channels there
|
||
|
c.Write("JOIN #bot-test-chan")
|
||
|
} else if m.Command == "PRIVMSG" && m.FromChannel() {
|
||
|
// Create a handler on all messages.
|
||
|
c.WriteMessage(&irc.Message{
|
||
|
Command: "PRIVMSG",
|
||
|
Params: []string{
|
||
|
m.Params[0],
|
||
|
m.Trailing(),
|
||
|
},
|
||
|
})
|
||
|
}
|
||
|
}),
|
||
|
}
|
||
|
|
||
|
// Create the client
|
||
|
client := irc.NewClient(conn, config)
|
||
|
err = client.Run()
|
||
|
if err != nil {
|
||
|
log.Fatalln(err)
|
||
|
}
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Major Version Changes
|
||
|
|
||
|
### v1
|
||
|
|
||
|
Initial release
|
||
|
|
||
|
### v2
|
||
|
|
||
|
- CTCP messages will no longer be rewritten. The decision was made that this
|
||
|
library should pass through all messages without mangling them.
|
||
|
- Remove Message.FromChannel as this is not always accurate, while
|
||
|
Client.FromChannel should always be accurate.
|