| @@ -31,7 +31,7 @@ namespace Discord.Net.Tests | |||
| Task.WaitAll(_bot2.Servers.Select(x => _bot2.LeaveServer(x)).ToArray()); | |||
| //Create new server and invite other bot to it | |||
| _testServer = _bot1.CreateServer("Discord.Net Testbed", Regions.US_East).Result; | |||
| _testServer = _bot1.CreateServer("Discord.Net Testing", Regions.US_East).Result; | |||
| _testServerChannel = _testServer.DefaultChannel; | |||
| Invite invite = _bot1.CreateInvite(_testServer, 60, 1, false, false).Result; | |||
| _bot2.AcceptInvite(invite).Wait(); | |||
| @@ -41,6 +41,11 @@ namespace Discord.API | |||
| var request = new APIRequests.CreateChannel { Name = name, Type = channelType }; | |||
| return Http.Post<APIResponses.CreateChannel>(Endpoints.ServerChannels(serverId), request, options); | |||
| } | |||
| public static Task<APIResponses.CreateChannel> CreatePMChannel(string myId, string recipientId, HttpOptions options) | |||
| { | |||
| var request = new APIRequests.CreatePMChannel { RecipientId = recipientId }; | |||
| return Http.Post<APIResponses.CreateChannel>(Endpoints.UserChannels(myId), request, options); | |||
| } | |||
| public static Task<APIResponses.DestroyChannel> DestroyChannel(string channelId, HttpOptions options) | |||
| => Http.Delete<APIResponses.DestroyChannel>(Endpoints.Channel(channelId), options); | |||
| public static Task<APIResponses.GetMessages[]> GetMessages(string channelId, HttpOptions options) | |||
| @@ -16,6 +16,14 @@ | |||
| public static readonly string AuthLogin = $"{Auth}/login"; | |||
| public static readonly string AuthLogout = $"{Auth}/logout"; | |||
| // /api/channels | |||
| public static readonly string Channels = $"{BaseApi}/channels"; | |||
| public static string Channel(string id) => $"{Channels}/{id}"; | |||
| public static string ChannelTyping(string id) => $"{Channels}/{id}/typing"; | |||
| public static string ChannelMessages(string id) => $"{Channels}/{id}/messages"; | |||
| public static string ChannelMessages(string id, int limit) => $"{Channels}/{id}/messages?limit={limit}"; | |||
| public static string ChannelInvites(string id) => $"{Channels}/{id}/invites"; | |||
| // /api/guilds | |||
| public static readonly string Servers = $"{BaseApi}/guilds"; | |||
| public static string Server(string id) => $"{Servers}/{id}"; | |||
| @@ -27,15 +35,11 @@ | |||
| public static readonly string Invites = $"{BaseApi}/invite"; | |||
| public static string Invite(string id) => $"{Invites}/{id}"; | |||
| // /api/channels | |||
| public static readonly string Channels = $"{BaseApi}/channels"; | |||
| public static string Channel(string id) => $"{Channels}/{id}"; | |||
| public static string ChannelTyping(string id) => $"{Channels}/{id}/typing"; | |||
| public static string ChannelMessages(string id) => $"{Channels}/{id}/messages"; | |||
| public static string ChannelMessages(string id, int limit) => $"{Channels}/{id}/messages?limit={limit}"; | |||
| public static string ChannelInvites(string id) => $"{Channels}/{id}/invites"; | |||
| // /api/users | |||
| public static readonly string Users = $"{BaseApi}/users"; | |||
| public static string UserChannels(string id) => $"{Users}/{id}/channels"; | |||
| // /api/voice | |||
| // /api/voice | |||
| public static readonly string Voice = $"{BaseApi}/voice"; | |||
| public static readonly string VoiceRegions = $"{Voice}/regions"; | |||
| public static readonly string VoiceIce = $"{Voice}/ice"; | |||
| @@ -38,6 +38,11 @@ namespace Discord.API.Models | |||
| [JsonProperty(PropertyName = "type")] | |||
| public string Type; | |||
| } | |||
| public class CreatePMChannel | |||
| { | |||
| [JsonProperty(PropertyName = "recipient_id")] | |||
| public string RecipientId; | |||
| } | |||
| public class CreateInvite | |||
| { | |||
| @@ -444,16 +444,15 @@ namespace Discord | |||
| } | |||
| public Task<Server> LeaveServer(Server server) | |||
| => LeaveServer(server.Id); | |||
| public async Task<Server> LeaveServer(string id) | |||
| public async Task<Server> LeaveServer(string serverId) | |||
| { | |||
| CheckReady(); | |||
| try | |||
| { | |||
| await DiscordAPI.LeaveServer(id, _httpOptions); | |||
| await DiscordAPI.LeaveServer(serverId, _httpOptions); | |||
| } | |||
| //Happens if the room was destroyed as we try to leave it | |||
| catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) {} | |||
| return _servers.Remove(id); | |||
| return _servers.Remove(serverId); | |||
| } | |||
| //Channels | |||
| @@ -465,13 +464,25 @@ namespace Discord | |||
| var response = await DiscordAPI.CreateChannel(serverId, name, region, _httpOptions); | |||
| return _channels.Update(response.Id, response); | |||
| } | |||
| public Task<Channel> CreatePMChannel(User user, string name, string region) | |||
| => CreateChannel(user.Id, name, region); | |||
| public async Task<Channel> CreatePMChannel(string recipientId, string name, string region) | |||
| { | |||
| CheckReady(); | |||
| var response = await DiscordAPI.CreatePMChannel(UserId, recipientId, _httpOptions); | |||
| return _channels.Update(response.Id, response); | |||
| } | |||
| public Task<Channel> DestroyChannel(Channel channel) | |||
| => DestroyChannel(channel.Id); | |||
| public async Task<Channel> DestroyChannel(string channelId) | |||
| { | |||
| CheckReady(); | |||
| var response = await DiscordAPI.DestroyChannel(channelId, _httpOptions); | |||
| return _channels.Remove(response.Id); | |||
| try | |||
| { | |||
| var response = await DiscordAPI.DestroyChannel(channelId, _httpOptions); | |||
| } | |||
| catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } | |||
| return _channels.Remove(channelId); | |||
| } | |||
| //Bans | |||
| @@ -492,10 +503,14 @@ namespace Discord | |||
| => Unban(server.Id, userId); | |||
| public Task Unban(string server, User user) | |||
| => Unban(server, user.Id); | |||
| public Task Unban(string serverId, string userId) | |||
| public async Task Unban(string serverId, string userId) | |||
| { | |||
| CheckReady(); | |||
| return DiscordAPI.Unban(serverId, userId, _httpOptions); | |||
| try | |||
| { | |||
| await DiscordAPI.Unban(serverId, userId, _httpOptions); | |||
| } | |||
| catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } | |||
| } | |||
| @@ -553,9 +568,13 @@ namespace Discord | |||
| public async Task DeleteInvite(string id) | |||
| { | |||
| CheckReady(); | |||
| //Check if this is a human-readable link and get its ID | |||
| var response = await DiscordAPI.GetInvite(id, _httpOptions); | |||
| await DiscordAPI.DeleteInvite(response.Code, _httpOptions); | |||
| try | |||
| { | |||
| //Check if this is a human-readable link and get its ID | |||
| var response = await DiscordAPI.GetInvite(id, _httpOptions); | |||
| await DiscordAPI.DeleteInvite(response.Code, _httpOptions); | |||
| } | |||
| catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) { } | |||
| } | |||
| //Chat | |||