state.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package chat
  2. import (
  3. "context"
  4. "log/slog"
  5. "github.com/ayn2op/discordo/internal/http"
  6. "github.com/diamondburned/arikawa/v3/gateway"
  7. "github.com/diamondburned/arikawa/v3/session"
  8. "github.com/diamondburned/arikawa/v3/state"
  9. "github.com/diamondburned/arikawa/v3/state/store/defaultstore"
  10. "github.com/diamondburned/arikawa/v3/utils/handler"
  11. "github.com/diamondburned/arikawa/v3/utils/httputil"
  12. "github.com/diamondburned/arikawa/v3/utils/httputil/httpdriver"
  13. "github.com/diamondburned/arikawa/v3/utils/ws"
  14. "github.com/diamondburned/ningen/v3"
  15. )
  16. func (cv *ChatView) OpenState(token string) error {
  17. identifyProps := http.IdentifyProperties()
  18. gateway.DefaultIdentity = identifyProps
  19. gateway.DefaultPresence = &gateway.UpdatePresenceCommand{
  20. Status: cv.cfg.Status,
  21. }
  22. id := gateway.DefaultIdentifier(token)
  23. id.Compress = false
  24. session := session.NewCustom(id, http.NewClient(token), handler.New())
  25. state := state.NewFromSession(session, defaultstore.New())
  26. cv.state = ningen.FromState(state)
  27. // Handlers
  28. cv.state.AddHandler(cv.onRaw)
  29. cv.state.AddHandler(cv.onReady)
  30. cv.state.AddHandler(cv.onMessageCreate)
  31. cv.state.AddHandler(cv.onMessageUpdate)
  32. cv.state.AddHandler(cv.onMessageDelete)
  33. cv.state.AddHandler(cv.onReadUpdate)
  34. cv.state.AddHandler(cv.onGuildMembersChunk)
  35. cv.state.AddHandler(cv.onGuildMemberRemove)
  36. cv.state.StateLog = func(err error) {
  37. slog.Error("state log", "err", err)
  38. }
  39. cv.state.OnRequest = append(cv.state.OnRequest, httputil.WithHeaders(http.Headers()), cv.onRequest)
  40. return cv.state.Open(context.TODO())
  41. }
  42. func (cv *ChatView) CloseState() error {
  43. if cv.state == nil {
  44. return nil
  45. }
  46. return cv.state.Close()
  47. }
  48. func (cv *ChatView) onRequest(r httpdriver.Request) error {
  49. if req, ok := r.(*httpdriver.DefaultRequest); ok {
  50. slog.Debug("new HTTP request", "method", req.Method, "url", req.URL)
  51. }
  52. return nil
  53. }
  54. func (cv *ChatView) onRaw(event *ws.RawEvent) {
  55. slog.Debug(
  56. "new raw event",
  57. "code", event.OriginalCode,
  58. "type", event.OriginalType,
  59. // "data", event.Raw,
  60. )
  61. }