如何垂直格式化嵌入字段
How to vertically format embedded fields
Current Formatting For Embed Fields
这是我目前用于半 public 方舟服务器的嵌入。
第一个字段是地图名称,
第二个字段是直接连接 IP 地址,
第三个字段是 if/where 该地图上有一个社区基地。
如您所见,它按预期工作,但如果字段中的一行中有太多信息,则格式会搞砸。有办法解决这个问题吗?
我正在使用 3 个独立的流构建器来构建不同的字段,然后将它们添加到嵌入中。如果需要代码,我可以 post 一个“精简版”,这样它就不会占用整个页面。
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! :)");
您无法控制嵌入字段的显示方式。关于字段,您唯一可以控制的是它们是否 inline
。渲染完全取决于 Discord 和最终用户的屏幕尺寸。例如,您当前在移动设备上的输出将忽略 inline
设置并将字段逐个列出,而不是并排列出。
除非您的字段始终包含少量文本,否则您无法保证最终用户将如何看到输出。如果您需要在所有设备上保证某种一致的结构化显示,最好的办法是使用图片。
Current Formatting For Embed Fields
这是我目前用于半 public 方舟服务器的嵌入。
第一个字段是地图名称,
第二个字段是直接连接 IP 地址,
第三个字段是 if/where 该地图上有一个社区基地。
如您所见,它按预期工作,但如果字段中的一行中有太多信息,则格式会搞砸。有办法解决这个问题吗?
我正在使用 3 个独立的流构建器来构建不同的字段,然后将它们添加到嵌入中。如果需要代码,我可以 post 一个“精简版”,这样它就不会占用整个页面。
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! :)");
您无法控制嵌入字段的显示方式。关于字段,您唯一可以控制的是它们是否 inline
。渲染完全取决于 Discord 和最终用户的屏幕尺寸。例如,您当前在移动设备上的输出将忽略 inline
设置并将字段逐个列出,而不是并排列出。
除非您的字段始终包含少量文本,否则您无法保证最终用户将如何看到输出。如果您需要在所有设备上保证某种一致的结构化显示,最好的办法是使用图片。