The new logbot, not committed from the wrong terminal window this time.
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.

115 lines
2.3 KiB

6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
  1. package bot
  2. import (
  3. "log"
  4. "strings"
  5. "git.aiterp.net/gisle/irc"
  6. "git.aiterp.net/rpdata/logbot3/internal/config"
  7. )
  8. func handler(event *irc.Event, client *irc.Client) {
  9. bot, ok := client.Value(botKey).(*Bot)
  10. if !ok {
  11. return
  12. }
  13. switch event.Name() {
  14. // Handle bot loop
  15. case "hook.ready":
  16. {
  17. log.Println("Client is ready!")
  18. go bot.loop()
  19. }
  20. case "client.disconnect":
  21. {
  22. log.Println("Client disconnected!")
  23. bot.stopLoop()
  24. conf := config.Get().Server
  25. go bot.Connect(conf.Address, conf.SSL, 0)
  26. }
  27. // Log joins and leaves
  28. case "packet.join":
  29. {
  30. if client.Nick() == event.Nick {
  31. bot.addChannel(event.Arg(0))
  32. }
  33. log.Println("(JOIN)", event.Nick, "joined", event.Arg(0))
  34. }
  35. case "packet.part":
  36. {
  37. log.Println("(PART)", event.Nick, "left", event.Arg(0))
  38. }
  39. case "packet.quit":
  40. {
  41. log.Println("(QUIT)", event.Nick, "quit")
  42. }
  43. case "ctcp.action", "packet.privmsg":
  44. {
  45. if event.Nick == bot.client.Nick() {
  46. break
  47. }
  48. channel := event.ChannelTarget()
  49. if channel == nil {
  50. if event.Verb() == "action" {
  51. log.Printf("Message: * %s %s", event.Nick, event.Text)
  52. } else {
  53. log.Printf("Message: <%s> %s", event.Nick, event.Text)
  54. }
  55. break
  56. }
  57. account := ""
  58. if user, ok := bot.client.FindUser(event.Nick); ok {
  59. account = user.Account
  60. }
  61. kind := ""
  62. if event.Verb() == "action" {
  63. kind = "action"
  64. } else {
  65. if strings.HasPrefix(event.Nick, "=") {
  66. kind = "scene"
  67. } else {
  68. kind = "text"
  69. }
  70. }
  71. post := ChannelPost{
  72. Account: account,
  73. Kind: kind,
  74. Nick: event.Nick,
  75. Time: event.Time,
  76. Text: event.Text,
  77. }
  78. bot.handlePost(channel.Name(), post)
  79. }
  80. // Log notices
  81. case "packet.notice":
  82. {
  83. log.Printf("Message: -%s- %s", event.Nick, event.Text)
  84. }
  85. // Log initial numerics for debugging
  86. case "packet.001", "packet.002", "packet.003", "packet.251", "packet.255", "packet.265", "packet.266", "packet.250", "packet.375", "packet.372", "packet.376":
  87. {
  88. log.Printf("(%s) %s\n", event.Verb(), event.Text)
  89. }
  90. case "packet.005", "packet.254", "packet.cap", "packet.431", "packet.432", "packet.433", "packet.436":
  91. {
  92. log.Printf("(%s) %s %s\n", event.Verb(), strings.Join(event.Args, " "), event.Text)
  93. }
  94. }
  95. }
  96. func init() {
  97. irc.Handle(handler)
  98. }