@@ -31,7 +31,7 @@ namespace Discord.Net.Tests | |||||
Task.WaitAll(_bot2.Servers.Select(x => _bot2.LeaveServer(x)).ToArray()); | Task.WaitAll(_bot2.Servers.Select(x => _bot2.LeaveServer(x)).ToArray()); | ||||
//Create new server and invite other bot to it | //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; | _testServerChannel = _testServer.DefaultChannel; | ||||
Invite invite = _bot1.CreateInvite(_testServer, 60, 1, false, false).Result; | Invite invite = _bot1.CreateInvite(_testServer, 60, 1, false, false).Result; | ||||
_bot2.AcceptInvite(invite).Wait(); | _bot2.AcceptInvite(invite).Wait(); | ||||
@@ -41,6 +41,11 @@ namespace Discord.API | |||||
var request = new APIRequests.CreateChannel { Name = name, Type = channelType }; | var request = new APIRequests.CreateChannel { Name = name, Type = channelType }; | ||||
return Http.Post<APIResponses.CreateChannel>(Endpoints.ServerChannels(serverId), request, options); | 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) | public static Task<APIResponses.DestroyChannel> DestroyChannel(string channelId, HttpOptions options) | ||||
=> Http.Delete<APIResponses.DestroyChannel>(Endpoints.Channel(channelId), options); | => Http.Delete<APIResponses.DestroyChannel>(Endpoints.Channel(channelId), options); | ||||
public static Task<APIResponses.GetMessages[]> GetMessages(string channelId, HttpOptions 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 AuthLogin = $"{Auth}/login"; | ||||
public static readonly string AuthLogout = $"{Auth}/logout"; | 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 | // /api/guilds | ||||
public static readonly string Servers = $"{BaseApi}/guilds"; | public static readonly string Servers = $"{BaseApi}/guilds"; | ||||
public static string Server(string id) => $"{Servers}/{id}"; | public static string Server(string id) => $"{Servers}/{id}"; | ||||
@@ -27,15 +35,11 @@ | |||||
public static readonly string Invites = $"{BaseApi}/invite"; | public static readonly string Invites = $"{BaseApi}/invite"; | ||||
public static string Invite(string id) => $"{Invites}/{id}"; | 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 Voice = $"{BaseApi}/voice"; | ||||
public static readonly string VoiceRegions = $"{Voice}/regions"; | public static readonly string VoiceRegions = $"{Voice}/regions"; | ||||
public static readonly string VoiceIce = $"{Voice}/ice"; | public static readonly string VoiceIce = $"{Voice}/ice"; | ||||
@@ -38,6 +38,11 @@ namespace Discord.API.Models | |||||
[JsonProperty(PropertyName = "type")] | [JsonProperty(PropertyName = "type")] | ||||
public string Type; | public string Type; | ||||
} | } | ||||
public class CreatePMChannel | |||||
{ | |||||
[JsonProperty(PropertyName = "recipient_id")] | |||||
public string RecipientId; | |||||
} | |||||
public class CreateInvite | public class CreateInvite | ||||
{ | { | ||||
@@ -444,16 +444,15 @@ namespace Discord | |||||
} | } | ||||
public Task<Server> LeaveServer(Server server) | public Task<Server> LeaveServer(Server server) | ||||
=> LeaveServer(server.Id); | => LeaveServer(server.Id); | ||||
public async Task<Server> LeaveServer(string id) | |||||
public async Task<Server> LeaveServer(string serverId) | |||||
{ | { | ||||
CheckReady(); | CheckReady(); | ||||
try | 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) {} | catch (WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound) {} | ||||
return _servers.Remove(id); | |||||
return _servers.Remove(serverId); | |||||
} | } | ||||
//Channels | //Channels | ||||
@@ -465,13 +464,25 @@ namespace Discord | |||||
var response = await DiscordAPI.CreateChannel(serverId, name, region, _httpOptions); | var response = await DiscordAPI.CreateChannel(serverId, name, region, _httpOptions); | ||||
return _channels.Update(response.Id, response); | 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) | public Task<Channel> DestroyChannel(Channel channel) | ||||
=> DestroyChannel(channel.Id); | => DestroyChannel(channel.Id); | ||||
public async Task<Channel> DestroyChannel(string channelId) | public async Task<Channel> DestroyChannel(string channelId) | ||||
{ | { | ||||
CheckReady(); | 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 | //Bans | ||||
@@ -492,10 +503,14 @@ namespace Discord | |||||
=> Unban(server.Id, userId); | => Unban(server.Id, userId); | ||||
public Task Unban(string server, User user) | public Task Unban(string server, User user) | ||||
=> Unban(server, user.Id); | => Unban(server, user.Id); | ||||
public Task Unban(string serverId, string userId) | |||||
public async Task Unban(string serverId, string userId) | |||||
{ | { | ||||
CheckReady(); | 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) | public async Task DeleteInvite(string id) | ||||
{ | { | ||||
CheckReady(); | 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 | //Chat | ||||