Files
seanime-docker/seanime-2.9.10/internal/discordrpc/client/events.go
2025-09-20 14:08:38 +01:00

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
}