forked from pothtonswer/discordmuffin
Implement Guild Sharding
This implements the upcoming change (see hammerandchisel/discord-api-docs#17) to add guild-sharding support directly in the Discord Gateways.
This commit is contained in:
parent
33f2fa8d81
commit
92caf31b7f
2 changed files with 19 additions and 1 deletions
|
@ -38,6 +38,10 @@ type Session struct {
|
||||||
// Should the session request compressed websocket data.
|
// Should the session request compressed websocket data.
|
||||||
Compress bool
|
Compress bool
|
||||||
|
|
||||||
|
// Sharding
|
||||||
|
ShardID int
|
||||||
|
NumShards int
|
||||||
|
|
||||||
// Should state tracking be enabled.
|
// Should state tracking be enabled.
|
||||||
// State tracking is the best way for getting the the users
|
// State tracking is the best way for getting the the users
|
||||||
// active guilds and the members of the guilds.
|
// active guilds and the members of the guilds.
|
||||||
|
|
16
wsapi.go
16
wsapi.go
|
@ -39,6 +39,7 @@ type handshakeData struct {
|
||||||
Properties handshakeProperties `json:"properties"`
|
Properties handshakeProperties `json:"properties"`
|
||||||
LargeThreshold int `json:"large_threshold"`
|
LargeThreshold int `json:"large_threshold"`
|
||||||
Compress bool `json:"compress"`
|
Compress bool `json:"compress"`
|
||||||
|
Shard [2]int `json:"shard"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type handshakeOp struct {
|
type handshakeOp struct {
|
||||||
|
@ -78,7 +79,20 @@ func (s *Session) Open() (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = s.wsConn.WriteJSON(handshakeOp{2, handshakeData{3, s.Token, handshakeProperties{runtime.GOOS, "Discordgo v" + VERSION, "", "", ""}, 250, s.Compress}})
|
handshake := handshakeData{
|
||||||
|
Version: 4,
|
||||||
|
Token: s.Token,
|
||||||
|
Properties: handshakeProperties{runtime.GOOS, "Discordgo v" + VERSION, "", "", ""},
|
||||||
|
LargeThreshold: 250,
|
||||||
|
Compress: s.Compress,
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we've set NumShards, add the shard information to the handshake
|
||||||
|
if s.NumShards > 0 {
|
||||||
|
handshake.Shard = [2]int{s.ShardID, s.NumShards}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = s.wsConn.WriteJSON(handshakeOp{2, handshake})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue