2017-01-12 13:53:56 +00:00
|
|
|
<p align="center"><a href="https://godoc.org/github.com/lrstanley/girc"><img width="600" src="https://i.imgur.com/Wh6otgh.png"></a></p>
|
|
|
|
<p align="center">girc -- A flexible IRC library for Go</p>
|
|
|
|
<p align="center">
|
|
|
|
<a href="https://travis-ci.org/lrstanley/girc"><img src="https://travis-ci.org/lrstanley/girc.svg?branch=master" alt="Build Status"></a>
|
|
|
|
<a href="https://godoc.org/github.com/lrstanley/girc"><img src="https://godoc.org/github.com/lrstanley/girc?status.png" alt="GoDoc"></a>
|
|
|
|
<a href="https://goreportcard.com/report/github.com/lrstanley/girc"><img src="https://goreportcard.com/badge/github.com/lrstanley/girc" alt="Go Report Card"></a>
|
|
|
|
<a href="http://byteirc.org/channel/L"><img src="https://img.shields.io/badge/ByteIRC-%23L-blue.svg" alt="IRC Chat"></a>
|
|
|
|
<a href="https://github.com/lrstanley/girc/issues"><img src="https://img.shields.io/github/issues/lrstanley/girc.svg" alt="GitHub Issues"></a>
|
|
|
|
<a href="https://raw.githubusercontent.com/lrstanley/girc/master/LICENSE"><img src="https://img.shields.io/github/license/lrstanley/girc.svg" alt="License"></a>
|
|
|
|
</p>
|
2016-11-14 07:27:27 +00:00
|
|
|
|
2016-11-13 08:30:43 +00:00
|
|
|
## Features
|
|
|
|
|
2017-01-12 09:19:35 +00:00
|
|
|
- Focuses on simplicity, yet tries to still be flexible.
|
|
|
|
- Only requires standard library packages.
|
|
|
|
- Event based triggering/responses (and CTCP too!).
|
|
|
|
- Documentation is mostly on par.
|
|
|
|
- Full support for the IRCv3 spec. [**WIP**]
|
2017-01-19 08:40:44 +00:00
|
|
|
- Channel and user tracking. Easily find what users are in a channel, if a
|
|
|
|
user is away, or if they are authenticated.
|
2017-01-12 09:19:35 +00:00
|
|
|
- Client state/capability tracking. Easy methods to access capability data.
|
|
|
|
- Built-in support for things you would commmonly have to implement yourself.
|
|
|
|
- Nick collision detection and prevention.
|
|
|
|
- Event/message rate limiting.
|
|
|
|
- Channel, nick, and user validation on connection methods.
|
|
|
|
- CTCP handling and auto-responses.
|
|
|
|
|
|
|
|
- At this time, **expect breaking changes to occur frequently**. girc has **not hit version 1.0.0 yet!**
|
2016-11-13 08:30:43 +00:00
|
|
|
|
2016-11-18 04:20:42 +00:00
|
|
|
## TODO
|
|
|
|
|
2016-12-30 13:51:31 +00:00
|
|
|
- [ ] IRCv3 spec -- [details](http://ircv3.net):
|
|
|
|
- [ ] [multi-prefix](http://ircv3.net/specs/extensions/multi-prefix-3.1.html)
|
|
|
|
- [ ] [sasl](http://ircv3.net/specs/extensions/sasl-3.2.html)
|
|
|
|
- [ ] [userhost-in-names](http://ircv3.net/specs/extensions/userhost-in-names-3.2.html)
|
2017-01-19 08:40:44 +00:00
|
|
|
- [ ] [batches?](http://ircv3.net/specs/extensions/batch-3.2.html) -- add
|
|
|
|
a new callback type which supports a list of events, which is called
|
|
|
|
upon a batch listener?
|
2016-12-30 13:51:31 +00:00
|
|
|
- [ ] [extended-join](http://ircv3.net/specs/extensions/extended-join-3.1.html)
|
2017-01-19 08:40:44 +00:00
|
|
|
- [ ] ensure types `User` and `Channel` don't have any unexported fields, and
|
|
|
|
that when they are given publically, it's not a pointer to internal
|
|
|
|
state.
|
|
|
|
- [ ] track with `NAMES` as well? would require rewrite of user existance
|
|
|
|
logic, could also help track user modes.
|
2016-12-09 12:10:33 +00:00
|
|
|
- [ ] write more function-specific examples as the api becomes much more stable
|
2016-11-18 04:20:42 +00:00
|
|
|
- [ ] client should support ping tracking (sending `PING`'s to the server)
|
2016-11-25 00:18:39 +00:00
|
|
|
- [ ] with this, we can potentially find lag. `Client.Lag()` would be useful
|
2017-01-09 11:40:58 +00:00
|
|
|
- [ ] allow support for changing the frequency of this?
|
2017-01-12 09:19:35 +00:00
|
|
|
- [ ] users need to be exposed in state some how (other than `GetChannels()`)
|
2016-11-18 04:26:02 +00:00
|
|
|
- [ ] `MODE` tracking on a per-channel basis
|
2016-11-18 20:17:09 +00:00
|
|
|
- [ ] `Client.AddTmpCallback()` for one time use callbacks?
|
2017-01-09 11:40:58 +00:00
|
|
|
- [ ] allow support for proxy URLs (passing to `golang.org/x/net/proxy`?)
|
|
|
|
- [ ] allow users to specify a local/bind address using `net.Dialer{}.LocalAddr`
|
2017-01-19 08:40:44 +00:00
|
|
|
- [ ] add more generic helpers: `Away()`, `Invite()`, `Kick()`, `Oper()`,
|
|
|
|
generic `Ping()` and `Pong()`, `VHost()`, `Whois()` and `Who()`
|
2016-11-18 04:20:42 +00:00
|
|
|
|
2016-11-13 08:30:43 +00:00
|
|
|
## Installing
|
|
|
|
|
2016-12-07 05:15:02 +00:00
|
|
|
$ go get -u github.com/lrstanley/girc
|
2016-11-13 08:36:02 +00:00
|
|
|
|
|
|
|
## Examples
|
|
|
|
|
2017-01-19 08:40:44 +00:00
|
|
|
See [the examples](https://godoc.org/github.com/lrstanley/girc#example-package)
|
|
|
|
within the documentation for real-world usecases.
|
2016-11-14 07:27:27 +00:00
|
|
|
|
|
|
|
## Contributing
|
|
|
|
|
2017-01-19 08:40:44 +00:00
|
|
|
Below are a few guidelines if you would like to contribute. Keep the code
|
|
|
|
clean, standardized, and much of the quality should match Golang's standard
|
|
|
|
library and common idioms.
|
2016-11-14 07:27:27 +00:00
|
|
|
|
|
|
|
* Always test using the latest Go version.
|
|
|
|
* Always use `gofmt` before committing anything.
|
|
|
|
* Always have proper documentation before committing.
|
2017-01-19 08:40:44 +00:00
|
|
|
* Keep the same whitespacing, documentation, and newline format as the
|
|
|
|
rest of the project.
|
|
|
|
* Only use 3rd party libraries if necessary. If only a small portion of
|
|
|
|
the library is needed, simply rewrite it within the library to prevent
|
|
|
|
useless imports.
|
2016-11-14 07:27:27 +00:00
|
|
|
* Also see [golang/go/wiki/CodeReviewComments](https://github.com/golang/go/wiki/CodeReviewComments)
|
|
|
|
|
|
|
|
## License
|
|
|
|
|
|
|
|
```
|
|
|
|
The MIT License (MIT); Copyright (c) Liam Stanley <me@liamstanley.io>
|
|
|
|
```
|