discord.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package util
  2. import (
  3. "encoding/json"
  4. "github.com/ayntgl/discordgo"
  5. )
  6. func FindMessageByID(ms []*discordgo.Message, mID string) (int, *discordgo.Message) {
  7. for i, m := range ms {
  8. if m.ID == mID {
  9. return i, m
  10. }
  11. }
  12. return -1, nil
  13. }
  14. func HasPermission(s *discordgo.State, cID string, p int64) bool {
  15. perm, err := s.UserChannelPermissions(s.User.ID, cID)
  16. if err != nil {
  17. return false
  18. }
  19. return perm&p == p
  20. }
  21. type loginResponse struct {
  22. Ticket string `json:"ticket"`
  23. Token string `json:"token"`
  24. MFA bool `json:"mfa"`
  25. SMS bool `json:"sms"`
  26. }
  27. func Login(s *discordgo.Session, email string, password string) (*loginResponse, error) {
  28. data := struct {
  29. Email string `json:"email"`
  30. Password string `json:"password"`
  31. }{email, password}
  32. resp, err := s.RequestWithBucketID(
  33. "POST",
  34. discordgo.EndpointLogin,
  35. data,
  36. discordgo.EndpointLogin,
  37. )
  38. if err != nil {
  39. return nil, err
  40. }
  41. var lr loginResponse
  42. err = json.Unmarshal(resp, &lr)
  43. if err != nil {
  44. return nil, err
  45. }
  46. return &lr, nil
  47. }
  48. func TOTP(s *discordgo.Session, code string, ticket string) (*loginResponse, error) {
  49. data := struct {
  50. Code string `json:"code"`
  51. Ticket string `json:"ticket"`
  52. }{code, ticket}
  53. e := discordgo.EndpointAuth + "mfa/totp"
  54. resp, err := s.RequestWithBucketID("POST", e, data, e)
  55. if err != nil {
  56. return nil, err
  57. }
  58. var lr loginResponse
  59. err = json.Unmarshal(resp, &lr)
  60. if err != nil {
  61. return nil, err
  62. }
  63. return &lr, nil
  64. }