| @@ -8,14 +8,36 @@ namespace Discord | |||
| { | |||
| private readonly Embed _embed; | |||
| public const int MaxFieldCount = 25; | |||
| public const int MaxTitleLength = 256; | |||
| public const int MaxDescriptionLength = 2048; | |||
| public EmbedBuilder() | |||
| { | |||
| _embed = new Embed("rich"); | |||
| Fields = new List<EmbedFieldBuilder>(); | |||
| } | |||
| public string Title { get { return _embed.Title; } set { _embed.Title = value; } } | |||
| public string Description { get { return _embed.Description; } set { _embed.Description = value; } } | |||
| public string Title | |||
| { | |||
| get => _embed.Title; | |||
| set | |||
| { | |||
| if (value?.Length > MaxTitleLength) throw new ArgumentException($"Title length must be less than or equal to {MaxTitleLength}."); | |||
| _embed.Title = value; | |||
| } | |||
| } | |||
| public string Description | |||
| { | |||
| get => _embed.Description; | |||
| set | |||
| { | |||
| if (value?.Length > MaxDescriptionLength) throw new ArgumentException($"Description length must be less than or equal to {MaxDescriptionLength}."); | |||
| _embed.Description = value; | |||
| } | |||
| } | |||
| public string Url { get { return _embed.Url; } set { _embed.Url = value; } } | |||
| public string ThumbnailUrl { get { return _embed.Thumbnail?.Url; } set { _embed.Thumbnail = new EmbedThumbnail(value, null, null, null); } } | |||
| public string ImageUrl { get { return _embed.Image?.Url; } set { _embed.Image = new EmbedImage(value, null, null, null); } } | |||
| @@ -30,8 +52,10 @@ namespace Discord | |||
| get => _fields; | |||
| set | |||
| { | |||
| if (value != null) _fields = value; | |||
| else throw new ArgumentNullException("Cannot set an embed builder's fields collection to null", nameof(value)); | |||
| if (value == null) throw new ArgumentNullException("Cannot set an embed builder's fields collection to null", nameof(value)); | |||
| if (value.Count > MaxFieldCount) throw new ArgumentException($"Field count must be less than or equal to {MaxFieldCount}."); | |||
| _fields = value; | |||
| } | |||
| } | |||
| @@ -107,7 +131,7 @@ namespace Discord | |||
| .WithIsInline(false) | |||
| .WithName(name) | |||
| .WithValue(value); | |||
| Fields.Add(field); | |||
| AddField(field); | |||
| return this; | |||
| } | |||
| public EmbedBuilder AddInlineField(string name, object value) | |||
| @@ -116,11 +140,16 @@ namespace Discord | |||
| .WithIsInline(true) | |||
| .WithName(name) | |||
| .WithValue(value); | |||
| Fields.Add(field); | |||
| AddField(field); | |||
| return this; | |||
| } | |||
| public EmbedBuilder AddField(EmbedFieldBuilder field) | |||
| { | |||
| if (Fields.Count >= MaxFieldCount) | |||
| { | |||
| throw new ArgumentException($"Field count must be less than or equal to {MaxFieldCount}."); | |||
| } | |||
| Fields.Add(field); | |||
| return this; | |||
| } | |||
| @@ -128,7 +157,7 @@ namespace Discord | |||
| { | |||
| var field = new EmbedFieldBuilder(); | |||
| action(field); | |||
| Fields.Add(field); | |||
| this.AddField(field); | |||
| return this; | |||
| } | |||
| @@ -149,8 +178,29 @@ namespace Discord | |||
| { | |||
| private EmbedField _field; | |||
| public string Name { get { return _field.Name; } set { _field.Name = value; } } | |||
| public object Value { get { return _field.Value; } set { _field.Value = value.ToString(); } } | |||
| public const int MaxFieldNameLength = 256; | |||
| public const int MaxFieldValueLength = 1024; | |||
| public string Name | |||
| { | |||
| get => _field.Name; | |||
| set | |||
| { | |||
| if (value?.Length > MaxFieldNameLength) throw new ArgumentException($"Field name length must be less than or equal to {MaxFieldNameLength}."); | |||
| _field.Name = value; | |||
| } | |||
| } | |||
| public object Value | |||
| { | |||
| get => _field.Value; | |||
| set | |||
| { | |||
| var stringValue = value.ToString(); | |||
| if (stringValue.Length > MaxFieldValueLength) throw new ArgumentException($"Field value length must be less than or equal to {MaxFieldValueLength}."); | |||
| _field.Value = stringValue; | |||
| } | |||
| } | |||
| public bool IsInline { get { return _field.Inline; } set { _field.Inline = value; } } | |||
| public EmbedFieldBuilder() | |||
| @@ -182,7 +232,17 @@ namespace Discord | |||
| { | |||
| private EmbedAuthor _author; | |||
| public string Name { get { return _author.Name; } set { _author.Name = value; } } | |||
| public const int MaxAuthorNameLength = 256; | |||
| public string Name | |||
| { | |||
| get => _author.Name; | |||
| set | |||
| { | |||
| if (value?.Length > MaxAuthorNameLength) throw new ArgumentException($"Author name length must be less than or equal to {MaxAuthorNameLength}."); | |||
| _author.Name = value; | |||
| } | |||
| } | |||
| public string Url { get { return _author.Url; } set { _author.Url = value; } } | |||
| public string IconUrl { get { return _author.IconUrl; } set { _author.IconUrl = value; } } | |||
| @@ -215,7 +275,17 @@ namespace Discord | |||
| { | |||
| private EmbedFooter _footer; | |||
| public string Text { get { return _footer.Text; } set { _footer.Text = value; } } | |||
| public const int MaxFooterTextLength = 2048; | |||
| public string Text | |||
| { | |||
| get => _footer.Text; | |||
| set | |||
| { | |||
| if (value?.Length > MaxFooterTextLength) throw new ArgumentException($"Footer text length must be less than or equal to {MaxFooterTextLength}."); | |||
| _footer.Text = value; | |||
| } | |||
| } | |||
| public string IconUrl { get { return _footer.IconUrl; } set { _footer.IconUrl = value; } } | |||
| public EmbedFooterBuilder() | |||