<commit_before>GoIRC Client Framework
======================

### Acquiring and Building

Pretty simple, really:

	goinstall github.com/fluffle/goirc

You can build the test client also with:

	make
	./gobot

This will connect to freenode and join `#go-nuts` by default, so be careful ;-)

### Using the framework

Synopsis:

    import irc "github.com/fluffle/goirc/client"
    func main() {
        c := irc.New("nick", "ident", "real name")
        // Optionally, turn on debugging
        c.Debug = true
        // Optionally, enable SSL
        c.SSL = true

		// Add handlers to do things here!
		// e.g. join a channel on connect.
		c.AddHandler("connected",
			func(conn *irc.Conn, line *irc.Line) { conn.Join("#channel") })
	    
		// Tell client to connect
		if err := c.Connect("irc.freenode.net"); err != nil {
		    fmt.Printf("Connection error: %s\n", err.String())
	    }

		// Loop until client gets disconnected, printing any errors
        for c.Connected {
            if err := <-c.Err; err != nil {
                fmt.Printf("goirc error: %s", err.String())
            }
        }
    }

The test client provides a good (if basic) example of how to use the framework.
Reading `client/handlers.go` gives a more in-depth look at how handlers can be
written. Commands to be sent to the server (e.g. PRIVMSG) are methods of the
main `*Conn` struct, and can be found in `client/commands.go` (not all of the
possible IRC commands are implemented yet). Events are produced directly from
the messages from the IRC server, so you have to handle e.g. "332" for
`RPL_TOPIC` to get the topic for a channel.

The vast majority of handlers implemented within the framework deal with state
tracking of all nicks in any channels that the client is also present in. It's
likely that this state tracking will become optional in the near future.

### Misc.

Sorry the documentation is crap. Use the source, Luke.

[Feedback](mailto:<EMAIL>) on design decisions is welcome. I am
indebted to <NAME> for his work on
[go-bot](http://code.google.com/p/go-bot/source/browse/irc.go) which inspired
the re-organisation and channel-based communication structure of `*Conn.send()`<commit_msg>Update README, fix whitespace fail.<commit_after>GoIRC Client Framework
======================

### Acquiring and Building

Pretty simple, really:

	goinstall github.com/fluffle/goirc

You can build the test client also with:

	make
	./gobot

This will connect to freenode and join `#go-nuts` by default, so be careful ;-)

### Using the framework

Synopsis:

	import irc "github.com/fluffle/goirc/client"
	func main() {
		c := irc.New("nick", "ident", "real name")
		// Optionally, turn on debugging
		c.Debug = true
		// Optionally, enable SSL
		c.SSL = true

		// Add handlers to do things here!
		// e.g. join a channel on connect.
		c.AddHandler("connected",
			func(conn *irc.Conn, line *irc.Line) { conn.Join("#channel") })
		// And a signal on disconnect
		quit := make(chan bool)
		c.AddHandler("disconnected),
			func(conn *irc.Conn, line *irc.Line) { quit <- true }

		// Tell client to connect
		if err := c.Connect("irc.freenode.net"); err != nil {
			fmt.Printf("Connection error: %s\n", err.String())
		}

		// Wait for disconnect
		<-quit
	}

The test client provides a good (if basic) example of how to use the framework.
Reading `client/handlers.go` gives a more in-depth look at how handlers can be
written. Commands to be sent to the server (e.g. PRIVMSG) are methods of the
main `*Conn` struct, and can be found in `client/commands.go` (not all of the
possible IRC commands are implemented yet). Events are produced directly from
the messages from the IRC server, so you have to handle e.g. "332" for
`RPL_TOPIC` to get the topic for a channel.

The vast majority of handlers implemented within the framework deal with state
tracking of all nicks in any channels that the client is also present in. It's
likely that this state tracking will become optional in the near future.

### Misc.

Sorry the documentation is crap. Use the source, Luke.

[Feedback](mailto:<EMAIL>) on design decisions is welcome. I am
indebted to <NAME> for his work on
[go-bot](http://code.google.com/p/go-bot/source/browse/irc.go) which inspired
the re-organisation and channel-based communication structure of `*Conn.send()`
{'fraction_non_alphanumeric': 0.11258124419684308, 'fraction_numerical': 0.001392757660167131, 'mean_word_length': 3.3879837067209775, 'pattern_counts': {'":': 0, '<': 10, '<?xml version=': 0, '>': 7, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2688637', 'n_tokens_mistral': 1377, 'n_tokens_neox': 1269, 'n_words': 545}