| @@ -40,4 +40,17 @@ public class WelcomeScreenChannel : ISnowflakeEntity | |||
| Emoji = null; | |||
| } | |||
| /// <summary> | |||
| /// Initializes a new instance of <see cref="WelcomeScreenChannel"/> to be used to modify one. | |||
| /// </summary> | |||
| /// <param name="id"></param> | |||
| /// <param name="description"></param> | |||
| /// <param name="emoji"></param> | |||
| public WelcomeScreenChannel(ulong id, string description, IEmote emoji) | |||
| { | |||
| Id = id; | |||
| Description = description; | |||
| Emoji = emoji; | |||
| } | |||
| } | |||
| @@ -0,0 +1,17 @@ | |||
| using Newtonsoft.Json; | |||
| namespace Discord.API.Rest; | |||
| [JsonObject(MemberSerialization = MemberSerialization.OptIn)] | |||
| internal class ModifyGuildWelcomeScreenParams | |||
| { | |||
| [JsonProperty("enabled")] | |||
| public Optional<bool> Enabled { get; set; } | |||
| [JsonProperty("welcome_channels")] | |||
| public Optional<WelcomeScreenChannel> Channels { get; set; } | |||
| [JsonProperty("description")] | |||
| public Optional<string> Description { get; set; } | |||
| } | |||
| @@ -1589,18 +1589,6 @@ namespace Discord.API | |||
| var ids = new BucketIds(guildId: guildId); | |||
| return await SendAsync<GetGuildPruneCountResponse>("GET", () => $"guilds/{guildId}/prune?days={args.Days}{endpointRoleIds}", ids, options: options).ConfigureAwait(false); | |||
| } | |||
| public async Task<WelcomeScreen> GetGuildWelcomeScreenAsync(ulong guildId, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | |||
| options = RequestOptions.CreateOrClone(options); | |||
| try | |||
| { | |||
| var ids = new BucketIds(guildId: guildId); | |||
| return await SendAsync<WelcomeScreen>("GET", () => $"guilds/{guildId}/welcome-screen", ids, options: options).ConfigureAwait(false); | |||
| } | |||
| catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.NotFound) { return null; } | |||
| } | |||
| #endregion | |||
| #region Guild Bans | |||
| @@ -2109,6 +2097,35 @@ namespace Discord.API | |||
| #endregion | |||
| #region Guild Welcome Screen | |||
| public async Task<WelcomeScreen> GetGuildWelcomeScreenAsync(ulong guildId, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | |||
| options = RequestOptions.CreateOrClone(options); | |||
| try | |||
| { | |||
| var ids = new BucketIds(guildId: guildId); | |||
| return await SendAsync<WelcomeScreen>("GET", () => $"guilds/{guildId}/welcome-screen", ids, options: options).ConfigureAwait(false); | |||
| } | |||
| catch (HttpException ex) when (ex.HttpCode == HttpStatusCode.NotFound) { return null; } | |||
| } | |||
| public async Task<WelcomeScreen> ModifyGuildWelcomeScreenAsync(ModifyGuildWelcomeScreenParams args, ulong guildId, RequestOptions options = null) | |||
| { | |||
| Preconditions.NotEqual(guildId, 0, nameof(guildId)); | |||
| Preconditions.NotNull(args, nameof(args)); | |||
| options = RequestOptions.CreateOrClone(options); | |||
| var ids = new BucketIds(guildId: guildId); | |||
| return await SendJsonAsync<WelcomeScreen>("PATCH", () => $"guilds/{guildId}/welcome-screen", args, ids, options: options).ConfigureAwait(false); | |||
| } | |||
| #endregion | |||
| #region Users | |||
| public async Task<User> GetUserAsync(ulong userId, RequestOptions options = null) | |||
| { | |||
| @@ -393,16 +393,6 @@ namespace Discord.Rest | |||
| return RestInviteMetadata.Create(client, guild, null, inviteModel); | |||
| } | |||
| public static async Task<WelcomeScreen> GetWelcomeScreenAsync(IGuild guild, BaseDiscordClient client, RequestOptions options) | |||
| { | |||
| var model = await client.ApiClient.GetGuildWelcomeScreenAsync(guild.Id, options); | |||
| return new WelcomeScreen(model.Description.GetValueOrDefault(null), model.WelcomeChannels.Select( | |||
| x => new WelcomeScreenChannel( | |||
| x.ChannelId, x.Description, | |||
| x.EmojiName.GetValueOrDefault(null), | |||
| x.EmojiId.GetValueOrDefault(0))).ToList()); | |||
| } | |||
| #endregion | |||
| #region Roles | |||
| @@ -954,5 +944,31 @@ namespace Discord.Rest | |||
| } | |||
| #endregion | |||
| #region Welcome Screen | |||
| public static async Task<WelcomeScreen> GetWelcomeScreenAsync(IGuild guild, BaseDiscordClient client, RequestOptions options) | |||
| { | |||
| var model = await client.ApiClient.GetGuildWelcomeScreenAsync(guild.Id, options); | |||
| return new WelcomeScreen(model.Description.GetValueOrDefault(null), model.WelcomeChannels.Select( | |||
| x => new WelcomeScreenChannel( | |||
| x.ChannelId, x.Description, | |||
| x.EmojiName.GetValueOrDefault(null), | |||
| x.EmojiId.GetValueOrDefault(0))).ToList()); | |||
| } | |||
| public static async Task<WelcomeScreen> ModifyWelcomeScreenAsync(IGuild guild, BaseDiscordClient client, RequestOptions options) | |||
| { | |||
| var model = await client.ApiClient.ModifyGuildWelcomeScreenAsync(null, guild.Id, options); | |||
| return new WelcomeScreen(model.Description.GetValueOrDefault(null), model.WelcomeChannels.Select( | |||
| x => new WelcomeScreenChannel( | |||
| x.ChannelId, x.Description, | |||
| x.EmojiName.GetValueOrDefault(null), | |||
| x.EmojiId.GetValueOrDefault(0))).ToList()); | |||
| } | |||
| #endregion | |||
| } | |||
| } | |||