girc-atomic/README.md
2017-01-19 03:40:44 -05:00

4.4 KiB

girc -- A flexible IRC library for Go

Build Status GoDoc Go Report Card IRC Chat GitHub Issues License

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 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.
  • 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?
  • users need to be exposed in state some how (other than GetChannels())
  • MODE tracking on a per-channel basis
  • Client.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(), generic Ping() and Pong(), VHost(), Whois() and Who()

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>