summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/bwmarrin/discordgo/discord.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/bwmarrin/discordgo/discord.go')
-rw-r--r--vendor/github.com/bwmarrin/discordgo/discord.go144
1 files changed, 6 insertions, 138 deletions
diff --git a/vendor/github.com/bwmarrin/discordgo/discord.go b/vendor/github.com/bwmarrin/discordgo/discord.go
index d1cfddf5..4081c65a 100644
--- a/vendor/github.com/bwmarrin/discordgo/discord.go
+++ b/vendor/github.com/bwmarrin/discordgo/discord.go
@@ -13,13 +13,10 @@
// Package discordgo provides Discord binding for Go
package discordgo
-import (
- "fmt"
- "reflect"
-)
+import "fmt"
// VERSION of Discordgo, follows Symantic Versioning. (http://semver.org/)
-const VERSION = "0.13.0"
+const VERSION = "0.15.0"
// New creates a new Discord session and will automate some startup
// tasks if given enough information to do so. Currently you can pass zero
@@ -27,6 +24,8 @@ const VERSION = "0.13.0"
// There are 3 ways to call New:
// With a single auth token - All requests will use the token blindly,
// no verification of the token will be done and requests may fail.
+// IF THE TOKEN IS FOR A BOT, IT MUST BE PREFIXED WITH `BOT `
+// eg: `"Bot <token>"`
// With an email and password - Discord will sign in with the provided
// credentials.
// With an email, password and auth token - Discord will verify the auth
@@ -37,11 +36,13 @@ func New(args ...interface{}) (s *Session, err error) {
// Create an empty Session interface.
s = &Session{
State: NewState(),
+ ratelimiter: NewRatelimiter(),
StateEnabled: true,
Compress: true,
ShouldReconnectOnError: true,
ShardID: 0,
ShardCount: 1,
+ MaxRestRetries: 3,
}
// If no arguments are passed return the empty Session interface.
@@ -122,136 +123,3 @@ func New(args ...interface{}) (s *Session, err error) {
return
}
-
-// validateHandler takes an event handler func, and returns the type of event.
-// eg.
-// Session.validateHandler(func (s *discordgo.Session, m *discordgo.MessageCreate))
-// will return the reflect.Type of *discordgo.MessageCreate
-func (s *Session) validateHandler(handler interface{}) reflect.Type {
-
- handlerType := reflect.TypeOf(handler)
-
- if handlerType.NumIn() != 2 {
- panic("Unable to add event handler, handler must be of the type func(*discordgo.Session, *discordgo.EventType).")
- }
-
- if handlerType.In(0) != reflect.TypeOf(s) {
- panic("Unable to add event handler, first argument must be of type *discordgo.Session.")
- }
-
- eventType := handlerType.In(1)
-
- // Support handlers of type interface{}, this is a special handler, which is triggered on every event.
- if eventType.Kind() == reflect.Interface {
- eventType = nil
- }
-
- return eventType
-}
-
-// AddHandler allows you to add an event handler that will be fired anytime
-// the Discord WSAPI event that matches the interface fires.
-// eventToInterface in events.go has a list of all the Discord WSAPI events
-// and their respective interface.
-// eg:
-// Session.AddHandler(func(s *discordgo.Session, m *discordgo.MessageCreate) {
-// })
-//
-// or:
-// Session.AddHandler(func(s *discordgo.Session, m *discordgo.PresenceUpdate) {
-// })
-// The return value of this method is a function, that when called will remove the
-// event handler.
-func (s *Session) AddHandler(handler interface{}) func() {
-
- s.initialize()
-
- eventType := s.validateHandler(handler)
-
- s.handlersMu.Lock()
- defer s.handlersMu.Unlock()
-
- h := reflect.ValueOf(handler)
-
- s.handlers[eventType] = append(s.handlers[eventType], h)
-
- // This must be done as we need a consistent reference to the
- // reflected value, otherwise a RemoveHandler method would have
- // been nice.
- return func() {
- s.handlersMu.Lock()
- defer s.handlersMu.Unlock()
-
- handlers := s.handlers[eventType]
- for i, v := range handlers {
- if h == v {
- s.handlers[eventType] = append(handlers[:i], handlers[i+1:]...)
- return
- }
- }
- }
-}
-
-// handle calls any handlers that match the event type and any handlers of
-// interface{}.
-func (s *Session) handle(event interface{}) {
-
- s.handlersMu.RLock()
- defer s.handlersMu.RUnlock()
-
- if s.handlers == nil {
- return
- }
-
- handlerParameters := []reflect.Value{reflect.ValueOf(s), reflect.ValueOf(event)}
-
- if handlers, ok := s.handlers[nil]; ok {
- for _, handler := range handlers {
- go handler.Call(handlerParameters)
- }
- }
-
- if handlers, ok := s.handlers[reflect.TypeOf(event)]; ok {
- for _, handler := range handlers {
- go handler.Call(handlerParameters)
- }
- }
-}
-
-// initialize adds all internal handlers and state tracking handlers.
-func (s *Session) initialize() {
-
- s.log(LogInformational, "called")
-
- s.handlersMu.Lock()
- if s.handlers != nil {
- s.handlersMu.Unlock()
- return
- }
-
- s.handlers = map[interface{}][]reflect.Value{}
- s.handlersMu.Unlock()
-
- s.AddHandler(s.onReady)
- s.AddHandler(s.onResumed)
- s.AddHandler(s.onVoiceServerUpdate)
- s.AddHandler(s.onVoiceStateUpdate)
- s.AddHandler(s.State.onInterface)
-}
-
-// onReady handles the ready event.
-func (s *Session) onReady(se *Session, r *Ready) {
-
- // Store the SessionID within the Session struct.
- s.sessionID = r.SessionID
-
- // Start the heartbeat to keep the connection alive.
- go s.heartbeat(s.wsConn, s.listening, r.HeartbeatInterval)
-}
-
-// onResumed handles the resumed event.
-func (s *Session) onResumed(se *Session, r *Resumed) {
-
- // Start the heartbeat to keep the connection alive.
- go s.heartbeat(s.wsConn, s.listening, r.HeartbeatInterval)
-}