* Added ratelimiter Handles the new ratelimit headers - X-RateLimit-Remaining - X-RateLimit-Reset - X-RateLimit-Global * Pad only reset time with a second * Moved ratelimiter out of internal package * Change for loop, move global ratelimit check inside sleep check * Moved ratelimiter locking to getBucket * Added global bucket * Changed how bucket id's are done Now each request function will need to specify the bucket id if the endpoint contains minor variables * Allow empty bucketID in request * Remove some uneeded Endpoint* function calls * Added test for global ratelimits * Fixed a silly little mistake causing incorrect ratelimits * Update test comments, Fixed treating a endpoint as 2 in ratelimiting * Use date header from discord instead of relying on sys time sync * Update all REST functions to use RequestWithBucketID * Embed mutex into bucket * Added webhook and reaction buckets
121 lines
3.7 KiB
Go
121 lines
3.7 KiB
Go
// Discordgo - Discord bindings for Go
|
|
// Available at https://github.com/bwmarrin/discordgo
|
|
|
|
// Copyright 2015-2016 Bruce Marriner <bruce@sqls.net>. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// This file contains functions related to Discord OAuth2 endpoints
|
|
|
|
package discordgo
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
// Code specific to Discord OAuth2 Applications
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
// An Application struct stores values for a Discord OAuth2 Application
|
|
type Application struct {
|
|
ID string `json:"id,omitempty"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description,omitempty"`
|
|
Icon string `json:"icon,omitempty"`
|
|
Secret string `json:"secret,omitempty"`
|
|
RedirectURIs *[]string `json:"redirect_uris,omitempty"`
|
|
Owner *User `json:"owner"`
|
|
}
|
|
|
|
// Application returns an Application structure of a specific Application
|
|
// appID : The ID of an Application
|
|
func (s *Session) Application(appID string) (st *Application, err error) {
|
|
|
|
body, err := s.RequestWithBucketID("GET", EndpointApplication(appID), nil, EndpointApplication(""))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = unmarshal(body, &st)
|
|
return
|
|
}
|
|
|
|
// Applications returns all applications for the authenticated user
|
|
func (s *Session) Applications() (st []*Application, err error) {
|
|
|
|
body, err := s.RequestWithBucketID("GET", EndpointApplications, nil, EndpointApplications)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = unmarshal(body, &st)
|
|
return
|
|
}
|
|
|
|
// ApplicationCreate creates a new Application
|
|
// name : Name of Application / Bot
|
|
// uris : Redirect URIs (Not required)
|
|
func (s *Session) ApplicationCreate(ap *Application) (st *Application, err error) {
|
|
|
|
data := struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
RedirectURIs *[]string `json:"redirect_uris,omitempty"`
|
|
}{ap.Name, ap.Description, ap.RedirectURIs}
|
|
|
|
body, err := s.RequestWithBucketID("POST", EndpointApplications, data, EndpointApplications)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = unmarshal(body, &st)
|
|
return
|
|
}
|
|
|
|
// ApplicationUpdate updates an existing Application
|
|
// var : desc
|
|
func (s *Session) ApplicationUpdate(appID string, ap *Application) (st *Application, err error) {
|
|
|
|
data := struct {
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
RedirectURIs *[]string `json:"redirect_uris,omitempty"`
|
|
}{ap.Name, ap.Description, ap.RedirectURIs}
|
|
|
|
body, err := s.RequestWithBucketID("PUT", EndpointApplication(appID), data, EndpointApplication(""))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = unmarshal(body, &st)
|
|
return
|
|
}
|
|
|
|
// ApplicationDelete deletes an existing Application
|
|
// appID : The ID of an Application
|
|
func (s *Session) ApplicationDelete(appID string) (err error) {
|
|
|
|
_, err = s.RequestWithBucketID("DELETE", EndpointApplication(appID), nil, EndpointApplication(""))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ------------------------------------------------------------------------------------------------
|
|
// Code specific to Discord OAuth2 Application Bots
|
|
// ------------------------------------------------------------------------------------------------
|
|
|
|
// ApplicationBotCreate creates an Application Bot Account
|
|
//
|
|
// appID : The ID of an Application
|
|
//
|
|
// NOTE: func name may change, if I can think up something better.
|
|
func (s *Session) ApplicationBotCreate(appID string) (st *User, err error) {
|
|
|
|
body, err := s.RequestWithBucketID("POST", EndpointApplicationsBot(appID), nil, EndpointApplicationsBot(""))
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
err = unmarshal(body, &st)
|
|
return
|
|
}
|