Skip to content

Commit efffa9d

Browse files
authored
Fix crash when Discord message is greater than 128 characters (CnCNet#982)
1 parent 915492b commit efffa9d

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

DXMainClient/Domain/DiscordHandler.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ namespace DTAClient.Domain
1414
/// </summary>
1515
public class DiscordHandler: IDisposable
1616
{
17+
private const int MaxDiscordPresenceTextLength = 128;
1718
private DiscordRpcClient client;
1819

1920
private RichPresence _currentPresence;
@@ -158,13 +159,13 @@ public void UpdatePresence(string map, string mode, string type, string state,
158159
stateString += "🔒";
159160
CurrentPresence = new RichPresence()
160161
{
161-
State = stateString,
162-
Details = $"{type}{map}{mode}",
162+
State = TrimDiscordPresenceText(stateString),
163+
Details = TrimDiscordPresenceText($"{type}{map}{mode}"),
163164
Assets = new Assets()
164165
{
165166
LargeImageKey = "logo",
166167
SmallImageKey = sideKey,
167-
SmallImageText = side
168+
SmallImageText = TrimDiscordPresenceText(side)
168169
},
169170
Timestamps = (client?.CurrentPresence.HasTimestamps() ?? false) && !resetTimer ?
170171
client.CurrentPresence.Timestamps : Timestamps.Now
@@ -184,8 +185,8 @@ public void UpdatePresence(string map, string mode, string type, string state,
184185
stateString += "👑";
185186
CurrentPresence = new RichPresence()
186187
{
187-
State = stateString,
188-
Details = $"{type}{map}{mode}",
188+
State = TrimDiscordPresenceText(stateString),
189+
Details = TrimDiscordPresenceText($"{type}{map}{mode}"),
189190
Assets = new Assets()
190191
{
191192
LargeImageKey = "logo"
@@ -203,13 +204,13 @@ public void UpdatePresence(string map, string mode, string state, string side, b
203204
string sideKey = new Regex("[^a-zA-Z0-9]").Replace(side.ToLower(), "");
204205
CurrentPresence = new RichPresence()
205206
{
206-
State = $"{state}",
207-
Details = $"Skirmish • {map}{mode}",
207+
State = TrimDiscordPresenceText(state),
208+
Details = TrimDiscordPresenceText($"Skirmish • {map}{mode}"),
208209
Assets = new Assets()
209210
{
210211
LargeImageKey = "logo",
211212
SmallImageKey = sideKey,
212-
SmallImageText = side
213+
SmallImageText = TrimDiscordPresenceText(side)
213214
},
214215
Timestamps = (client?.CurrentPresence.HasTimestamps() ?? false) && !resetTimer ?
215216
client.CurrentPresence.Timestamps : Timestamps.Now
@@ -225,12 +226,12 @@ public void UpdatePresence(string mission, string difficulty, string side, bool
225226
CurrentPresence = new RichPresence()
226227
{
227228
State = "Playing Mission",
228-
Details = $"{mission}{difficulty}",
229+
Details = TrimDiscordPresenceText($"{mission}{difficulty}"),
229230
Assets = new Assets()
230231
{
231232
LargeImageKey = "logo",
232233
SmallImageKey = sideKey,
233-
SmallImageText = side
234+
SmallImageText = TrimDiscordPresenceText(side)
234235
},
235236
Timestamps = (client?.CurrentPresence.HasTimestamps() ?? false) && !resetTimer ?
236237
client.CurrentPresence.Timestamps : Timestamps.Now
@@ -245,7 +246,7 @@ public void UpdatePresence(string save, bool resetTimer = false)
245246
CurrentPresence = new RichPresence()
246247
{
247248
State = "Playing Saved Game",
248-
Details = $"{save}",
249+
Details = TrimDiscordPresenceText(save),
249250
Assets = new Assets()
250251
{
251252
LargeImageKey = "logo"
@@ -255,6 +256,14 @@ public void UpdatePresence(string save, bool resetTimer = false)
255256
};
256257
}
257258

259+
private static string TrimDiscordPresenceText(string value)
260+
{
261+
if (string.IsNullOrEmpty(value) || value.Length <= MaxDiscordPresenceTextLength)
262+
return value;
263+
264+
return value.Substring(0, MaxDiscordPresenceTextLength - 3) + "...";
265+
}
266+
258267
#endregion
259268

260269
#region eventhandlers

0 commit comments

Comments
 (0)