Split long short-list results up into embed fields
This commit is contained in:
		| @@ -1,6 +1,5 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using System.Linq; | ||||
| using System.Collections.Generic; | ||||
| using System.Text; | ||||
|  | ||||
| using DSharpPlus.Entities; | ||||
|  | ||||
| @@ -28,7 +27,32 @@ namespace PluralKit.Bot | ||||
|                 return $"[`{m.Hid}`] **{m.Name.SanitizeMentions()}**"; | ||||
|             } | ||||
|  | ||||
|             eb.Description = string.Join("\n", members.Select(RenderLine)); | ||||
|             var buf = new StringBuilder(); | ||||
|             var chunks = new List<string>(); | ||||
|              | ||||
|             // Split the list into properly-sized chunks | ||||
|             foreach (var m in members) | ||||
|             { | ||||
|                 var line = RenderLine(m); | ||||
|                  | ||||
|                 // First chunk goes in description (2048 chars), rest go in embed values (1000 chars) | ||||
|                 var lengthLimit = chunks.Count == 0 ? 2048 : 1000; | ||||
|                 if (buf.Length + line.Length + 1 > lengthLimit) | ||||
|                 { | ||||
|                     chunks.Add(buf.ToString()); | ||||
|                     buf.Clear(); | ||||
|                 } | ||||
|  | ||||
|                 buf.Append(RenderLine(m)); | ||||
|                 buf.Append("\n"); | ||||
|             } | ||||
|             chunks.Add(buf.ToString()); | ||||
|  | ||||
|             // Put the first chunk in the description, rest in blank-name embed fields | ||||
|             eb.Description = chunks[0]; | ||||
|             for (var i = 1; i < chunks.Count; i++) | ||||
|                 // Field name is Unicode zero-width space | ||||
|                 eb.AddField("\u200B", chunks[i]); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user