Ad

How To Vertically Format Embedded Fields

- 1 answer

Current Formatting For Embed Fields

Here is an embed I currently use for my semi-public Ark Servers.
First field is the Map name,
Second field is the direct connect IP Address,
Third field is if/where there is a community base on that map.
As you can see it works as intended but if there's to much info on a single line in the field the formatting is screwed up. Is there a way to fix this?
I'm using 3 separate stream builders to build the different fields and then adding them to the embed. If code is needed I can post a "dumbed down version" so it doesn't take up the whole page.

        var linkHeading = "steam://connect/";
        var sb = new StringBuilder();
        var sb2 = new StringBuilder();
        var sb3 = new StringBuilder();
        var embed = new EmbedBuilder();
        embed.WithColor(new Color(0, 255, 0));
        embed.Title = "List of Server Ips";
        JObject o1;
        using (StreamReader file = File.OpenText("serverips.json"))
        using (JsonTextReader reader = new JsonTextReader(file))
        {
            o1 = (JObject)JToken.ReadFrom(reader);
        }

        var ipsObject = JsonConvert.DeserializeObject<Rootobject>(o1.ToString());

        sb.AppendLine("The Island: ");
        sb2.AppendLine($"{linkHeading}{ipsObject.TheIsland.ip}:{ipsObject.TheIsland.port}/");
        if(ipsObject.TheIsland.comm != "")
        {
            sb3.AppendLine($"Comm: {ipsObject.TheIsland.comm}");
        } else { sb3.AppendLine($"No Comm Info Available"); };
        sb.AppendLine("Aberration: ");
        sb2.AppendLine($"{linkHeading}{ipsObject.Aberration.ip}:{ipsObject.Aberration.port}/");
        if (ipsObject.Aberration.comm != "")
        {
            sb3.AppendLine($"Comm: {ipsObject.Aberration.comm}");
        } else { sb3.AppendLine($"No Comm Info Available"); };
        embed.WithDescription($"Cluster Ip and Comm Information");
        embed.AddField(x =>
        {
            x.Name = "Map";
            x.Value = sb.ToString();
            x.IsInline = true;
        });
        embed.AddField(x =>
        {
            x.Name = "IP";
            x.Value = sb2.ToString();
            x.IsInline = true;
        });
        embed.AddField(x =>
        {
            x.Name = "Comm?";
            x.Value = sb3.ToString();
            x.IsInline = true;
        });

        await Context.User.SendMessageAsync(null, false, embed.Build());
        await ReplyAsync("Server Ip List was sent directly to your inbox! :)");
Ad

Answer

You don't have that much control over how embed fields are displayed. The only thing you control in regards to fields are if they inline or not. The rendering is completely up to Discord and the end users screen size. For example, your current output on mobile will ignore the inline setting and list the fields one on top of the other instead of side by side.

Unless your fields consistently contain a small amount of text each you can't guarantee how the end use will see the output. If you need to guarantee some sort of consistent structured display across all devices, your best bet is to use an image.

Ad
source: stackoverflow.com
Ad