Fix discord arbitrarily refusing to work on "too short" strings

Closes https://github.com/ppy/osu/issues/28192.
This commit is contained in:
Bartłomiej Dach 2024-05-16 18:23:19 +02:00
parent f9fd1b957f
commit a3dfd99f7d
No known key found for this signature in database
1 changed files with 10 additions and 3 deletions

View File

@ -164,8 +164,8 @@ private void updatePresence(bool hideIdentifiableInformation)
// user activity
if (activity.Value != null)
{
presence.State = truncate(activity.Value.GetStatus(hideIdentifiableInformation));
presence.Details = truncate(activity.Value.GetDetails(hideIdentifiableInformation) ?? string.Empty);
presence.State = clampLength(activity.Value.GetStatus(hideIdentifiableInformation));
presence.Details = clampLength(activity.Value.GetDetails(hideIdentifiableInformation) ?? string.Empty);
if (getBeatmapID(activity.Value) is int beatmapId && beatmapId > 0)
{
@ -271,8 +271,15 @@ private void onJoin(object sender, JoinMessage args) => Scheduler.AddOnce(() =>
private static readonly int ellipsis_length = Encoding.UTF8.GetByteCount(new[] { '…' });
private static string truncate(string str)
private static string clampLength(string str)
{
// For whatever reason, discord decides that strings shorter than 2 characters cannot possibly be valid input, because... reasons?
// And yes, that is two *characters*, or *codepoints*, not *bytes* as further down below (as determined by empirical testing).
// That seems very questionable, and isn't even documented anywhere. So to *make it* accept such valid input,
// just tack on enough of U+200B ZERO WIDTH SPACEs at the end.
if (str.Length < 2)
return str.PadRight(2, '\u200B');
if (Encoding.UTF8.GetByteCount(str) <= 128)
return str;