Browse Source

Made several API functions more consistent with the others

tags/docs-0.9
RogueException 9 years ago
parent
commit
3ada1117f5
6 changed files with 24 additions and 93 deletions
  1. +2
    -2
      src/Discord.Net/DiscordClient.Channels.cs
  2. +3
    -4
      src/Discord.Net/DiscordClient.Messages.cs
  3. +2
    -71
      src/Discord.Net/DiscordClient.Permissions.cs
  4. +12
    -9
      src/Discord.Net/DiscordClient.Roles.cs
  5. +2
    -2
      src/Discord.Net/DiscordClient.Servers.cs
  6. +3
    -5
      src/Discord.Net/DiscordClient.Users.cs

+ 2
- 2
src/Discord.Net/DiscordClient.Channels.cs View File

@@ -162,14 +162,14 @@ namespace Discord
}
/// <summary> Destroys the provided channel. </summary>
public async Task<Channel> DestroyChannel(Channel channel)
public async Task DestroyChannel(Channel channel)
{
if (channel == null) throw new ArgumentNullException(nameof(channel));
CheckReady();

try { await _api.DestroyChannel(channel.Id).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
return _channels.TryRemove(channel.Id);
//return _channels.TryRemove(channel.Id);
}
}
}

+ 3
- 4
src/Discord.Net/DiscordClient.Messages.cs View File

@@ -161,7 +161,7 @@ namespace Discord

/// <summary> Edits the provided message, changing only non-null attributes. </summary>
/// <remarks> While not required, it is recommended to include a mention reference in the text (see Mention.User). </remarks>
public async Task EditMessage(Message message, string text)
public Task EditMessage(Message message, string text)
{
if (message == null) throw new ArgumentNullException(nameof(message));
CheckReady();
@@ -169,8 +169,7 @@ namespace Discord
if (text != null && text.Length > MaxMessageSize)
text = text.Substring(0, MaxMessageSize);

var model = await _api.EditMessage(message.Id, message.Channel.Id, text, Mention.GetUserIds(text)).ConfigureAwait(false);
message.Update(model);
return _api.EditMessage(message.Id, message.Channel.Id, text, Mention.GetUserIds(text));
}

/// <summary> Deletes the provided message. </summary>
@@ -219,7 +218,7 @@ namespace Discord
msg = _messages.GetOrAdd(x.Id, x.ChannelId, x.Author.Id);
else
msg = _messages[x.Id] ?? new Message(this, x.Id, x.ChannelId, x.Author.Id);
msg.Update(x);
//msg.Update(x);
if (Config.TrackActivity)
{
if (!channel.IsPrivate)


+ 2
- 71
src/Discord.Net/DiscordClient.Permissions.cs View File

@@ -39,61 +39,8 @@ namespace Discord

return SetChannelPermissions(channel, role?.Id, PermissionTarget.Role, permissions?.Allow, permissions?.Deny);
}
private async Task SetChannelPermissions(Channel channel, string targetId, PermissionTarget targetType, ChannelPermissions allow = null, ChannelPermissions deny = null)
{
uint allowValue = allow?.RawValue ?? 0;
uint denyValue = deny?.RawValue ?? 0;
bool changed = false;

var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).FirstOrDefault();
if (allowValue != 0 || denyValue != 0)
{
await _api.SetChannelPermissions(channel.Id, targetId, targetType.Value, allowValue, denyValue).ConfigureAwait(false);
if (perms != null)
{
perms.Allow.SetRawValueInternal(allowValue);
perms.Deny.SetRawValueInternal(denyValue);
}
else
{
var oldPerms = channel.PermissionOverwrites.ToArray();
var newPerms = new Channel.PermissionOverwrite[oldPerms.Length + 1];
Array.Copy(oldPerms, newPerms, oldPerms.Length);
newPerms[oldPerms.Length] = new Channel.PermissionOverwrite(targetType, targetId, allowValue, denyValue);
channel.PermissionOverwrites = newPerms;
}
changed = true;
}
else
{
try
{
await _api.DeleteChannelPermissions(channel.Id, targetId).ConfigureAwait(false);
if (perms != null)
{
channel.PermissionOverwrites = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != targetId).ToArray();
changed = true;
}
}
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
}

if (changed)
{
if (targetType == PermissionTarget.Role)
{
var role = _roles[targetId];
if (role != null)
channel.InvalidatePermissionsCache(role);
}
else if (targetType == PermissionTarget.User)
{
var user = _users[targetId, channel.Server?.Id];
if (user != null)
channel.InvalidatePermissionsCache(user);
}
}
}
private Task SetChannelPermissions(Channel channel, string targetId, PermissionTarget targetType, ChannelPermissions allow = null, ChannelPermissions deny = null)
=> _api.SetChannelPermissions(channel.Id, targetId, targetType.Value, allow?.RawValue ?? 0, deny?.RawValue ?? 0);

