67 lines
1.0 KiB
Go
67 lines
1.0 KiB
Go
package discordrpc_client
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type ActivityEventData struct {
|
|
Secret string `json:"secret"`
|
|
User *User `json:"user"`
|
|
}
|
|
|
|
type event string
|
|
|
|
var (
|
|
ActivityJoinEvent event = "ACTIVITY_JOIN"
|
|
ActivitySpectateEvent event = "ACTIVITY_SPECTATE"
|
|
ActivityJoinRequestEvent event = "ACTIVITY_JOIN_REQUEST"
|
|
)
|
|
|
|
func (c *Client) RegisterEvent(ch chan ActivityEventData, evt event) error {
|
|
if c == nil {
|
|
return nil
|
|
}
|
|
|
|
payload := Payload{
|
|
Cmd: SubscribeCommand,
|
|
Event: evt,
|
|
Nonce: uuid.New(),
|
|
}
|
|
|
|
err := c.SendPayload(payload)
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
go func() {
|
|
for {
|
|
r, err := c.Socket.Read()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
var response struct {
|
|
Event event `json:"event"`
|
|
Data *ActivityEventData `json:"data"`
|
|
}
|
|
|
|
if err := json.Unmarshal([]byte(r), &response); err != nil {
|
|
continue
|
|
}
|
|
|
|
if response.Event == evt {
|
|
continue
|
|
}
|
|
|
|
ch <- *response.Data
|
|
|
|
time.Sleep(10 * time.Millisecond)
|
|
}
|
|
}()
|
|
|
|
return nil
|
|
}
|