77 lines
1.4 KiB
Go
77 lines
1.4 KiB
Go
package util
|
|
|
|
import (
|
|
"encoding/json"
|
|
|
|
"github.com/ayntgl/discordgo"
|
|
)
|
|
|
|
func FindMessageByID(ms []*discordgo.Message, mID string) (int, *discordgo.Message) {
|
|
for i, m := range ms {
|
|
if m.ID == mID {
|
|
return i, m
|
|
}
|
|
}
|
|
|
|
return -1, nil
|
|
}
|
|
|
|
func HasPermission(s *discordgo.State, cID string, p int64) bool {
|
|
perm, err := s.UserChannelPermissions(s.User.ID, cID)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
|
|
return perm&p == p
|
|
}
|
|
|
|
type loginResponse struct {
|
|
Ticket string `json:"ticket"`
|
|
Token string `json:"token"`
|
|
MFA bool `json:"mfa"`
|
|
SMS bool `json:"sms"`
|
|
}
|
|
|
|
func Login(s *discordgo.Session, email string, password string) (*loginResponse, error) {
|
|
data := struct {
|
|
Email string `json:"email"`
|
|
Password string `json:"password"`
|
|
}{email, password}
|
|
resp, err := s.RequestWithBucketID(
|
|
"POST",
|
|
discordgo.EndpointLogin,
|
|
data,
|
|
discordgo.EndpointLogin,
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var lr loginResponse
|
|
err = json.Unmarshal(resp, &lr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &lr, nil
|
|
}
|
|
|
|
func TOTP(s *discordgo.Session, code string, ticket string) (*loginResponse, error) {
|
|
data := struct {
|
|
Code string `json:"code"`
|
|
Ticket string `json:"ticket"`
|
|
}{code, ticket}
|
|
e := discordgo.EndpointAuth + "mfa/totp"
|
|
resp, err := s.RequestWithBucketID("POST", e, data, e)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var lr loginResponse
|
|
err = json.Unmarshal(resp, &lr)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &lr, nil
|
|
}
|