@@ -1,4 +1,4 @@ | |||||
using Discord.Audio; | |||||
using Discord.Audio; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -91,9 +91,9 @@ namespace Discord | |||||
Task<ITextChannel> GetDefaultChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | Task<ITextChannel> GetDefaultChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | ||||
Task<IGuildChannel> GetEmbedChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | Task<IGuildChannel> GetEmbedChannelAsync(CacheMode mode = CacheMode.AllowDownload, RequestOptions options = null); | ||||
/// <summary> Creates a new text channel. </summary> | /// <summary> Creates a new text channel. </summary> | ||||
Task<ITextChannel> CreateTextChannelAsync(string name, RequestOptions options = null); | |||||
Task<ITextChannel> CreateTextChannelAsync(string name, RequestOptions options = null, Action<TextChannelProperties> func = null); | |||||
/// <summary> Creates a new voice channel. </summary> | /// <summary> Creates a new voice channel. </summary> | ||||
Task<IVoiceChannel> CreateVoiceChannelAsync(string name, RequestOptions options = null); | |||||
Task<IVoiceChannel> CreateVoiceChannelAsync(string name, RequestOptions options = null, Action<VoiceChannelProperties> func = null); | |||||
/// <summary> Creates a new channel category. </summary> | /// <summary> Creates a new channel category. </summary> | ||||
Task<ICategoryChannel> CreateCategoryAsync(string name, RequestOptions options = null); | Task<ICategoryChannel> CreateCategoryAsync(string name, RequestOptions options = null); | ||||
@@ -135,4 +135,4 @@ namespace Discord | |||||
/// <summary> Deletes an existing emote from this guild. </summary> | /// <summary> Deletes an existing emote from this guild. </summary> | ||||
Task DeleteEmoteAsync(GuildEmote emote, RequestOptions options = null); | Task DeleteEmoteAsync(GuildEmote emote, RequestOptions options = null); | ||||
} | } | ||||
} | |||||
} |
@@ -1,4 +1,4 @@ | |||||
#pragma warning disable CS1591 | |||||
#pragma warning disable CS1591 | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
namespace Discord.API.Rest | namespace Discord.API.Rest | ||||
@@ -10,9 +10,20 @@ namespace Discord.API.Rest | |||||
public string Name { get; } | public string Name { get; } | ||||
[JsonProperty("type")] | [JsonProperty("type")] | ||||
public ChannelType Type { get; } | public ChannelType Type { get; } | ||||
[JsonProperty("parent_id")] | |||||
public Optional<ulong?> CategoryId { get; set; } | |||||
//Text channels | |||||
[JsonProperty("topic")] | |||||
public Optional<string> Topic { get; set; } | |||||
[JsonProperty("nsfw")] | |||||
public Optional<bool> IsNsfw { get; set; } | |||||
//Voice channels | |||||
[JsonProperty("bitrate")] | [JsonProperty("bitrate")] | ||||
public Optional<int> Bitrate { get; set; } | public Optional<int> Bitrate { get; set; } | ||||
[JsonProperty("user_limit")] | |||||
public Optional<int?> UserLimit { get; set; } | |||||
public CreateGuildChannelParams(string name, ChannelType type) | public CreateGuildChannelParams(string name, ChannelType type) | ||||
{ | { | ||||
@@ -1,4 +1,4 @@ | |||||
using Discord.API.Rest; | |||||
using Discord.API.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -140,20 +140,36 @@ namespace Discord.Rest | |||||
return models.Select(x => RestGuildChannel.Create(client, guild, x)).ToImmutableArray(); | return models.Select(x => RestGuildChannel.Create(client, guild, x)).ToImmutableArray(); | ||||
} | } | ||||
public static async Task<RestTextChannel> CreateTextChannelAsync(IGuild guild, BaseDiscordClient client, | public static async Task<RestTextChannel> CreateTextChannelAsync(IGuild guild, BaseDiscordClient client, | ||||
string name, RequestOptions options) | |||||
string name, RequestOptions options, Action<TextChannelProperties> func = null) | |||||
{ | { | ||||
if (name == null) throw new ArgumentNullException(nameof(name)); | if (name == null) throw new ArgumentNullException(nameof(name)); | ||||
var args = new CreateGuildChannelParams(name, ChannelType.Text); | |||||
var props = new TextChannelProperties(); | |||||
func?.Invoke(props); | |||||
var args = new CreateGuildChannelParams(name, ChannelType.Text) | |||||
{ | |||||
CategoryId = props.CategoryId, | |||||
Topic = props.Topic, | |||||
IsNsfw = props.IsNsfw | |||||
}; | |||||
var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); | var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); | ||||
return RestTextChannel.Create(client, guild, model); | return RestTextChannel.Create(client, guild, model); | ||||
} | } | ||||
public static async Task<RestVoiceChannel> CreateVoiceChannelAsync(IGuild guild, BaseDiscordClient client, | public static async Task<RestVoiceChannel> CreateVoiceChannelAsync(IGuild guild, BaseDiscordClient client, | ||||
string name, RequestOptions options) | |||||
string name, RequestOptions options, Action<VoiceChannelProperties> func = null) | |||||
{ | { | ||||
if (name == null) throw new ArgumentNullException(nameof(name)); | if (name == null) throw new ArgumentNullException(nameof(name)); | ||||
var args = new CreateGuildChannelParams(name, ChannelType.Voice); | |||||
var props = new VoiceChannelProperties(); | |||||
func?.Invoke(props); | |||||
var args = new CreateGuildChannelParams(name, ChannelType.Voice) | |||||
{ | |||||
CategoryId = props.CategoryId, | |||||
Bitrate = props.Bitrate, | |||||
UserLimit = props.UserLimit | |||||
}; | |||||
var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); | var model = await client.ApiClient.CreateGuildChannelAsync(guild.Id, args, options).ConfigureAwait(false); | ||||
return RestVoiceChannel.Create(client, guild, model); | return RestVoiceChannel.Create(client, guild, model); | ||||
} | } | ||||
@@ -1,4 +1,4 @@ | |||||
using Discord.Audio; | |||||
using Discord.Audio; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -218,10 +218,10 @@ namespace Discord.Rest | |||||
} | } | ||||
return null; | return null; | ||||
} | } | ||||
public Task<RestTextChannel> CreateTextChannelAsync(string name, RequestOptions options = null) | |||||
=> GuildHelper.CreateTextChannelAsync(this, Discord, name, options); | |||||
public Task<RestVoiceChannel> CreateVoiceChannelAsync(string name, RequestOptions options = null) | |||||
=> GuildHelper.CreateVoiceChannelAsync(this, Discord, name, options); | |||||
public Task<RestTextChannel> CreateTextChannelAsync(string name, RequestOptions options = null, Action<TextChannelProperties> func = null) | |||||
=> GuildHelper.CreateTextChannelAsync(this, Discord, name, options, func); | |||||
public Task<RestVoiceChannel> CreateVoiceChannelAsync(string name, RequestOptions options = null, Action<VoiceChannelProperties> func = null) | |||||
=> GuildHelper.CreateVoiceChannelAsync(this, Discord, name, options, func); | |||||
public Task<RestCategoryChannel> CreateCategoryChannelAsync(string name, RequestOptions options = null) | public Task<RestCategoryChannel> CreateCategoryChannelAsync(string name, RequestOptions options = null) | ||||
=> GuildHelper.CreateCategoryChannelAsync(this, Discord, name, options); | => GuildHelper.CreateCategoryChannelAsync(this, Discord, name, options); | ||||
@@ -369,10 +369,10 @@ namespace Discord.Rest | |||||
else | else | ||||
return null; | return null; | ||||
} | } | ||||
async Task<ITextChannel> IGuild.CreateTextChannelAsync(string name, RequestOptions options) | |||||
=> await CreateTextChannelAsync(name, options).ConfigureAwait(false); | |||||
async Task<IVoiceChannel> IGuild.CreateVoiceChannelAsync(string name, RequestOptions options) | |||||
=> await CreateVoiceChannelAsync(name, options).ConfigureAwait(false); | |||||
async Task<ITextChannel> IGuild.CreateTextChannelAsync(string name, RequestOptions options, Action<TextChannelProperties> func) | |||||
=> await CreateTextChannelAsync(name, options, func).ConfigureAwait(false); | |||||
async Task<IVoiceChannel> IGuild.CreateVoiceChannelAsync(string name, RequestOptions options, Action<VoiceChannelProperties> func) | |||||
=> await CreateVoiceChannelAsync(name, options, func).ConfigureAwait(false); | |||||
async Task<ICategoryChannel> IGuild.CreateCategoryAsync(string name, RequestOptions options) | async Task<ICategoryChannel> IGuild.CreateCategoryAsync(string name, RequestOptions options) | ||||
=> await CreateCategoryChannelAsync(name, options).ConfigureAwait(false); | => await CreateCategoryChannelAsync(name, options).ConfigureAwait(false); | ||||
@@ -311,10 +311,10 @@ namespace Discord.WebSocket | |||||
=> GetChannel(id) as SocketTextChannel; | => GetChannel(id) as SocketTextChannel; | ||||
public SocketVoiceChannel GetVoiceChannel(ulong id) | public SocketVoiceChannel GetVoiceChannel(ulong id) | ||||
=> GetChannel(id) as SocketVoiceChannel; | => GetChannel(id) as SocketVoiceChannel; | ||||
public Task<RestTextChannel> CreateTextChannelAsync(string name, RequestOptions options = null) | |||||
=> GuildHelper.CreateTextChannelAsync(this, Discord, name, options); | |||||
public Task<RestVoiceChannel> CreateVoiceChannelAsync(string name, RequestOptions options = null) | |||||
=> GuildHelper.CreateVoiceChannelAsync(this, Discord, name, options); | |||||
public Task<RestTextChannel> CreateTextChannelAsync(string name, RequestOptions options = null, Action<TextChannelProperties> func = null) | |||||
=> GuildHelper.CreateTextChannelAsync(this, Discord, name, options, func); | |||||
public Task<RestVoiceChannel> CreateVoiceChannelAsync(string name, RequestOptions options = null, Action<VoiceChannelProperties> func = null) | |||||
=> GuildHelper.CreateVoiceChannelAsync(this, Discord, name, options, func); | |||||
public Task<RestCategoryChannel> CreateCategoryChannelAsync(string name, RequestOptions options = null) | public Task<RestCategoryChannel> CreateCategoryChannelAsync(string name, RequestOptions options = null) | ||||
=> GuildHelper.CreateCategoryChannelAsync(this, Discord, name, options); | => GuildHelper.CreateCategoryChannelAsync(this, Discord, name, options); | ||||
@@ -664,10 +664,10 @@ namespace Discord.WebSocket | |||||
=> Task.FromResult<IGuildChannel>(EmbedChannel); | => Task.FromResult<IGuildChannel>(EmbedChannel); | ||||
Task<ITextChannel> IGuild.GetSystemChannelAsync(CacheMode mode, RequestOptions options) | Task<ITextChannel> IGuild.GetSystemChannelAsync(CacheMode mode, RequestOptions options) | ||||
=> Task.FromResult<ITextChannel>(SystemChannel); | => Task.FromResult<ITextChannel>(SystemChannel); | ||||
async Task<ITextChannel> IGuild.CreateTextChannelAsync(string name, RequestOptions options) | |||||
=> await CreateTextChannelAsync(name, options).ConfigureAwait(false); | |||||
async Task<IVoiceChannel> IGuild.CreateVoiceChannelAsync(string name, RequestOptions options) | |||||
=> await CreateVoiceChannelAsync(name, options).ConfigureAwait(false); | |||||
async Task<ITextChannel> IGuild.CreateTextChannelAsync(string name, RequestOptions options, Action<TextChannelProperties> func) | |||||
=> await CreateTextChannelAsync(name, options, func).ConfigureAwait(false); | |||||
async Task<IVoiceChannel> IGuild.CreateVoiceChannelAsync(string name, RequestOptions options, Action<VoiceChannelProperties> func) | |||||
=> await CreateVoiceChannelAsync(name, options, func).ConfigureAwait(false); | |||||
async Task<ICategoryChannel> IGuild.CreateCategoryAsync(string name, RequestOptions options) | async Task<ICategoryChannel> IGuild.CreateCategoryAsync(string name, RequestOptions options) | ||||
=> await CreateCategoryChannelAsync(name, options).ConfigureAwait(false); | => await CreateCategoryChannelAsync(name, options).ConfigureAwait(false); | ||||