@@ -3,14 +3,14 @@ | |||||
internal static class CDN | internal static class CDN | ||||
{ | { | ||||
public static string GetApplicationIconUrl(ulong appId, string iconId) | public static string GetApplicationIconUrl(ulong appId, string iconId) | ||||
=> iconId != null ? $"{DiscordRestConfig.CDNUrl}app-icons/{appId}/{iconId}.jpg" : null; | |||||
=> iconId != null ? $"{DiscordConfig.CDNUrl}app-icons/{appId}/{iconId}.jpg" : null; | |||||
public static string GetUserAvatarUrl(ulong userId, string avatarId) | public static string GetUserAvatarUrl(ulong userId, string avatarId) | ||||
=> avatarId != null ? $"{DiscordRestConfig.CDNUrl}avatars/{userId}/{avatarId}.jpg" : null; | |||||
=> avatarId != null ? $"{DiscordConfig.CDNUrl}avatars/{userId}/{avatarId}.jpg" : null; | |||||
public static string GetGuildIconUrl(ulong guildId, string iconId) | public static string GetGuildIconUrl(ulong guildId, string iconId) | ||||
=> iconId != null ? $"{DiscordRestConfig.CDNUrl}icons/{guildId}/{iconId}.jpg" : null; | |||||
=> iconId != null ? $"{DiscordConfig.CDNUrl}icons/{guildId}/{iconId}.jpg" : null; | |||||
public static string GetGuildSplashUrl(ulong guildId, string splashId) | public static string GetGuildSplashUrl(ulong guildId, string splashId) | ||||
=> splashId != null ? $"{DiscordRestConfig.CDNUrl}splashes/{guildId}/{splashId}.jpg" : null; | |||||
=> splashId != null ? $"{DiscordConfig.CDNUrl}splashes/{guildId}/{splashId}.jpg" : null; | |||||
public static string GetChannelIconUrl(ulong channelId, string iconId) | public static string GetChannelIconUrl(ulong channelId, string iconId) | ||||
=> iconId != null ? $"{DiscordRestConfig.CDNUrl}channel-icons/{channelId}/{iconId}.jpg" : null; | |||||
=> iconId != null ? $"{DiscordConfig.CDNUrl}channel-icons/{channelId}/{iconId}.jpg" : null; | |||||
} | } | ||||
} | } |
@@ -5,6 +5,7 @@ using Discord.Net.Converters; | |||||
using Discord.Net.Queue; | using Discord.Net.Queue; | ||||
using Discord.Net.Rest; | using Discord.Net.Rest; | ||||
using Discord.Net.WebSockets; | using Discord.Net.WebSockets; | ||||
using Discord.Rest; | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -594,13 +595,13 @@ namespace Discord.API | |||||
List<GuildMember[]> result; | List<GuildMember[]> result; | ||||
if (args._limit.IsSpecified) | if (args._limit.IsSpecified) | ||||
result = new List<GuildMember[]>((limit + DiscordRestConfig.MaxUsersPerBatch - 1) / DiscordRestConfig.MaxUsersPerBatch); | |||||
result = new List<GuildMember[]>((limit + DiscordConfig.MaxUsersPerBatch - 1) / DiscordConfig.MaxUsersPerBatch); | |||||
else | else | ||||
result = new List<GuildMember[]>(); | result = new List<GuildMember[]>(); | ||||
while (true) | while (true) | ||||
{ | { | ||||
int runLimit = (limit >= DiscordRestConfig.MaxUsersPerBatch) ? DiscordRestConfig.MaxUsersPerBatch : limit; | |||||
int runLimit = (limit >= DiscordConfig.MaxUsersPerBatch) ? DiscordConfig.MaxUsersPerBatch : limit; | |||||
string endpoint = $"guilds/{guildId}/members?limit={runLimit}&after={afterUserId}"; | string endpoint = $"guilds/{guildId}/members?limit={runLimit}&after={afterUserId}"; | ||||
var models = await SendAsync<GuildMember[]>("GET", endpoint, options: options).ConfigureAwait(false); | var models = await SendAsync<GuildMember[]>("GET", endpoint, options: options).ConfigureAwait(false); | ||||
@@ -609,11 +610,11 @@ namespace Discord.API | |||||
result.Add(models); | result.Add(models); | ||||
limit -= DiscordRestConfig.MaxUsersPerBatch; | |||||
limit -= DiscordConfig.MaxUsersPerBatch; | |||||
afterUserId = models[models.Length - 1].User.Id; | afterUserId = models[models.Length - 1].User.Id; | ||||
//Was this an incomplete (the last) batch? | //Was this an incomplete (the last) batch? | ||||
if (models.Length != DiscordRestConfig.MaxUsersPerBatch) break; | |||||
if (models.Length != DiscordConfig.MaxUsersPerBatch) break; | |||||
} | } | ||||
if (result.Count > 1) | if (result.Count > 1) | ||||
@@ -723,14 +724,14 @@ namespace Discord.API | |||||
break; | break; | ||||
} | } | ||||
int runs = (limit + DiscordRestConfig.MaxMessagesPerBatch - 1) / DiscordRestConfig.MaxMessagesPerBatch; | |||||
int lastRunCount = limit - (runs - 1) * DiscordRestConfig.MaxMessagesPerBatch; | |||||
int runs = (limit + DiscordConfig.MaxMessagesPerBatch - 1) / DiscordConfig.MaxMessagesPerBatch; | |||||
int lastRunCount = limit - (runs - 1) * DiscordConfig.MaxMessagesPerBatch; | |||||
var result = new API.Message[runs][]; | var result = new API.Message[runs][]; | ||||
int i = 0; | int i = 0; | ||||
for (; i < runs; i++) | for (; i < runs; i++) | ||||
{ | { | ||||
int runCount = i == (runs - 1) ? lastRunCount : DiscordRestConfig.MaxMessagesPerBatch; | |||||
int runCount = i == (runs - 1) ? lastRunCount : DiscordConfig.MaxMessagesPerBatch; | |||||
string endpoint; | string endpoint; | ||||
if (relativeId != null) | if (relativeId != null) | ||||
endpoint = $"channels/{channelId}/messages?limit={runCount}&{relativeDir}={relativeId}"; | endpoint = $"channels/{channelId}/messages?limit={runCount}&{relativeDir}={relativeId}"; | ||||
@@ -769,7 +770,7 @@ namespace Discord.API | |||||
} | } | ||||
//Was this an incomplete (the last) batch? | //Was this an incomplete (the last) batch? | ||||
if (models.Length != DiscordRestConfig.MaxMessagesPerBatch) { i++; break; } | |||||
if (models.Length != DiscordConfig.MaxMessagesPerBatch) { i++; break; } | |||||
} | } | ||||
if (i > 1) | if (i > 1) | ||||
@@ -814,8 +815,8 @@ namespace Discord.API | |||||
Preconditions.NotEqual(channelId, 0, nameof(channelId)); | Preconditions.NotEqual(channelId, 0, nameof(channelId)); | ||||
Preconditions.NotNull(args, nameof(args)); | Preconditions.NotNull(args, nameof(args)); | ||||
Preconditions.NotNullOrEmpty(args._content, nameof(args.Content)); | Preconditions.NotNullOrEmpty(args._content, nameof(args.Content)); | ||||
if (args._content.Length > DiscordRestConfig.MaxMessageSize) | |||||
throw new ArgumentException($"Message content is too long, length must be less or equal to {DiscordRestConfig.MaxMessageSize}.", nameof(args.Content)); | |||||
if (args._content.Length > DiscordConfig.MaxMessageSize) | |||||
throw new ArgumentException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); | |||||
if (guildId != 0) | if (guildId != 0) | ||||
return await SendAsync<Message>("POST", $"channels/{channelId}/messages", args, GuildBucket.SendEditMessage, guildId, options: options).ConfigureAwait(false); | return await SendAsync<Message>("POST", $"channels/{channelId}/messages", args, GuildBucket.SendEditMessage, guildId, options: options).ConfigureAwait(false); | ||||
@@ -843,8 +844,8 @@ namespace Discord.API | |||||
{ | { | ||||
if (args._content.Value == null) | if (args._content.Value == null) | ||||
args._content = ""; | args._content = ""; | ||||
if (args._content.Value?.Length > DiscordRestConfig.MaxMessageSize) | |||||
throw new ArgumentOutOfRangeException($"Message content is too long, length must be less or equal to {DiscordRestConfig.MaxMessageSize}.", nameof(args.Content)); | |||||
if (args._content.Value?.Length > DiscordConfig.MaxMessageSize) | |||||
throw new ArgumentOutOfRangeException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); | |||||
} | } | ||||
if (guildId != 0) | if (guildId != 0) | ||||
@@ -924,8 +925,8 @@ namespace Discord.API | |||||
if (args._content.IsSpecified) | if (args._content.IsSpecified) | ||||
{ | { | ||||
Preconditions.NotNullOrEmpty(args._content, nameof(args.Content)); | Preconditions.NotNullOrEmpty(args._content, nameof(args.Content)); | ||||
if (args._content.Value.Length > DiscordRestConfig.MaxMessageSize) | |||||
throw new ArgumentOutOfRangeException($"Message content is too long, length must be less or equal to {DiscordRestConfig.MaxMessageSize}.", nameof(args.Content)); | |||||
if (args._content.Value.Length > DiscordConfig.MaxMessageSize) | |||||
throw new ArgumentOutOfRangeException($"Message content is too long, length must be less or equal to {DiscordConfig.MaxMessageSize}.", nameof(args.Content)); | |||||
} | } | ||||
if (guildId != 0) | if (guildId != 0) | ||||
@@ -2,6 +2,7 @@ | |||||
using Discord.Net.Queue; | using Discord.Net.Queue; | ||||
using Discord.Net.Rest; | using Discord.Net.Rest; | ||||
using Discord.Net.WebSockets; | using Discord.Net.WebSockets; | ||||
using Discord.Rpc; | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
using System; | using System; | ||||
@@ -1,8 +1,10 @@ | |||||
namespace Discord.API.Rest | |||||
using Discord.Rest; | |||||
namespace Discord.API.Rest | |||||
{ | { | ||||
public class GetChannelMessagesParams | public class GetChannelMessagesParams | ||||
{ | { | ||||
public int Limit { internal get; set; } = DiscordRestConfig.MaxMessagesPerBatch; | |||||
public int Limit { internal get; set; } = DiscordConfig.MaxMessagesPerBatch; | |||||
public Direction RelativeDirection { internal get; set; } = Direction.Before; | public Direction RelativeDirection { internal get; set; } = Direction.Before; | ||||
@@ -1,6 +1,7 @@ | |||||
using Discord.API.Voice; | using Discord.API.Voice; | ||||
using Discord.Logging; | using Discord.Logging; | ||||
using Discord.Net.Converters; | using Discord.Net.Converters; | ||||
using Discord.WebSocket; | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
using System; | using System; | ||||
@@ -1,5 +1,4 @@ | |||||
using Discord.Extensions; | |||||
using System; | |||||
using System; | |||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Linq; | using System.Linq; |
@@ -14,6 +14,10 @@ namespace Discord | |||||
public const string CDNUrl = "https://cdn.discordapp.com/"; | public const string CDNUrl = "https://cdn.discordapp.com/"; | ||||
public const string InviteUrl = "https://discord.gg/"; | public const string InviteUrl = "https://discord.gg/"; | ||||
public const int MaxMessageSize = 2000; | |||||
public const int MaxMessagesPerBatch = 100; | |||||
public const int MaxUsersPerBatch = 1000; | |||||
/// <summary> Gets or sets the minimum log level severity that will be sent to the LogMessage event. </summary> | /// <summary> Gets or sets the minimum log level severity that will be sent to the LogMessage event. </summary> | ||||
public LogSeverity LogLevel { get; set; } = LogSeverity.Info; | public LogSeverity LogLevel { get; set; } = LogSeverity.Info; | ||||
} | } | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using Discord.Rest; | |||||
using System; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Model = Discord.API.Application; | using Model = Discord.API.Application; | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -1,5 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Extensions; | |||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -20,9 +20,9 @@ namespace Discord | |||||
/// <summary> Gets the message from this channel's cache with the given id, or null if not found. </summary> | /// <summary> Gets the message from this channel's cache with the given id, or null if not found. </summary> | ||||
IMessage GetCachedMessage(ulong id); | IMessage GetCachedMessage(ulong id); | ||||
/// <summary> Gets the last N messages from this message channel. </summary> | /// <summary> Gets the last N messages from this message channel. </summary> | ||||
Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordRestConfig.MaxMessagesPerBatch); | |||||
Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch); | |||||
/// <summary> Gets a collection of messages in this channel. </summary> | /// <summary> Gets a collection of messages in this channel. </summary> | ||||
Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordRestConfig.MaxMessagesPerBatch); | |||||
Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch); | |||||
/// <summary> Bulk deletes multiple messages. </summary> | /// <summary> Bulk deletes multiple messages. </summary> | ||||
Task DeleteMessagesAsync(IEnumerable<IMessage> messages); | Task DeleteMessagesAsync(IEnumerable<IMessage> messages); | ||||
@@ -1,4 +1,6 @@ | |||||
namespace Discord | |||||
using Discord.Rest; | |||||
namespace Discord | |||||
{ | { | ||||
internal abstract class Entity<T> : IEntity<T> | internal abstract class Entity<T> : IEntity<T> | ||||
{ | { | ||||
@@ -1,6 +1,6 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Audio; | using Discord.Audio; | ||||
using Discord.Extensions; | |||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -1,4 +1,5 @@ | |||||
using System.Diagnostics; | |||||
using Discord.Rest; | |||||
using System.Diagnostics; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Model = Discord.API.UserGuild; | using Model = Discord.API.UserGuild; | ||||
@@ -1,4 +1,5 @@ | |||||
using System.Diagnostics; | |||||
using Discord.Rest; | |||||
using System.Diagnostics; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Model = Discord.API.Invite; | using Model = Discord.API.Invite; | ||||
@@ -16,8 +17,8 @@ namespace Discord | |||||
public override DiscordRestClient Discord { get; } | public override DiscordRestClient Discord { get; } | ||||
public string Code => Id; | public string Code => Id; | ||||
public string Url => $"{DiscordRestConfig.InviteUrl}/{XkcdCode ?? Code}"; | |||||
public string XkcdUrl => XkcdCode != null ? $"{DiscordRestConfig.InviteUrl}/{XkcdCode}" : null; | |||||
public string Url => $"{DiscordConfig.InviteUrl}/{XkcdCode ?? Code}"; | |||||
public string XkcdUrl => XkcdCode != null ? $"{DiscordConfig.InviteUrl}/{XkcdCode}" : null; | |||||
public Invite(DiscordRestClient discord, Model model) | public Invite(DiscordRestClient discord, Model model) | ||||
: base(model.Code) | : base(model.Code) | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using Discord.Rest; | |||||
using System; | |||||
using Model = Discord.API.InviteMetadata; | using Model = Discord.API.InviteMetadata; | ||||
namespace Discord | namespace Discord | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -1,9 +1,7 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | |||||
using System.Collections.Immutable; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using System.Linq; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Model = Discord.API.Role; | using Model = Discord.API.Role; | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using Discord.Rest; | |||||
using System; | |||||
using Model = Discord.API.Rpc.RpcUserGuild; | using Model = Discord.API.Rpc.RpcUserGuild; | ||||
namespace Discord.Entities.Rpc | namespace Discord.Entities.Rpc | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using System; | using System; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using Discord.Rest; | |||||
using System; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.Extensions; | |||||
using Discord.Rest; | |||||
using Discord.WebSocket; | |||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -51,7 +52,7 @@ namespace Discord | |||||
return result; | return result; | ||||
return null; | return null; | ||||
} | } | ||||
public override IImmutableList<SocketMessage> GetMany(ulong? fromMessageId, Direction dir, int limit = DiscordRestConfig.MaxMessagesPerBatch) | |||||
public override IImmutableList<SocketMessage> GetMany(ulong? fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
{ | { | ||||
if (limit < 0) throw new ArgumentOutOfRangeException(nameof(limit)); | if (limit < 0) throw new ArgumentOutOfRangeException(nameof(limit)); | ||||
if (limit == 0) return ImmutableArray<SocketMessage>.Empty; | if (limit == 0) return ImmutableArray<SocketMessage>.Empty; | ||||
@@ -1,4 +1,6 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.Rest; | |||||
using Discord.WebSocket; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -25,7 +27,7 @@ namespace Discord | |||||
public virtual SocketMessage Remove(ulong id) => null; | public virtual SocketMessage Remove(ulong id) => null; | ||||
public virtual SocketMessage Get(ulong id) => null; | public virtual SocketMessage Get(ulong id) => null; | ||||
public virtual IImmutableList<SocketMessage> GetMany(ulong? fromMessageId, Direction dir, int limit = DiscordRestConfig.MaxMessagesPerBatch) | |||||
public virtual IImmutableList<SocketMessage> GetMany(ulong? fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
=> ImmutableArray.Create<SocketMessage>(); | => ImmutableArray.Create<SocketMessage>(); | ||||
public virtual async Task<SocketMessage> DownloadAsync(ulong id) | public virtual async Task<SocketMessage> DownloadAsync(ulong id) | ||||
@@ -1,4 +1,5 @@ | |||||
using System.Collections.Generic; | |||||
using Discord.WebSocket; | |||||
using System.Collections.Generic; | |||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using MessageModel = Discord.API.Message; | using MessageModel = Discord.API.Message; | ||||
@@ -1,4 +1,4 @@ | |||||
using Discord.Extensions; | |||||
using Discord.WebSocket; | |||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -1,4 +1,6 @@ | |||||
using System.Collections.Generic; | |||||
using Discord.Rest; | |||||
using Discord.WebSocket; | |||||
using System.Collections.Generic; | |||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
using System.Linq; | using System.Linq; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
@@ -48,11 +50,11 @@ namespace Discord | |||||
{ | { | ||||
return await _messages.DownloadAsync(id).ConfigureAwait(false); | return await _messages.DownloadAsync(id).ConfigureAwait(false); | ||||
} | } | ||||
public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordRestConfig.MaxMessagesPerBatch) | |||||
public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
{ | { | ||||
return await _messages.DownloadAsync(null, Direction.Before, limit).ConfigureAwait(false); | return await _messages.DownloadAsync(null, Direction.Before, limit).ConfigureAwait(false); | ||||
} | } | ||||
public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordRestConfig.MaxMessagesPerBatch) | |||||
public override async Task<IReadOnlyCollection<IMessage>> GetMessagesAsync(ulong fromMessageId, Direction dir, int limit = DiscordConfig.MaxMessagesPerBatch) | |||||
{ | { | ||||
return await _messages.DownloadAsync(fromMessageId, dir, limit).ConfigureAwait(false); | return await _messages.DownloadAsync(fromMessageId, dir, limit).ConfigureAwait(false); | ||||
} | } | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.Audio; | using Discord.Audio; | ||||
using Discord.WebSocket; | |||||
using System; | using System; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
using System.Collections.Immutable; | using System.Collections.Immutable; | ||||
@@ -1,5 +1,5 @@ | |||||
using Discord.Audio; | using Discord.Audio; | ||||
using Discord.Extensions; | |||||
using Discord.WebSocket; | |||||
using System; | using System; | ||||
using System.Collections.Concurrent; | using System.Collections.Concurrent; | ||||
using System.Collections.Generic; | using System.Collections.Generic; | ||||
@@ -1,4 +1,5 @@ | |||||
using Model = Discord.API.Message; | |||||
using Discord.WebSocket; | |||||
using Model = Discord.API.Message; | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using Discord.WebSocket; | |||||
using System; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using PresenceModel = Discord.API.Presence; | using PresenceModel = Discord.API.Presence; | ||||
@@ -1,4 +1,5 @@ | |||||
using System; | |||||
using Discord.WebSocket; | |||||
using System; | |||||
using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
using PresenceModel = Discord.API.Presence; | using PresenceModel = Discord.API.Presence; | ||||
@@ -1,4 +1,5 @@ | |||||
using System.Diagnostics; | |||||
using Discord.WebSocket; | |||||
using System.Diagnostics; | |||||
namespace Discord | namespace Discord | ||||
{ | { | ||||
@@ -1,4 +1,5 @@ | |||||
using Model = Discord.API.GuildMember; | |||||
using Discord.WebSocket; | |||||
using Model = Discord.API.GuildMember; | |||||
using PresenceModel = Discord.API.Presence; | using PresenceModel = Discord.API.Presence; | ||||
namespace Discord | namespace Discord | ||||
@@ -1,4 +1,5 @@ | |||||
using Discord.API.Rest; | using Discord.API.Rest; | ||||
using Discord.WebSocket; | |||||
using System; | using System; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using Model = Discord.API.User; | using Model = Discord.API.User; | ||||
@@ -4,7 +4,7 @@ using System.Collections.Generic; | |||||
using System.Diagnostics; | using System.Diagnostics; | ||||
using System.Linq; | using System.Linq; | ||||
namespace Discord.Extensions | |||||
namespace Discord | |||||
{ | { | ||||
internal static class CollectionExtensions | internal static class CollectionExtensions | ||||
{ | { | ||||
@@ -1,7 +1,8 @@ | |||||
using System.Linq; | |||||
using Discord.Rest; | |||||
using System.Linq; | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord.Extensions | |||||
namespace Discord | |||||
{ | { | ||||
public static class DiscordClientExtensions | public static class DiscordClientExtensions | ||||
{ | { | ||||
@@ -1,6 +1,6 @@ | |||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord.Extensions | |||||
namespace Discord | |||||
{ | { | ||||
public static class GuildExtensions | public static class GuildExtensions | ||||
{ | { | ||||
@@ -2,7 +2,7 @@ | |||||
using System.Linq; | using System.Linq; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord.Extensions | |||||
namespace Discord | |||||
{ | { | ||||
public static class GuildUserExtensions | public static class GuildUserExtensions | ||||
{ | { | ||||
@@ -10,8 +10,10 @@ using System.Linq; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
using System.Runtime.InteropServices; | using System.Runtime.InteropServices; | ||||
using Discord.Rpc; | |||||
using Discord.WebSocket; | |||||
namespace Discord | |||||
namespace Discord.Rest | |||||
{ | { | ||||
public class DiscordRestClient : IDiscordClient | public class DiscordRestClient : IDiscordClient | ||||
{ | { |
@@ -1,15 +1,11 @@ | |||||
using Discord.Net.Rest; | using Discord.Net.Rest; | ||||
namespace Discord | |||||
namespace Discord.Rest | |||||
{ | { | ||||
public class DiscordRestConfig : DiscordConfig | public class DiscordRestConfig : DiscordConfig | ||||
{ | { | ||||
public static string UserAgent { get; } = $"DiscordBot (https://github.com/RogueException/Discord.Net, v{Version})"; | public static string UserAgent { get; } = $"DiscordBot (https://github.com/RogueException/Discord.Net, v{Version})"; | ||||
public const int MaxMessageSize = 2000; | |||||
public const int MaxMessagesPerBatch = 100; | |||||
public const int MaxUsersPerBatch = 1000; | |||||
internal const int RestTimeout = 10000; | internal const int RestTimeout = 10000; | ||||
internal const int MessageQueueInterval = 100; | internal const int MessageQueueInterval = 100; | ||||
internal const int WebSocketQueueInterval = 100; | internal const int WebSocketQueueInterval = 100; |
@@ -2,6 +2,7 @@ | |||||
using Discord.Logging; | using Discord.Logging; | ||||
using Discord.Net.Converters; | using Discord.Net.Converters; | ||||
using Discord.Net.Queue; | using Discord.Net.Queue; | ||||
using Discord.Rest; | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
using System; | using System; | ||||
@@ -9,18 +10,10 @@ using System.Runtime.InteropServices; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord | |||||
namespace Discord.Rpc | |||||
{ | { | ||||
public class DiscordRpcClient : DiscordRestClient | |||||
public partial class DiscordRpcClient : DiscordRestClient | |||||
{ | { | ||||
public event Func<Task> Connected { add { _connectedEvent.Add(value); } remove { _connectedEvent.Remove(value); } } | |||||
private readonly AsyncEvent<Func<Task>> _connectedEvent = new AsyncEvent<Func<Task>>(); | |||||
public event Func<Exception, Task> Disconnected { add { _disconnectedEvent.Add(value); } remove { _disconnectedEvent.Remove(value); } } | |||||
private readonly AsyncEvent<Func<Exception, Task>> _disconnectedEvent = new AsyncEvent<Func<Exception, Task>>(); | |||||
public event Func<Task> Ready { add { _readyEvent.Add(value); } remove { _readyEvent.Remove(value); } } | |||||
private readonly AsyncEvent<Func<Task>> _readyEvent = new AsyncEvent<Func<Task>>(); | |||||
private readonly ILogger _rpcLogger; | private readonly ILogger _rpcLogger; | ||||
private readonly JsonSerializer _serializer; | private readonly JsonSerializer _serializer; | ||||
@@ -1,6 +1,7 @@ | |||||
using Discord.Net.WebSockets; | using Discord.Net.WebSockets; | ||||
using Discord.Rest; | |||||
namespace Discord | |||||
namespace Discord.Rpc | |||||
{ | { | ||||
public class DiscordRpcConfig : DiscordRestConfig | public class DiscordRpcConfig : DiscordRestConfig | ||||
{ | { |
@@ -0,0 +1,6 @@ | |||||
namespace Discord.Rpc | |||||
{ | |||||
public enum RpcEvent | |||||
{ | |||||
} | |||||
} |
@@ -1,7 +1,7 @@ | |||||
using System; | using System; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord | |||||
namespace Discord.WebSocket | |||||
{ | { | ||||
//TODO: Add event docstrings | //TODO: Add event docstrings | ||||
public partial class DiscordSocketClient | public partial class DiscordSocketClient |
@@ -1,10 +1,10 @@ | |||||
using Discord.API.Gateway; | using Discord.API.Gateway; | ||||
using Discord.Audio; | using Discord.Audio; | ||||
using Discord.Extensions; | |||||
using Discord.Logging; | using Discord.Logging; | ||||
using Discord.Net.Converters; | using Discord.Net.Converters; | ||||
using Discord.Net.Queue; | using Discord.Net.Queue; | ||||
using Discord.Net.WebSockets; | using Discord.Net.WebSockets; | ||||
using Discord.Rest; | |||||
using Newtonsoft.Json; | using Newtonsoft.Json; | ||||
using Newtonsoft.Json.Linq; | using Newtonsoft.Json.Linq; | ||||
using System; | using System; | ||||
@@ -15,7 +15,7 @@ using System.Linq; | |||||
using System.Threading; | using System.Threading; | ||||
using System.Threading.Tasks; | using System.Threading.Tasks; | ||||
namespace Discord | |||||
namespace Discord.WebSocket | |||||
{ | { | ||||
public partial class DiscordSocketClient : DiscordRestClient, IDiscordClient | public partial class DiscordSocketClient : DiscordRestClient, IDiscordClient | ||||
{ | { |
@@ -1,5 +1,6 @@ | |||||
using Discord.Audio; | using Discord.Audio; | ||||
using Discord.Net.WebSockets; | using Discord.Net.WebSockets; | ||||
using Discord.Rest; | |||||
namespace Discord | namespace Discord | ||||
{ | { |