Added several role management functions
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using Discord.Net;
|
using Discord.Helpers;
|
||||||
|
using Discord.Net;
|
||||||
using Discord.Net.API;
|
using Discord.Net.API;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -423,6 +424,113 @@ namespace Discord
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Roles
|
||||||
|
/// <summary>Note: due to current API limitations, the created role cannot be returned. </summary>
|
||||||
|
public Task CreateRole(Server server)
|
||||||
|
=> CreateRole(server?.Id);
|
||||||
|
/// <summary>Note: due to current API limitations, the created role cannot be returned. </summary>
|
||||||
|
public Task CreateRole(string serverId)
|
||||||
|
{
|
||||||
|
CheckReady();
|
||||||
|
if (serverId == null) throw new NullReferenceException(nameof(serverId));
|
||||||
|
|
||||||
|
return _api.CreateRole(serverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task RenameRole(Role role, string newName)
|
||||||
|
=> RenameRole(role?.ServerId, role?.Id, newName);
|
||||||
|
public Task RenameRole(string serverId, string roleId, string newName)
|
||||||
|
{
|
||||||
|
CheckReady();
|
||||||
|
if (roleId == null) throw new NullReferenceException(nameof(roleId));
|
||||||
|
if (newName == null) throw new NullReferenceException(nameof(newName));
|
||||||
|
|
||||||
|
return _api.RenameRole(serverId, roleId, newName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task DeleteRole(Role role)
|
||||||
|
=> DeleteRole(role?.ServerId, role?.Id);
|
||||||
|
public Task DeleteRole(string serverId, string roleId)
|
||||||
|
{
|
||||||
|
CheckReady();
|
||||||
|
if (roleId == null) throw new NullReferenceException(nameof(roleId));
|
||||||
|
|
||||||
|
return _api.DeleteRole(serverId, roleId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task AddRoleMember(Role role, string serverId, string userId)
|
||||||
|
=> AddRoleMember(role?.Id, GetMember(serverId, userId));
|
||||||
|
public Task AddRoleMember(Role role, string serverId, User user)
|
||||||
|
=> AddRoleMember(role?.Id, GetMember(serverId, user));
|
||||||
|
public Task AddRoleMember(Role role, Server server, string userId)
|
||||||
|
=> AddRoleMember(role?.Id, GetMember(server, userId));
|
||||||
|
public Task AddRoleMember(Role role, Server server, User user)
|
||||||
|
=> AddRoleMember(role?.Id, GetMember(server, user));
|
||||||
|
public Task AddRoleMember(Role role, Member member)
|
||||||
|
=> AddRoleMember(role?.Id, member);
|
||||||
|
public Task AddRoleMember(string roleId, string serverId, string userId)
|
||||||
|
=> AddRoleMember(roleId, GetMember(serverId, userId));
|
||||||
|
public Task AddRoleMember(string roleId, string serverId, User user)
|
||||||
|
=> AddRoleMember(roleId, GetMember(serverId, user));
|
||||||
|
public Task AddRoleMember(string roleId, Server server, string userId)
|
||||||
|
=> AddRoleMember(roleId, GetMember(server, userId));
|
||||||
|
public Task AddRoleMember(string roleId, Server server, User user)
|
||||||
|
=> AddRoleMember(roleId, GetMember(server, user));
|
||||||
|
public Task AddRoleMember(string roleId, Member member)
|
||||||
|
{
|
||||||
|
CheckReady();
|
||||||
|
if (roleId == null) throw new NullReferenceException(nameof(roleId));
|
||||||
|
if (member == null) throw new NullReferenceException(nameof(member));
|
||||||
|
|
||||||
|
if (!member.RoleIds.Contains(roleId))
|
||||||
|
{
|
||||||
|
var oldRoles = member.RoleIds;
|
||||||
|
string[] newRoles = new string[oldRoles.Length + 1];
|
||||||
|
for (int i = 0; i < oldRoles.Length; i++)
|
||||||
|
newRoles[i] = oldRoles[i];
|
||||||
|
return _api.SetMemberRoles(member.ServerId, member.UserId, newRoles);
|
||||||
|
}
|
||||||
|
return TaskHelper.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task RemoveRoleMember(Role role, string serverId, string userId)
|
||||||
|
=> RemoveRoleMember(role?.Id, GetMember(serverId, userId));
|
||||||
|
public Task RemoveRoleMember(Role role, string serverId, User user)
|
||||||
|
=> RemoveRoleMember(role?.Id, GetMember(serverId, user));
|
||||||
|
public Task RemoveRoleMember(Role role, Server server, string userId)
|
||||||
|
=> RemoveRoleMember(role?.Id, GetMember(server, userId));
|
||||||
|
public Task RemoveRoleMember(Role role, Server server, User user)
|
||||||
|
=> RemoveRoleMember(role?.Id, GetMember(server, user));
|
||||||
|
public Task RemoveRoleMember(Role role, Member member)
|
||||||
|
=> RemoveRoleMember(role?.Id, member);
|
||||||
|
public Task RemoveRoleMember(string roleId, string serverId, string userId)
|
||||||
|
=> RemoveRoleMember(roleId, GetMember(serverId, userId));
|
||||||
|
public Task RemoveRoleMember(string roleId, string serverId, User user)
|
||||||
|
=> RemoveRoleMember(roleId, GetMember(serverId, user));
|
||||||
|
public Task RemoveRoleMember(string roleId, Server server, string userId)
|
||||||
|
=> RemoveRoleMember(roleId, GetMember(server, userId));
|
||||||
|
public Task RemoveRoleMember(string roleId, Server server, User user)
|
||||||
|
=> RemoveRoleMember(roleId, GetMember(server, user));
|
||||||
|
public Task RemoveRoleMember(string roleId, Member member)
|
||||||
|
{
|
||||||
|
CheckReady();
|
||||||
|
if (roleId == null) throw new NullReferenceException(nameof(roleId));
|
||||||
|
if (member == null) throw new NullReferenceException(nameof(member));
|
||||||
|
|
||||||
|
if (member.RoleIds.Contains(roleId))
|
||||||
|
{
|
||||||
|
var oldRoles = member.RoleIds;
|
||||||
|
string[] newRoles = new string[oldRoles.Length - 1];
|
||||||
|
for (int i = 0, j = 0; i < oldRoles.Length; i++)
|
||||||
|
{
|
||||||
|
if (oldRoles[i] != roleId)
|
||||||
|
newRoles[j++] = oldRoles[i];
|
||||||
|
}
|
||||||
|
return _api.SetMemberRoles(member.ServerId, member.UserId, newRoles);
|
||||||
|
}
|
||||||
|
return TaskHelper.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
//Permissions
|
//Permissions
|
||||||
public Task SetChannelUserPermissions(Channel channel, User user, PackedPermissions allow, PackedPermissions deny)
|
public Task SetChannelUserPermissions(Channel channel, User user, PackedPermissions allow, PackedPermissions deny)
|
||||||
=> SetChannelPermissions(channel?.Id, user?.Id, "member", allow, deny);
|
=> SetChannelPermissions(channel?.Id, user?.Id, "member", allow, deny);
|
||||||
|
|||||||
@@ -67,12 +67,17 @@ namespace Discord.Net.API
|
|||||||
=> _rest.Get<Responses.GetMessages[]>(Endpoints.ChannelMessages(channelId, count));
|
=> _rest.Get<Responses.GetMessages[]>(Endpoints.ChannelMessages(channelId, count));
|
||||||
|
|
||||||
//Members
|
//Members
|
||||||
public Task Kick(string serverId, string memberId)
|
public Task Kick(string serverId, string userId)
|
||||||
=> _rest.Delete(Endpoints.ServerMember(serverId, memberId));
|
=> _rest.Delete(Endpoints.ServerMember(serverId, userId));
|
||||||
public Task Ban(string serverId, string memberId)
|
public Task Ban(string serverId, string userId)
|
||||||
=> _rest.Put(Endpoints.ServerBan(serverId, memberId));
|
=> _rest.Put(Endpoints.ServerBan(serverId, userId));
|
||||||
public Task Unban(string serverId, string memberId)
|
public Task Unban(string serverId, string userId)
|
||||||
=> _rest.Delete(Endpoints.ServerBan(serverId, memberId));
|
=> _rest.Delete(Endpoints.ServerBan(serverId, userId));
|
||||||
|
public Task SetMemberRoles(string serverId, string userId, string[] roles)
|
||||||
|
{
|
||||||
|
var request = new Requests.ModifyMember { Roles = roles };
|
||||||
|
return _rest.Patch(Endpoints.ServerMember(serverId, userId));
|
||||||
|
}
|
||||||
|
|
||||||
//Invites
|
//Invites
|
||||||
public Task<Responses.CreateInvite> CreateInvite(string channelId, int maxAge, int maxUses, bool isTemporary, bool withXkcdPass)
|
public Task<Responses.CreateInvite> CreateInvite(string channelId, int maxAge, int maxUses, bool isTemporary, bool withXkcdPass)
|
||||||
@@ -87,6 +92,38 @@ namespace Discord.Net.API
|
|||||||
public Task DeleteInvite(string id)
|
public Task DeleteInvite(string id)
|
||||||
=> _rest.Delete(Endpoints.Invite(id));
|
=> _rest.Delete(Endpoints.Invite(id));
|
||||||
|
|
||||||
|
//Roles
|
||||||
|
public Task CreateRole(string serverId)
|
||||||
|
{
|
||||||
|
//TODO: Return a result when Discord starts giving us one
|
||||||
|
return _rest.Post(Endpoints.ServerRoles(serverId));
|
||||||
|
}
|
||||||
|
public Task RenameRole(string serverId, string roleId, string newName)
|
||||||
|
{
|
||||||
|
var request = new Requests.ModifyRole { Name = newName };
|
||||||
|
return _rest.Patch(Endpoints.ServerRole(serverId, roleId), request);
|
||||||
|
}
|
||||||
|
public Task SetRolePermissions(string serverId, string roleId, PackedPermissions permissions)
|
||||||
|
{
|
||||||
|
var request = new Requests.ModifyRole { Permissions = permissions.RawValue };
|
||||||
|
return _rest.Patch(Endpoints.ServerRole(serverId, roleId), request);
|
||||||
|
}
|
||||||
|
public Task DeleteRole(string serverId, string roleId)
|
||||||
|
{
|
||||||
|
return _rest.Delete(Endpoints.ServerRole(serverId, roleId));
|
||||||
|
}
|
||||||
|
|
||||||
|
//Permissions
|
||||||
|
public Task SetChannelPermissions(string channelId, string userOrRoleId, string idType, PackedPermissions allow, PackedPermissions deny)
|
||||||
|
{
|
||||||
|
var request = new Requests.SetChannelPermissions { Id = userOrRoleId, Type = idType, Allow = allow.RawValue, Deny = deny.RawValue };
|
||||||
|
return _rest.Put(Endpoints.ChannelPermission(channelId, userOrRoleId), request);
|
||||||
|
}
|
||||||
|
public Task DeleteChannelPermissions(string channelId, string userOrRoleId)
|
||||||
|
{
|
||||||
|
return _rest.Delete(Endpoints.ChannelPermission(channelId, userOrRoleId), null);
|
||||||
|
}
|
||||||
|
|
||||||
//Chat
|
//Chat
|
||||||
public Task<Responses.SendMessage> SendMessage(string channelId, string message, string[] mentions, string nonce)
|
public Task<Responses.SendMessage> SendMessage(string channelId, string message, string[] mentions, string nonce)
|
||||||
{
|
{
|
||||||
@@ -154,16 +191,5 @@ namespace Discord.Net.API
|
|||||||
var request = new Requests.ChangeAvatar { Avatar = $"data:{type},/9j/{base64}", CurrentEmail = currentEmail, CurrentPassword = currentPassword };
|
var request = new Requests.ChangeAvatar { Avatar = $"data:{type},/9j/{base64}", CurrentEmail = currentEmail, CurrentPassword = currentPassword };
|
||||||
return _rest.Patch<Responses.ChangeProfile>(Endpoints.UserMe, request);
|
return _rest.Patch<Responses.ChangeProfile>(Endpoints.UserMe, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Permissions
|
|
||||||
public Task SetChannelPermissions(string channelId, string userOrRoleId, string idType, PackedPermissions allow, PackedPermissions deny)
|
|
||||||
{
|
|
||||||
var request = new Requests.SetChannelPermissions { Id = userOrRoleId, Type = idType, Allow = allow.RawValue, Deny = deny.RawValue };
|
|
||||||
return _rest.Put(Endpoints.ChannelPermission(channelId, userOrRoleId), request);
|
|
||||||
}
|
|
||||||
public Task DeleteChannelPermissions(string channelId, string userOrRoleId)
|
|
||||||
{
|
|
||||||
return _rest.Delete(Endpoints.ChannelPermission(channelId, userOrRoleId), null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,8 @@
|
|||||||
public static string ServerChannels(string serverId) => $"guilds/{serverId}/channels";
|
public static string ServerChannels(string serverId) => $"guilds/{serverId}/channels";
|
||||||
public static string ServerMember(string serverId, string userId) => $"guilds/{serverId}/members/{userId}";
|
public static string ServerMember(string serverId, string userId) => $"guilds/{serverId}/members/{userId}";
|
||||||
public static string ServerBan(string serverId, string userId) => $"guilds/{serverId}/bans/{userId}";
|
public static string ServerBan(string serverId, string userId) => $"guilds/{serverId}/bans/{userId}";
|
||||||
|
public static string ServerRoles(string serverId) => $"guilds/{serverId}/roles";
|
||||||
|
public static string ServerRole(string serverId, string roleId) => $"guilds/{serverId}/roles/{roleId}";
|
||||||
|
|
||||||
public const string Invites = "invite";
|
public const string Invites = "invite";
|
||||||
public static string Invite(string inviteId) => $"invite/{inviteId}";
|
public static string Invite(string inviteId) => $"invite/{inviteId}";
|
||||||
|
|||||||
@@ -89,6 +89,11 @@ namespace Discord.Net.API
|
|||||||
[JsonProperty(PropertyName = "deaf")]
|
[JsonProperty(PropertyName = "deaf")]
|
||||||
public bool Value;
|
public bool Value;
|
||||||
}
|
}
|
||||||
|
public sealed class ModifyMember
|
||||||
|
{
|
||||||
|
[JsonProperty(PropertyName = "roles")]
|
||||||
|
public string[] Roles;
|
||||||
|
}
|
||||||
|
|
||||||
//Profile
|
//Profile
|
||||||
public sealed class ChangeUsername
|
public sealed class ChangeUsername
|
||||||
@@ -126,6 +131,15 @@ namespace Discord.Net.API
|
|||||||
public string Avatar;
|
public string Avatar;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Roles
|
||||||
|
public sealed class ModifyRole
|
||||||
|
{
|
||||||
|
[JsonProperty(PropertyName = "name", NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public string Name;
|
||||||
|
[JsonProperty(PropertyName = "permissions", NullValueHandling = NullValueHandling.Ignore)]
|
||||||
|
public uint Permissions;
|
||||||
|
}
|
||||||
|
|
||||||
//Permissions
|
//Permissions
|
||||||
public sealed class SetChannelPermissions
|
public sealed class SetChannelPermissions
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user