fix: truncate long activity fields to prevent Discord rejection #18

Merged
deluan merged 3 commits from fix/truncate-long-fields into main 2026-03-04 10:48:56 -07:00
Showing only changes of commit bb7d6aaa5e - Show all commits
+25 -7
View File
@@ -1,6 +1,7 @@
package main package main
import ( import (
"encoding/json"
"errors" "errors"
"strings" "strings"
@@ -446,17 +447,34 @@ var _ = Describe("discordRPC", func() {
longAlbum := strings.Repeat("B", 200) longAlbum := strings.Repeat("B", 200)
longURL := "https://example.com/" + strings.Repeat("x", 237) longURL := "https://example.com/" + strings.Repeat("x", 237)
host.WebSocketMock.On("SendText", "testuser", mock.MatchedBy(func(msg string) bool {
// Text fields should be truncated to 128 runes (127 + "…")
truncatedName := strings.Repeat("N", 127) + "…" truncatedName := strings.Repeat("N", 127) + "…"
truncatedTitle := strings.Repeat("T", 127) + "…" truncatedTitle := strings.Repeat("T", 127) + "…"
truncatedArtist := strings.Repeat("A", 127) + "…" truncatedArtist := strings.Repeat("A", 127) + "…"
truncatedAlbum := strings.Repeat("B", 127) + "…" truncatedAlbum := strings.Repeat("B", 127) + "…"
return strings.Contains(msg, truncatedName) &&
strings.Contains(msg, truncatedTitle) && host.WebSocketMock.On("SendText", "testuser", mock.MatchedBy(func(msg string) bool {
strings.Contains(msg, truncatedArtist) && var message struct {
strings.Contains(msg, truncatedAlbum) && D json.RawMessage `json:"d"`
!strings.Contains(msg, longURL) // URL should be omitted }
if err := json.Unmarshal([]byte(msg), &message); err != nil {
return false
}
var presence presencePayload
if err := json.Unmarshal(message.D, &presence); err != nil {
return false
}
if len(presence.Activities) != 1 {
return false
}
act := presence.Activities[0]
return act.Name == truncatedName &&
act.Details == truncatedTitle &&
act.State == truncatedArtist &&
act.Assets.LargeText == truncatedAlbum &&
act.DetailsURL == "" &&
act.StateURL == "" &&
act.Assets.LargeURL == "" &&
act.Assets.SmallURL == ""
})).Return(nil) })).Return(nil)
err := r.sendActivity("client123", "testuser", "token123", activity{ err := r.sendActivity("client123", "testuser", "token123", activity{
1