* Fix #1381 Guild PreferredLocale support Adds support for getting and modifying a guild's preferred_locale. This is a language tag in IETF BCP 47 format, which works with the built-in CultureInfo. While Discord only supports a number of cultures, I think that this restriction should be handled at the API and not by the wrapper. (Also easier on our end) * Add PreferredCulture to IGuild This property was defined in RestGuild and SocketGuild, so it only makes sense to make it part of IGuild as well.tags/2.2.0
@@ -1,3 +1,5 @@ | |||||
using System.Globalization; | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
/// <summary> | /// <summary> | ||||
@@ -84,5 +86,23 @@ namespace Discord | |||||
/// are enabled, without the need to manipulate the logic of the flag. | /// are enabled, without the need to manipulate the logic of the flag. | ||||
/// </remarks> | /// </remarks> | ||||
public Optional<SystemChannelMessageDeny> SystemChannelFlags { get; set; } | public Optional<SystemChannelMessageDeny> SystemChannelFlags { get; set; } | ||||
/// <summary> | |||||
/// Gets or sets the preferred locale of the guild in IETF BCP 47 language tag format. | |||||
/// </summary> | |||||
/// <remarks> | |||||
/// This property takes precedence over <see cref="PreferredCulture"/>. | |||||
/// When it is set, the value of <see cref="PreferredCulture"/> | |||||
/// will not be used. | |||||
/// </remarks> | |||||
public Optional<string> PreferredLocale { get; set; } | |||||
/// <summary> | |||||
/// Gets or sets the preferred locale of the guild. | |||||
/// </summary> | |||||
/// <remarks> | |||||
/// The <see cref="PreferredLocale"/> property takes precedence | |||||
/// over this property. When <see cref="PreferredLocale"/> is set, | |||||
/// the value of <see cref="PreferredCulture"/> will be unused. | |||||
/// </remarks> | |||||
public Optional<CultureInfo> PreferredCulture { get; set; } | |||||
} | } | ||||
} | } |
@@ -1,6 +1,7 @@ | |||||
using Discord.Audio; | using Discord.Audio; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Globalization; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord | namespace Discord | ||||
@@ -249,6 +250,24 @@ namespace Discord | |||||
/// </returns> | /// </returns> | ||||
int PremiumSubscriptionCount { get; } | int PremiumSubscriptionCount { get; } | ||||
/// <summary> | |||||
/// Gets the preferred locale of this guild in IETF BCP 47 | |||||
/// language tag format. | |||||
/// </summary> | |||||
/// <returns> | |||||
/// The preferred locale of the guild in IETF BCP 47 | |||||
/// language tag format. | |||||
/// </returns> | |||||
string PreferredLocale { get; } | |||||
/// <summary> | |||||
/// Gets the preferred culture of this guild. | |||||
/// </summary> | |||||
/// <returns> | |||||
/// The preferred culture information of this guild. | |||||
/// </returns> | |||||
CultureInfo PreferredCulture { get; } | |||||
/// <summary> | /// <summary> | ||||
/// Modifies this guild. | /// Modifies this guild. | ||||
/// </summary> | /// </summary> | ||||
@@ -58,5 +58,7 @@ namespace Discord.API | |||||
public SystemChannelMessageDeny SystemChannelFlags { get; set; } | public SystemChannelMessageDeny SystemChannelFlags { get; set; } | ||||
[JsonProperty("premium_subscription_count")] | [JsonProperty("premium_subscription_count")] | ||||
public int? PremiumSubscriptionCount { get; set; } | public int? PremiumSubscriptionCount { get; set; } | ||||
[JsonProperty("preferred_locale")] | |||||
public string PreferredLocale { get; set; } | |||||
} | } | ||||
} | } |
@@ -32,5 +32,7 @@ namespace Discord.API.Rest | |||||
public Optional<ExplicitContentFilterLevel> ExplicitContentFilter { get; set; } | public Optional<ExplicitContentFilterLevel> ExplicitContentFilter { get; set; } | ||||
[JsonProperty("system_channel_flags")] | [JsonProperty("system_channel_flags")] | ||||
public Optional<SystemChannelMessageDeny> SystemChannelFlags { get; set; } | public Optional<SystemChannelMessageDeny> SystemChannelFlags { get; set; } | ||||
[JsonProperty("preferred_locale")] | |||||
public string PreferredLocale { get; set; } | |||||
} | } | ||||
} | } |
@@ -68,6 +68,12 @@ namespace Discord.Rest | |||||
if (args.SystemChannelFlags.IsSpecified) | if (args.SystemChannelFlags.IsSpecified) | ||||
apiArgs.SystemChannelFlags = args.SystemChannelFlags.Value; | apiArgs.SystemChannelFlags = args.SystemChannelFlags.Value; | ||||
// PreferredLocale takes precedence over PreferredCulture | |||||
if (args.PreferredLocale.IsSpecified) | |||||
apiArgs.PreferredLocale = args.PreferredLocale.Value; | |||||
else if (args.PreferredCulture.IsSpecified) | |||||
apiArgs.PreferredLocale = args.PreferredCulture.Value.Name; | |||||
return await client.ApiClient.ModifyGuildAsync(guild.Id, apiArgs, options).ConfigureAwait(false); | return await client.ApiClient.ModifyGuildAsync(guild.Id, apiArgs, options).ConfigureAwait(false); | ||||
} | } | ||||
/// <exception cref="ArgumentNullException"><paramref name="func"/> is <c>null</c>.</exception> | /// <exception cref="ArgumentNullException"><paramref name="func"/> is <c>null</c>.</exception> | ||||
@@ -3,6 +3,7 @@ using System; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using System.Globalization; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using EmbedModel = Discord.API.GuildEmbed; | using EmbedModel = Discord.API.GuildEmbed; | ||||
@@ -64,6 +65,11 @@ namespace Discord.Rest | |||||
public string Description { get; private set; } | public string Description { get; private set; } | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public int PremiumSubscriptionCount { get; private set; } | public int PremiumSubscriptionCount { get; private set; } | ||||
/// <inheritdoc /> | |||||
public string PreferredLocale { get; private set; } | |||||
/// <inheritdoc /> | |||||
public CultureInfo PreferredCulture { get; private set; } | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | ||||
@@ -124,6 +130,8 @@ namespace Discord.Rest | |||||
SystemChannelFlags = model.SystemChannelFlags; | SystemChannelFlags = model.SystemChannelFlags; | ||||
Description = model.Description; | Description = model.Description; | ||||
PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); | PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); | ||||
PreferredLocale = model.PreferredLocale; | |||||
PreferredCulture = new CultureInfo(PreferredLocale); | |||||
if (model.Emojis != null) | if (model.Emojis != null) | ||||
{ | { | ||||
@@ -5,6 +5,7 @@ using System.Collections.Concurrent; | |||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using System.Globalization; | |||||
using System.Linq; | using System.Linq; | ||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -105,6 +106,11 @@ namespace Discord.WebSocket | |||||
public string Description { get; private set; } | public string Description { get; private set; } | ||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public int PremiumSubscriptionCount { get; private set; } | public int PremiumSubscriptionCount { get; private set; } | ||||
/// <inheritdoc /> | |||||
public string PreferredLocale { get; private set; } | |||||
/// <inheritdoc /> | |||||
public CultureInfo PreferredCulture { get; private set; } | |||||
/// <inheritdoc /> | /// <inheritdoc /> | ||||
public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | public DateTimeOffset CreatedAt => SnowflakeUtils.FromSnowflake(Id); | ||||
@@ -374,6 +380,8 @@ namespace Discord.WebSocket | |||||
SystemChannelFlags = model.SystemChannelFlags; | SystemChannelFlags = model.SystemChannelFlags; | ||||
Description = model.Description; | Description = model.Description; | ||||
PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); | PremiumSubscriptionCount = model.PremiumSubscriptionCount.GetValueOrDefault(); | ||||
PreferredLocale = model.PreferredLocale; | |||||
PreferredCulture = new CultureInfo(PreferredLocale); | |||||
if (model.Emojis != null) | if (model.Emojis != null) | ||||
{ | { | ||||