4.3 KiB
girc -- A flexible IRC library for Go
Features
-
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]
-
Channel and user tracking. Easily find what users are in a channel, if a user is away, or if they are authenticated.
-
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!
TODO
- IRCv3 spec -- details:
- ensure types
User
andChannel
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. - write more function-specific examples as the api becomes much more stable
- client should support ping tracking (sending
PING
's to the server)- with this, we can potentially find lag.
Client.Lag()
would be useful - allow support for changing the frequency of this?
- with this, we can potentially find lag.
- users need to be exposed in state some how (other than
GetChannels()
) MODE
tracking on a per-channel basisClient.AddTmpCallback()
for one time use callbacks?- allow support for proxy URLs (passing to
golang.org/x/net/proxy
?) - allow users to specify a local/bind address using
net.Dialer{}.LocalAddr
- add more generic helpers:
Away()
,Invite()
,Kick()
,Oper()
, genericPing()
andPong()
,VHost()
,Whois()
andWho()
Installing
$ go get -u github.com/lrstanley/girc
Examples
See the examples within the documentation for real-world usecases.
Contributing
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.
- Always test using the latest Go version.
- Always use
gofmt
before committing anything. - Always have proper documentation before committing.
- 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.
- Also see golang/go/wiki/CodeReviewComments
License
The MIT License (MIT); Copyright (c) Liam Stanley <me@liamstanley.io>