Mirror of github.com/gissleh/irc
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.

58 lines
1.3 KiB

  1. package main
  2. import (
  3. "bufio"
  4. "context"
  5. "encoding/json"
  6. "flag"
  7. "fmt"
  8. "os"
  9. "strings"
  10. "git.aiterp.net/gisle/irc"
  11. )
  12. var flagNick = flag.String("nick", "Test", "The client nick")
  13. var flagAlts = flag.String("alts", "Test2,Test3,Test4,Test5", "Alternative nicks to use")
  14. var flagUser = flag.String("user", "test", "The client user/ident")
  15. var flagPass = flag.String("pass", "", "The server password")
  16. var flagServer = flag.String("server", "localhost:6667", "The server to connect to")
  17. var flagSsl = flag.Bool("ssl", false, "Wether to connect securely")
  18. func main() {
  19. ctx, cancel := context.WithCancel(context.Background())
  20. defer cancel()
  21. flag.Parse()
  22. client := irc.New(ctx, irc.Config{
  23. Nick: *flagNick,
  24. User: *flagUser,
  25. Alternatives: strings.Split(*flagAlts, ","),
  26. Password: *flagPass,
  27. })
  28. err := client.Connect(*flagServer, *flagSsl)
  29. if err != nil {
  30. fmt.Fprintf(os.Stderr, "Failed to connect: %s", err)
  31. }
  32. irc.Handle(func(event *irc.Event, client *irc.Client) {
  33. json, err := json.MarshalIndent(event, "", " ")
  34. if err != nil {
  35. return
  36. }
  37. fmt.Println(string(json))
  38. })
  39. reader := bufio.NewReader(os.Stdin)
  40. for {
  41. line, err := reader.ReadString('\n')
  42. if err != nil {
  43. break
  44. }
  45. client.EmitInput(string(line[:len(line)-1]), client.Status())
  46. }
  47. }