public Task RemoveChannelUserPermissions(Channel channel, User user)
{
@@ -117,22 +64,6 @@ namespace Discord
{
var perms = channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != userOrRoleId).FirstOrDefault();
await _api.DeleteChannelPermissions(channel.Id, userOrRoleId).ConfigureAwait(false);
if (perms != null)
{
channel.PermissionOverwrites.Where(x => x.TargetType != targetType || x.TargetId != userOrRoleId).ToArray();

if (targetType == PermissionTarget.Role)
{
var role = _roles[userOrRoleId];
channel.InvalidatePermissionsCache(role);
}
else if (targetType == PermissionTarget.User)
{
var user = _users[userOrRoleId, channel.Server?.Id];
if (user != null)
channel.InvalidatePermissionsCache(user);
}
}
}
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
}


+ 12
- 9
src/Discord.Net/DiscordClient.Roles.cs View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;

namespace Discord
@@ -62,17 +63,18 @@ namespace Discord
if (name == null) throw new ArgumentNullException(nameof(name));
CheckReady();

if (name.StartsWith("@"))
/*if (name.StartsWith("@"))
{
string name2 = name.Substring(1);
return _roles.Where(x => x.Server.Id == server.Id &&
string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase) || string.Equals(x.Name, name2, StringComparison.OrdinalIgnoreCase));
string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase) ||
string.Equals(x.Name, name2, StringComparison.OrdinalIgnoreCase));
}
else
{
{*/
return _roles.Where(x => x.Server.Id == server.Id &&
string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
}
//}
}
/// <summary> Note: due to current API limitations, the created role cannot be returned. </summary>
@@ -84,10 +86,10 @@ namespace Discord

var response = await _api.CreateRole(server.Id).ConfigureAwait(false);
var role = _roles.GetOrAdd(response.Id, server.Id);
await _api.EditRole(server.Id, role.Id, name: name).ConfigureAwait(false);
response.Name = name;
role.Update(response);

await EditRole(role, name: name).ConfigureAwait(false);

return role;
}
@@ -128,13 +130,14 @@ namespace Discord
}
}

public Task DeleteRole(Role role)
public async Task DeleteRole(Role role)
{
if (role == null) throw new ArgumentNullException(nameof(role));
CheckReady();

return _api.DeleteRole(role.Server.Id, role.Id);
}
try { await _api.DeleteRole(role.Server.Id, role.Id); }
catch (HttpException ex) when(ex.StatusCode == HttpStatusCode.NotFound) { }
}

public Task ReorderRoles(Server server, IEnumerable<Role> roles, int startPos = 0)
{


+ 2
- 2
src/Discord.Net/DiscordClient.Servers.cs View File

@@ -104,14 +104,14 @@ namespace Discord
}
/// <summary> Leaves the provided server, destroying it if you are the owner. </summary>
public async Task<Server> LeaveServer(Server server)
public async Task LeaveServer(Server server)
{
if (server == null) throw new ArgumentNullException(nameof(server));
CheckReady();

try { await _api.LeaveServer(server.Id).ConfigureAwait(false); }
catch (HttpException ex) when (ex.StatusCode == HttpStatusCode.NotFound) { }
return _servers.TryRemove(server.Id);
//return _servers.TryRemove(server.Id);
}
}
}

+ 3
- 5
src/Discord.Net/DiscordClient.Users.cs View File

@@ -159,9 +159,7 @@ namespace Discord
string.Equals(x.Name, name2, StringComparison.OrdinalIgnoreCase));
}
else
{
query = server.Members.Where(x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
}
if (discriminator != null)
query = query.Where(x => x.Discriminator == discriminator);
return query;
@@ -190,10 +188,10 @@ namespace Discord
public Task SetStatus(UserStatus status)
{
if (status == (string)null) throw new ArgumentNullException(nameof(status));
CheckReady();

if (status != UserStatus.Online && status != UserStatus.Idle)
throw new ArgumentException($"Invalid status, must be {UserStatus.Online} or {UserStatus.Idle}");
throw new ArgumentException($"Invalid status, must be {UserStatus.Online} or {UserStatus.Idle}", nameof(status));
CheckReady();
_status = status;
return SendStatus();
}


Loading…
Cancel
Save