@@ -40,7 +40,7 @@ namespace Discord.API | |||||
public bool IsPrivate; | public bool IsPrivate; | ||||
[JsonProperty("position")] | [JsonProperty("position")] | ||||
public int? Position; | public int? Position; | ||||
[JsonProperty(PropertyName = "topic")] | |||||
[JsonProperty("topic")] | |||||
public string Topic; | public string Topic; | ||||
[JsonProperty("permission_overwrites")] | [JsonProperty("permission_overwrites")] | ||||
public PermissionOverwrite[] PermissionOverwrites; | public PermissionOverwrite[] PermissionOverwrites; | ||||
@@ -1,6 +1,6 @@ | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
public enum AvatarImageType | |||||
public enum ImageType | |||||
{ | { | ||||
None, | None, | ||||
Jpeg, | Jpeg, | ||||
@@ -72,11 +72,11 @@ namespace Discord.API | |||||
public class EditMemberRequest | public class EditMemberRequest | ||||
{ | { | ||||
[JsonProperty(PropertyName = "mute", NullValueHandling = NullValueHandling.Ignore)] | |||||
[JsonProperty("mute", NullValueHandling = NullValueHandling.Ignore)] | |||||
public bool? Mute; | public bool? Mute; | ||||
[JsonProperty(PropertyName = "deaf", NullValueHandling = NullValueHandling.Ignore)] | |||||
[JsonProperty("deaf", NullValueHandling = NullValueHandling.Ignore)] | |||||
public bool? Deaf; | public bool? Deaf; | ||||
[JsonProperty(PropertyName = "roles", NullValueHandling = NullValueHandling.Ignore)] | |||||
[JsonProperty("roles", NullValueHandling = NullValueHandling.Ignore)] | |||||
public IEnumerable<string> Roles; | public IEnumerable<string> Roles; | ||||
} | } | ||||
@@ -67,6 +67,8 @@ namespace Discord.API | |||||
public string Name; | public string Name; | ||||
[JsonProperty("region", NullValueHandling = NullValueHandling.Ignore)] | [JsonProperty("region", NullValueHandling = NullValueHandling.Ignore)] | ||||
public string Region; | public string Region; | ||||
[JsonProperty("icon", NullValueHandling = NullValueHandling.Ignore)] | |||||
public string Icon; | |||||
} | } | ||||
public sealed class EditServerResponse : GuildInfo { } | public sealed class EditServerResponse : GuildInfo { } | ||||
@@ -29,15 +29,15 @@ namespace Discord.API | |||||
//Edit | //Edit | ||||
internal sealed class EditUserRequest | internal sealed class EditUserRequest | ||||
{ | { | ||||
[JsonProperty(PropertyName = "password")] | |||||
[JsonProperty("password")] | |||||
public string CurrentPassword; | public string CurrentPassword; | ||||
[JsonProperty(PropertyName = "email", NullValueHandling = NullValueHandling.Ignore)] | |||||
[JsonProperty("email", NullValueHandling = NullValueHandling.Ignore)] | |||||
public string Email; | public string Email; | ||||
[JsonProperty(PropertyName = "new_password")] | |||||
[JsonProperty("new_password")] | |||||
public string Password; | public string Password; | ||||
[JsonProperty(PropertyName = "username", NullValueHandling = NullValueHandling.Ignore)] | |||||
[JsonProperty("username", NullValueHandling = NullValueHandling.Ignore)] | |||||
public string Username; | public string Username; | ||||
[JsonProperty(PropertyName = "avatar", NullValueHandling = NullValueHandling.Ignore)] | |||||
[JsonProperty("avatar", NullValueHandling = NullValueHandling.Ignore)] | |||||
public string Avatar; | public string Avatar; | ||||
} | } | ||||
public sealed class EditUserResponse : UserInfo { } | public sealed class EditUserResponse : UserInfo { } | ||||
@@ -279,31 +279,22 @@ namespace Discord | |||||
return _rest.Delete<DeleteServerResponse>(Endpoints.Server(serverId)); | return _rest.Delete<DeleteServerResponse>(Endpoints.Server(serverId)); | ||||
} | } | ||||
public Task<EditServerResponse> EditServer(string serverId, string name = null, string region = null) | |||||
public Task<EditServerResponse> EditServer(string serverId, string name = null, string region = null, ImageType iconType = ImageType.Png, byte[] icon = null) | |||||
{ | { | ||||
if (serverId == null) throw new ArgumentNullException(nameof(serverId)); | if (serverId == null) throw new ArgumentNullException(nameof(serverId)); | ||||
var request = new EditServerRequest { Name = name, Region = region }; | |||||
var request = new EditServerRequest { Name = name, Region = region, Icon = Base64Picture(iconType, icon) }; | |||||
return _rest.Patch<EditServerResponse>(Endpoints.Server(serverId), request); | return _rest.Patch<EditServerResponse>(Endpoints.Server(serverId), request); | ||||
} | } | ||||
//User | //User | ||||
public Task<EditUserResponse> EditUser(string currentPassword = "", | public Task<EditUserResponse> EditUser(string currentPassword = "", | ||||
string username = null, string email = null, string password = null, | string username = null, string email = null, string password = null, | ||||
AvatarImageType avatarType = AvatarImageType.Png, byte[] avatar = null) | |||||
ImageType avatarType = ImageType.Png, byte[] avatar = null) | |||||
{ | { | ||||
if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); | if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); | ||||
string avatarBase64 = null; | |||||
if (avatarType == AvatarImageType.None) | |||||
avatarBase64 = ""; | |||||
else if (avatar != null) | |||||
{ | |||||
string base64 = Convert.ToBase64String(avatar); | |||||
string type = avatarType == AvatarImageType.Jpeg ? "image/jpeg;base64" : "image/png;base64"; | |||||
avatarBase64 = $"data:{type},{base64}"; | |||||
} | |||||
var request = new EditUserRequest { CurrentPassword = currentPassword, Username = username, Email = email, Password = password, Avatar = avatarBase64 }; | |||||
var request = new EditUserRequest { CurrentPassword = currentPassword, Username = username, Email = email, Password = password, Avatar = Base64Picture(avatarType, avatar) }; | |||||
return _rest.Patch<EditUserResponse>(Endpoints.UserMe, request); | return _rest.Patch<EditUserResponse>(Endpoints.UserMe, request); | ||||
} | } | ||||
@@ -312,5 +303,18 @@ namespace Discord | |||||
=> _rest.Get<GetRegionsResponse>(Endpoints.VoiceRegions); | => _rest.Get<GetRegionsResponse>(Endpoints.VoiceRegions); | ||||
/*public Task<GetIceResponse> GetVoiceIce() | /*public Task<GetIceResponse> GetVoiceIce() | ||||
=> _rest.Get<GetIceResponse>(Endpoints.VoiceIce);*/ | => _rest.Get<GetIceResponse>(Endpoints.VoiceIce);*/ | ||||
private string Base64Picture(ImageType type, byte[] data) | |||||
{ | |||||
if (type == ImageType.None) | |||||
return ""; | |||||
else if (data != null) | |||||
{ | |||||
string base64 = Convert.ToBase64String(data); | |||||
string imageType = type == ImageType.Jpeg ? "image/jpeg;base64" : "image/png;base64"; | |||||
return $"data:{imageType},{base64}"; | |||||
} | |||||
return null; | |||||
} | |||||
} | } | ||||
} | } |
@@ -596,7 +596,7 @@ namespace Discord | |||||
//Profile | //Profile | ||||
public Task<EditUserResponse> EditProfile(string currentPassword = "", | public Task<EditUserResponse> EditProfile(string currentPassword = "", | ||||
string username = null, string email = null, string password = null, | string username = null, string email = null, string password = null, | ||||
AvatarImageType avatarType = AvatarImageType.Png, byte[] avatar = null) | |||||
ImageType avatarType = ImageType.Png, byte[] avatar = null) | |||||
{ | { | ||||
if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); | if (currentPassword == null) throw new ArgumentNullException(nameof(currentPassword)); | ||||
@@ -727,18 +727,16 @@ namespace Discord | |||||
} | } | ||||
/// <summary> Edits the provided server, changing only non-null attributes. </summary> | /// <summary> Edits the provided server, changing only non-null attributes. </summary> | ||||
public Task EditServer(Server server) | |||||
=> EditServer(server?.Id); | |||||
public Task EditServer(string serverId, string name = null, string region = null, ImageType iconType = ImageType.Png, byte[] icon = null) | |||||
=> EditServer(_servers[serverId], name: name, region: region, iconType: iconType, icon: icon); | |||||
/// <summary> Edits the provided server, changing only non-null attributes. </summary> | /// <summary> Edits the provided server, changing only non-null attributes. </summary> | ||||
public async Task EditServer(string serverId, string name = null, string region = null) | |||||
public async Task EditServer(Server server, string name = null, string region = null, ImageType iconType = ImageType.Png, byte[] icon = null) | |||||
{ | { | ||||
CheckReady(); | |||||
if (serverId == null) throw new ArgumentNullException(nameof(serverId)); | |||||
CheckReady(); | |||||
if (server == null) throw new ArgumentNullException(nameof(server)); | |||||
var response = await _api.EditServer(serverId, name: name, region: region); | |||||
var server = _servers[response.Id]; | |||||
if (server != null) | |||||
server.Update(response); | |||||
var response = await _api.EditServer(server.Id, name: name ?? server.Name, region: region, iconType: iconType, icon: icon); | |||||
server.Update(response); | |||||
} | } | ||||
/// <summary> Leaves the provided server, destroying it if you are the owner. </summary> | /// <summary> Leaves the provided server, destroying it if you are the owner. </summary> | ||||