From 503ece558b4f07bd8008157d3aeb6a4e7100d349 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Fri, 10 Nov 2017 22:36:52 +0900 Subject: [PATCH 1/7] Add EditorConfig --- .editorconfig | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 000000000..8780bc02c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,18 @@ +# EditorConfig is awesome: http://EditorConfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_size = 4 +indent_style = space +trim_trailing_whitespace = true + +[*.{csproj,json,md,yml}] +indent_size = 2 +indent_style = space + +[*.sln] +indent_style = tab From af756cd9feb630baadbf6025cbb079cd9e1f45cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sat, 11 Nov 2017 00:35:30 +0900 Subject: [PATCH 2/7] Add basic .NET style rules --- .editorconfig | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/.editorconfig b/.editorconfig index 8780bc02c..fac5c012f 100644 --- a/.editorconfig +++ b/.editorconfig @@ -16,3 +16,60 @@ indent_style = space [*.sln] indent_style = tab + +[*.cs] +dotnet_style_qualification_for_field = false:suggestion +dotnet_style_qualification_for_property = false:suggestion +dotnet_style_qualification_for_method = false:suggestion +dotnet_style_qualification_for_event = false:suggestion + +dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion +dotnet_style_predefined_type_for_member_access = true:suggestion + +dotnet_style_object_initializer = true:suggestion +dotnet_style_collection_initializer = true:suggestion +dotnet_style_explicit_tuple_names = true:suggestion +dotnet_style_coalesce_expression = true:suggestion +dotnet_style_null_propagation = true:suggestion + +csharp_style_var_for_built_in_types = true:suggestion +csharp_style_var_when_type_is_apparent = true:suggestion +csharp_style_var_elsewhere = true:suggestion + +csharp_style_expression_bodied_methods = true:none +csharp_style_expression_bodied_operators = true:none +csharp_style_expression_bodied_properties = true:none +csharp_style_expression_bodied_indexers = true:none +csharp_style_expression_bodied_accessors = true:none + +csharp_style_pattern_matching_over_is_with_cast_check = true:suggestion +csharp_style_pattern_matching_over_as_with_null_check = true:suggestion +csharp_style_inlined_variable_declaration = true:suggestion + +csharp_prefer_simple_default_expression = false:none + +csharp_style_throw_expression = true:none +csharp_style_conditional_delegate_call = true:none +csharp_prefer_braces = false:none + +dotnet_sort_system_directives_first = false + +csharp_new_line_before_open_brace = all +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = true +csharp_new_line_before_members_in_anonymous_types = true +csharp_new_line_within_query_expression_clauses = true + +csharp_indent_case_contents = true +csharp_indent_switch_labels = true +csharp_indent_labels = flush_left + +csharp_space_after_cast = false +csharp_space_after_keywords_in_control_flow_statements = true +csharp_space_between_method_declaration_parameter_list_parentheses = false +csharp_space_between_method_call_parameter_list_parentheses = false + +csharp_preserve_single_line_statements = false +csharp_preserve_single_line_blocks = true From 4f19b835ffe8c64a93a9b4659e60b03ac797760f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sat, 11 Nov 2017 01:19:11 +0900 Subject: [PATCH 3/7] Add naming rules --- .editorconfig | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/.editorconfig b/.editorconfig index fac5c012f..ce571c4a4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -73,3 +73,41 @@ csharp_space_between_method_call_parameter_list_parentheses = false csharp_preserve_single_line_statements = false csharp_preserve_single_line_blocks = true + +dotnet_naming_rule.all_of_const_fields_are_pascal_case.symbols = const_fields +dotnet_naming_rule.all_of_const_fields_are_pascal_case.style = pascal_case +dotnet_naming_rule.all_of_const_fields_are_pascal_case.severity = suggestion + +dotnet_naming_rule.all_of_local_fields_without_const_are_camel_case.symbols = local_fields +dotnet_naming_rule.all_of_local_fields_without_const_are_camel_case.style = starts_with_low_line_camel_case +dotnet_naming_rule.all_of_local_fields_without_const_are_camel_case.severity = suggestion + +dotnet_naming_rule.all_of_interfaces_starts_with_low_line_camel_case.symbols = interfaces +dotnet_naming_rule.all_of_interfaces_starts_with_low_line_camel_case.style = starts_with_i_pascal_case +dotnet_naming_rule.all_of_interfaces_starts_with_low_line_camel_case.severity = suggestion + +dotnet_naming_rule.default_is_pascal_case.symbols = without_interfaces_and_fields +dotnet_naming_rule.default_is_pascal_case.style = pascal_case +dotnet_naming_rule.default_is_pascal_case.severity = suggestion + +dotnet_naming_symbols.const_fields.applicable_kinds = field +dotnet_naming_symbols.const_fields.applicable_accessibilities = * +dotnet_naming_symbols.const_fields.required_modifiers = const + +dotnet_naming_symbols.interfaces.applicable_kinds = interface +dotnet_naming_symbols.interfaces.applicable_accessibilities = * + +dotnet_naming_symbols.local_fields.applicable_kinds = field +dotnet_naming_symbols.local_fields.applicable_accessibilities = private, protected, protected_internal +dotnet_naming_symbols.local_fields.required_modifiers = abstract, must_inherit, readonly, static, shared + +dotnet_naming_symbols.without_interfaces_and_fields.applicable_kinds = class, struct, enum, property, method, event, namespace, delegate, type_parameter +dotnet_naming_symbols.without_interfaces_and_fields.applicable_accessibilities = * + +dotnet_naming_style.pascal_case.capitalization = pascal_case + +dotnet_naming_style.starts_with_i_pascal_case.required_prefix = I +dotnet_naming_style.starts_with_i_pascal_case.capitalization = pascal_case + +dotnet_naming_style.starts_with_low_line_camel_case.required_prefix = _ +dotnet_naming_style.starts_with_low_line_camel_case.capitalization = camel_case From 2d08f9a655b4949c1177f778d0f499047484a537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sat, 11 Nov 2017 10:17:42 +0900 Subject: [PATCH 4/7] Add some more extension --- .editorconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index ce571c4a4..daede7908 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,11 +10,11 @@ indent_size = 4 indent_style = space trim_trailing_whitespace = true -[*.{csproj,json,md,yml}] +[*.{csproj,json,md,nuspec,yml}] indent_size = 2 indent_style = space -[*.sln] +[*.{sln,xml}] indent_style = tab [*.cs] From c692306fcc1e86ab92dd10683d3719f16c02a249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sat, 11 Nov 2017 10:49:00 +0900 Subject: [PATCH 5/7] Add target of the internal fields --- .editorconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.editorconfig b/.editorconfig index daede7908..696bb866b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -98,7 +98,7 @@ dotnet_naming_symbols.interfaces.applicable_kinds = interface dotnet_naming_symbols.interfaces.applicable_accessibilities = * dotnet_naming_symbols.local_fields.applicable_kinds = field -dotnet_naming_symbols.local_fields.applicable_accessibilities = private, protected, protected_internal +dotnet_naming_symbols.local_fields.applicable_accessibilities = internal, private, protected, protected_internal dotnet_naming_symbols.local_fields.required_modifiers = abstract, must_inherit, readonly, static, shared dotnet_naming_symbols.without_interfaces_and_fields.applicable_kinds = class, struct, enum, property, method, event, namespace, delegate, type_parameter From 2433518ee0c9a884b5dbc3a7691bd4d396b7b5df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sun, 7 Jan 2018 16:23:30 +0900 Subject: [PATCH 6/7] Add Embed Provider Structure into EmbedBuilder --- .../Entities/Messages/Embed.cs | 2 +- .../Entities/Messages/EmbedProvider.cs | 4 +- .../Entities/Messages/EmbedBuilder.cs | 62 +++++++++++++++++++ .../Extensions/EmbedBuilderExtensions.cs | 5 ++ 4 files changed, 70 insertions(+), 3 deletions(-) diff --git a/src/Discord.Net.Core/Entities/Messages/Embed.cs b/src/Discord.Net.Core/Entities/Messages/Embed.cs index 5fae7acde..8e7f67879 100644 --- a/src/Discord.Net.Core/Entities/Messages/Embed.cs +++ b/src/Discord.Net.Core/Entities/Messages/Embed.cs @@ -57,7 +57,7 @@ namespace Discord Fields = fields; } - public int Length => Title?.Length + Author?.Name?.Length + Description?.Length + Footer?.Text?.Length + Fields.Sum(f => f.Name.Length + f.Value.ToString().Length) ?? 0; + public int Length => Title?.Length + Author?.Name?.Length + Description?.Length + Footer?.Text?.Length + Provider?.Name?.Length + Fields.Sum(f => f.Name.Length + f.Value.ToString().Length) ?? 0; public override string ToString() => Title; private string DebuggerDisplay => $"{Title} ({Type})"; diff --git a/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs b/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs index 24722b158..f26dfba02 100644 --- a/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs +++ b/src/Discord.Net.Core/Entities/Messages/EmbedProvider.cs @@ -6,8 +6,8 @@ namespace Discord [DebuggerDisplay("{DebuggerDisplay,nq}")] public struct EmbedProvider { - public string Name { get; } - public string Url { get; } + public string Name { get; internal set; } + public string Url { get; internal set; } internal EmbedProvider(string name, string url) { diff --git a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs index f5663cea3..fe894ecd9 100644 --- a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs @@ -71,6 +71,7 @@ namespace Discord public EmbedAuthorBuilder Author { get; set; } public EmbedFooterBuilder Footer { get; set; } + public EmbedProviderBuilder Provider { get; set; } private List _fields; public List Fields { @@ -171,6 +172,31 @@ namespace Discord return this; } + public EmbedBuilder WithProvider(EmbedProviderBuilder provider) + { + Provider = provider; + return this; + } + + public EmbedBuilder WithProvider(Action action) + { + var provider = new EmbedProviderBuilder(); + action(provider); + Provider = provider; + return this; + } + + public EmbedBuilder WithProvider(string name, string url = null) + { + var provider = new EmbedProviderBuilder + { + Name = name, + Url = url + }; + Provider = provider; + return this; + } + public EmbedBuilder AddField(string name, object value, bool inline = false) { var field = new EmbedFieldBuilder() @@ -203,6 +229,7 @@ namespace Discord { _embed.Footer = Footer?.Build(); _embed.Author = Author?.Build(); + _embed.Provider = Provider?.Build(); var fields = ImmutableArray.CreateBuilder(Fields.Count); for (int i = 0; i < Fields.Count; i++) fields.Add(Fields[i].Build()); @@ -376,4 +403,39 @@ namespace Discord public EmbedFooter Build() => _footer; } + + public class EmbedProviderBuilder + { + private EmbedProvider _provider; + + public string Name + { + get => _provider.Name; + set => _provider.Name = value; + } + + public string Url + { + get => _provider.Url; + set + { + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(Url)); + } + } + + public EmbedProviderBuilder WithName(string name) + { + Name = name; + return this; + } + + public EmbedProviderBuilder WithUrl(string url) + { + Url = url; + return this; + } + + public EmbedProvider Build() + => _provider; + } } diff --git a/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs b/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs index 2eb4ed473..9b62072cb 100644 --- a/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs +++ b/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs @@ -43,6 +43,11 @@ namespace Discord IconUrl = embed.Footer?.IconUrl }, ImageUrl = embed.Image?.Url, + Provider = new EmbedProviderBuilder + { + Name = embed.Provider?.Name, + Url = embed.Provider?.Url + }, ThumbnailUrl = embed.Thumbnail?.Url, Timestamp = embed.Timestamp, Title = embed.Title, From 28d44d586d30d13b701d9d6364872526b8272caf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sun, 7 Jan 2018 16:26:00 +0900 Subject: [PATCH 7/7] Add Embed Video Structure into EmbedBuilder --- .../Entities/Messages/EmbedBuilder.cs | 14 ++++++++++++++ .../Extensions/EmbedBuilderExtensions.cs | 3 ++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs index fe894ecd9..6abf551e0 100644 --- a/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs +++ b/src/Discord.Net.Rest/Entities/Messages/EmbedBuilder.cs @@ -66,6 +66,15 @@ namespace Discord _embed.Image = new EmbedImage(value, null, null, null); } } + public string VideoUrl + { + get => _embed.Video?.Url; + set + { + if (!value.IsNullOrUri()) throw new ArgumentException("Url must be a well-formed URI", nameof(VideoUrl)); + _embed.Video = new EmbedVideo(value, null, null); + } + } public DateTimeOffset? Timestamp { get => _embed.Timestamp; set { _embed.Timestamp = value; } } public Color? Color { get => _embed.Color; set { _embed.Color = value; } } @@ -110,6 +119,11 @@ namespace Discord ImageUrl = imageUrl; return this; } + public EmbedBuilder WithVideoUrl(string videoUrl) + { + VideoUrl = videoUrl; + return this; + } public EmbedBuilder WithCurrentTimestamp() { Timestamp = DateTimeOffset.UtcNow; diff --git a/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs b/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs index 9b62072cb..c8c15f042 100644 --- a/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs +++ b/src/Discord.Net.Rest/Extensions/EmbedBuilderExtensions.cs @@ -51,7 +51,8 @@ namespace Discord ThumbnailUrl = embed.Thumbnail?.Url, Timestamp = embed.Timestamp, Title = embed.Title, - Url = embed.Url + Url = embed.Url, + VideoUrl = embed.Video?.Url }; foreach (var field in embed.Fields)