From 8876d349a2a6504ddf7909d96cda882f0181b012 Mon Sep 17 00:00:00 2001 From: Valeri Petkov Date: Mon, 31 Mar 2025 15:23:32 +0300 Subject: [PATCH 1/4] limit discord description size --- services/webhook/discord.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/webhook/discord.go b/services/webhook/discord.go index 0a7eb0b166dc8..2770cb770356b 100644 --- a/services/webhook/discord.go +++ b/services/webhook/discord.go @@ -101,6 +101,8 @@ var ( redColor = color("ff3232") ) +const discordDescriptionBytesLimit = 2048 + type discordConvertor struct { Username string AvatarURL string @@ -307,6 +309,9 @@ func parseHookPullRequestEventType(event webhook_module.HookEventType) (string, } func (d discordConvertor) createPayload(s *api.User, title, text, url string, color int) DiscordPayload { + if len(text) > discordDescriptionBytesLimit { + text = text[:discordDescriptionBytesLimit] + } return DiscordPayload{ Username: d.Username, AvatarURL: d.AvatarURL, From 46df7e54fc98c0e0216f6de440be99fbb9659c0f Mon Sep 17 00:00:00 2001 From: Valeri Petkov Date: Fri, 4 Apr 2025 12:41:00 +0300 Subject: [PATCH 2/4] Truncate at 2000-th character for simplicity --- services/webhook/discord.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/services/webhook/discord.go b/services/webhook/discord.go index 2770cb770356b..131c839b35baf 100644 --- a/services/webhook/discord.go +++ b/services/webhook/discord.go @@ -101,7 +101,7 @@ var ( redColor = color("ff3232") ) -const discordDescriptionBytesLimit = 2048 +const discordDescriptionCharactersLimit = 2000 type discordConvertor struct { Username string @@ -309,16 +309,13 @@ func parseHookPullRequestEventType(event webhook_module.HookEventType) (string, } func (d discordConvertor) createPayload(s *api.User, title, text, url string, color int) DiscordPayload { - if len(text) > discordDescriptionBytesLimit { - text = text[:discordDescriptionBytesLimit] - } return DiscordPayload{ Username: d.Username, AvatarURL: d.AvatarURL, Embeds: []DiscordEmbed{ { Title: title, - Description: text, + Description: util.TruncateRunes(text, discordDescriptionCharactersLimit), // Discord has some limits in place for the embeds, to keep it simple we currently truncate at 2000 URL: url, Color: color, Author: DiscordEmbedAuthor{ From 0916ac6a1b3e09303598f6c930726f2c21d9d9cf Mon Sep 17 00:00:00 2001 From: Valeri Petkov Date: Fri, 4 Apr 2025 12:55:14 +0300 Subject: [PATCH 3/4] Improve comment --- services/webhook/discord.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/webhook/discord.go b/services/webhook/discord.go index 131c839b35baf..be549b9eba864 100644 --- a/services/webhook/discord.go +++ b/services/webhook/discord.go @@ -101,6 +101,11 @@ var ( redColor = color("ff3232") ) +// https://discord.com/developers/docs/resources/message#embed-object-embed-limits +// Discord has some limits in place for the embeds. +// According to some tests, there is no consistent limit for different characet sets. +// For example: 4096 ASCII letters are allowed, but only 2490 emoji characters are allowed. +// To keep it simple, we currently truncate at 2000. const discordDescriptionCharactersLimit = 2000 type discordConvertor struct { @@ -315,7 +320,7 @@ func (d discordConvertor) createPayload(s *api.User, title, text, url string, co Embeds: []DiscordEmbed{ { Title: title, - Description: util.TruncateRunes(text, discordDescriptionCharactersLimit), // Discord has some limits in place for the embeds, to keep it simple we currently truncate at 2000 + Description: util.TruncateRunes(text, discordDescriptionCharactersLimit), URL: url, Color: color, Author: DiscordEmbedAuthor{ From 57a0fd7072cf3e5eb8632583eb865c960888bfcb Mon Sep 17 00:00:00 2001 From: wxiaoguang Date: Fri, 4 Apr 2025 18:03:33 +0800 Subject: [PATCH 4/4] Update services/webhook/discord.go --- services/webhook/discord.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/webhook/discord.go b/services/webhook/discord.go index be549b9eba864..0e8a9aa67c87c 100644 --- a/services/webhook/discord.go +++ b/services/webhook/discord.go @@ -103,7 +103,7 @@ var ( // https://discord.com/developers/docs/resources/message#embed-object-embed-limits // Discord has some limits in place for the embeds. -// According to some tests, there is no consistent limit for different characet sets. +// According to some tests, there is no consistent limit for different character sets. // For example: 4096 ASCII letters are allowed, but only 2490 emoji characters are allowed. // To keep it simple, we currently truncate at 2000. const discordDescriptionCharactersLimit = 2000