login.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package discord
  2. import (
  3. "encoding/json"
  4. "github.com/ayntgl/discordgo"
  5. )
  6. type LoginResponse struct {
  7. Ticket string `json:"ticket"`
  8. Token string `json:"token"`
  9. MFA bool `json:"mfa"`
  10. SMS bool `json:"sms"`
  11. }
  12. func Login(s *discordgo.Session, email string, password string) (*LoginResponse, error) {
  13. data := struct {
  14. Email string `json:"email"`
  15. Password string `json:"password"`
  16. }{email, password}
  17. resp, err := s.RequestWithBucketID(
  18. "POST",
  19. discordgo.EndpointLogin,
  20. data,
  21. discordgo.EndpointLogin,
  22. )
  23. if err != nil {
  24. return nil, err
  25. }
  26. var lr LoginResponse
  27. err = json.Unmarshal(resp, &lr)
  28. if err != nil {
  29. return nil, err
  30. }
  31. return &lr, nil
  32. }
  33. func TOTP(s *discordgo.Session, code string, ticket string) (*LoginResponse, error) {
  34. data := struct {
  35. Code string `json:"code"`
  36. Ticket string `json:"ticket"`
  37. }{code, ticket}
  38. e := discordgo.EndpointAuth + "mfa/totp"
  39. resp, err := s.RequestWithBucketID("POST", e, data, e)
  40. if err != nil {
  41. return nil, err
  42. }
  43. var lr LoginResponse
  44. err = json.Unmarshal(resp, &lr)
  45. if err != nil {
  46. return nil, err
  47. }
  48. return &lr, nil
  49. }