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.1 KiB

  1. package irc
  2. import (
  3. "github.com/gissleh/irc/list"
  4. )
  5. // A Query is a target for direct messages to and from a specific nick.
  6. type Query struct {
  7. id string
  8. user list.User
  9. }
  10. // ID returns a unique ID for the channel target.
  11. func (query *Query) ID() string {
  12. return query.id
  13. }
  14. // Kind returns "channel"
  15. func (query *Query) Kind() string {
  16. return "query"
  17. }
  18. // Name gets the query name
  19. func (query *Query) Name() string {
  20. return query.user.Nick
  21. }
  22. func (query *Query) State() ClientStateTarget {
  23. return ClientStateTarget{
  24. Kind: "query",
  25. Name: query.user.Nick,
  26. Users: []list.User{query.user},
  27. }
  28. }
  29. // AddHandler handles messages routed to this channel by the client's event loop
  30. func (query *Query) Handle(event *Event, client *Client) {
  31. switch event.Name() {
  32. case "packet.nick":
  33. {
  34. query.user.Nick = event.Arg(0)
  35. }
  36. case "packet.account":
  37. {
  38. account := ""
  39. if accountArg := event.Arg(0); accountArg != "" && accountArg != "*" {
  40. account = accountArg
  41. }
  42. query.user.Account = account
  43. }
  44. case "packet.chghost":
  45. {
  46. query.user.User = event.Arg(0)
  47. query.user.Host = event.Arg(1)
  48. }
  49. }
  50. }