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 System;
|
||||
using System.Collections.Generic;
|
||||
@@ -423,6 +424,113 @@ namespace Discord
|
||||
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
|
||||
public Task SetChannelUserPermissions(Channel channel, User user, PackedPermissions allow, PackedPermissions 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));
|
||||
|
||||
//Members
|
||||
public Task Kick(string serverId, string memberId)
|
||||
=> _rest.Delete(Endpoints.ServerMember(serverId, memberId));
|
||||
public Task Ban(string serverId, string memberId)
|
||||
=> _rest.Put(Endpoints.ServerBan(serverId, memberId));
|
||||
public Task Unban(string serverId, string memberId)
|
||||
=> _rest.Delete(Endpoints.ServerBan(serverId, memberId));
|
||||
public Task Kick(string serverId, string userId)
|
||||
=> _rest.Delete(Endpoints.ServerMember(serverId, userId));
|
||||
public Task Ban(string serverId, string userId)
|
||||
=> _rest.Put(Endpoints.ServerBan(serverId, userId));
|
||||
public Task Unban(string serverId, string userId)
|
||||
=> _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
|
||||
public Task<Responses.CreateInvite> CreateInvite(string channelId, int maxAge, int maxUses, bool isTemporary, bool withXkcdPass)
|
||||
@@ -86,7 +91,39 @@ namespace Discord.Net.API
|
||||
=> _rest.Post<Responses.AcceptInvite>(Endpoints.Invite(id));
|
||||
public Task DeleteInvite(string 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
|
||||
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 };
|
||||
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,7 +26,9 @@
|
||||
public static string ServerChannels(string serverId) => $"guilds/{serverId}/channels";
|
||||
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 ServerRoles(string serverId) => $"guilds/{serverId}/roles";
|
||||
public static string ServerRole(string serverId, string roleId) => $"guilds/{serverId}/roles/{roleId}";
|
||||
|
||||
public const string Invites = "invite";
|
||||
public static string Invite(string inviteId) => $"invite/{inviteId}";
|
||||
public static string InviteUrl(string inviteId) => $"https://discord.gg/{inviteId}";
|
||||
|
||||
@@ -89,6 +89,11 @@ namespace Discord.Net.API
|
||||
[JsonProperty(PropertyName = "deaf")]
|
||||
public bool Value;
|
||||
}
|
||||
public sealed class ModifyMember
|
||||
{
|
||||
[JsonProperty(PropertyName = "roles")]
|
||||
public string[] Roles;
|
||||
}
|
||||
|
||||
//Profile
|
||||
public sealed class ChangeUsername
|
||||
@@ -126,6 +131,15 @@ namespace Discord.Net.API
|
||||
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
|
||||
public sealed class SetChannelPermissions
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user