You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.5 KiB
Go
59 lines
1.5 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 custom types, currently only a timestamp wrapper.
|
|
|
|
package discordgo
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
// Timestamp stores a timestamp, as sent by the Discord API.
|
|
type Timestamp string
|
|
|
|
// Parse parses a timestamp string into a time.Time object.
|
|
// The only time this can fail is if Discord changes their timestamp format.
|
|
func (t Timestamp) Parse() (time.Time, error) {
|
|
return time.Parse(time.RFC3339, string(t))
|
|
}
|
|
|
|
// RESTError stores error information about a request with a bad response code.
|
|
// Message is not always present, there are cases where api calls can fail
|
|
// without returning a json message.
|
|
type RESTError struct {
|
|
Request *http.Request
|
|
Response *http.Response
|
|
ResponseBody []byte
|
|
|
|
Message *APIErrorMessage // Message may be nil.
|
|
}
|
|
|
|
func newRestError(req *http.Request, resp *http.Response, body []byte) *RESTError {
|
|
restErr := &RESTError{
|
|
Request: req,
|
|
Response: resp,
|
|
ResponseBody: body,
|
|
}
|
|
|
|
// Attempt to decode the error and assume no message was provided if it fails
|
|
var msg *APIErrorMessage
|
|
err := json.Unmarshal(body, &msg)
|
|
if err == nil {
|
|
restErr.Message = msg
|
|
}
|
|
|
|
return restErr
|
|
}
|
|
|
|
func (r RESTError) Error() string {
|
|
return fmt.Sprintf("HTTP %s, %s", r.Response.Status, r.ResponseBody)
|
|
}
|