You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

main.go 1.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package main
  2. import (
  3. "crypto/tls"
  4. "github.com/irccloud/irccat/tcplistener"
  5. "github.com/juju/loggo"
  6. "github.com/spf13/viper"
  7. "github.com/thoj/go-ircevent"
  8. )
  9. var log = loggo.GetLogger("main")
  10. type IRCCat struct {
  11. irc *irc.Connection
  12. tcp *tcplistener.TCPListener
  13. }
  14. func main() {
  15. loggo.ConfigureLoggers("<root>=DEBUG")
  16. viper.SetConfigName("irccat")
  17. viper.AddConfigPath("/etc")
  18. viper.AddConfigPath(".")
  19. var err error
  20. err = viper.ReadInConfig()
  21. if err != nil {
  22. return
  23. }
  24. irccat := IRCCat{}
  25. irccat.tcp, err = tcplistener.Bind()
  26. if err != nil {
  27. return
  28. }
  29. err = irccat.connectIRC()
  30. if err != nil {
  31. log.Criticalf("Error connecting to IRC server: %s", err)
  32. return
  33. }
  34. irccat.tcp.Run(irccat.irc)
  35. irccat.irc.Loop()
  36. }
  37. func (i *IRCCat) connectIRC() error {
  38. irccon := irc.IRC(viper.GetString("irc.nick"), viper.GetString("irc.realname"))
  39. irccon.UseTLS = viper.GetBool("irc.tls")
  40. if viper.GetBool("irc.tls_skip_verify") {
  41. irccon.TLSConfig = &tls.Config{InsecureSkipVerify: true}
  42. }
  43. err := irccon.Connect(viper.GetString("irc.server"))
  44. if err != nil {
  45. return err
  46. }
  47. irccon.AddCallback("001", i.handleWelcome)
  48. i.irc = irccon
  49. return nil
  50. }
  51. func (i *IRCCat) handleWelcome(e *irc.Event) {
  52. for _, channel := range viper.GetStringSlice("irc.channels") {
  53. i.irc.Join(channel)
  54. }
  55. }