Browse Source

Request offline users on connect

tags/docs-0.9
RogueException 9 years ago
parent
commit
5504d7dde2
4 changed files with 10 additions and 8 deletions
  1. +2
    -2
      src/Discord.Net/API/Client/GatewaySocket/Commands/RequestMembers.cs
  2. +5
    -0
      src/Discord.Net/DiscordClient.cs
  3. +0
    -4
      src/Discord.Net/Models/Server.cs
  4. +3
    -2
      src/Discord.Net/Net/WebSockets/GatewaySocket.cs

+ 2
- 2
src/Discord.Net/API/Client/GatewaySocket/Commands/RequestMembers.cs View File

@@ -10,8 +10,8 @@ namespace Discord.API.Client.GatewaySocket
object IWebSocketMessage.Payload => this; object IWebSocketMessage.Payload => this;
bool IWebSocketMessage.IsPrivate => false; bool IWebSocketMessage.IsPrivate => false;


[JsonProperty("guild_id"), JsonConverter(typeof(LongStringConverter))]
public ulong GuildId { get; set; }
[JsonProperty("guild_id"), JsonConverter(typeof(LongStringArrayConverter))]
public ulong[] GuildId { get; set; }
[JsonProperty("query")] [JsonProperty("query")]
public string Query { get; set; } public string Query { get; set; }
[JsonProperty("limit")] [JsonProperty("limit")]


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

@@ -479,12 +479,16 @@ namespace Discord
PrivateUser.Update(data.User); PrivateUser.Update(data.User);
CurrentUser = new Profile(this, data.User.Id); CurrentUser = new Profile(this, data.User.Id);
CurrentUser.Update(data.User); CurrentUser.Update(data.User);

List<ulong> largeServers = new List<ulong>();
foreach (var model in data.Guilds) foreach (var model in data.Guilds)
{ {
if (model.Unavailable != true) if (model.Unavailable != true)
{ {
var server = AddServer(model.Id); var server = AddServer(model.Id);
server.Update(model); server.Update(model);
if (model.IsLarge)
largeServers.Add(server.Id);
} }
} }
foreach (var model in data.PrivateChannels) foreach (var model in data.PrivateChannels)
@@ -492,6 +496,7 @@ namespace Discord
var channel = AddPrivateChannel(model.Id, model.Recipient.Id); var channel = AddPrivateChannel(model.Id, model.Recipient.Id);
channel.Update(model); channel.Update(model);
} }
GatewaySocket.SendRequestMembers(largeServers, "", 0);
if (Config.LogLevel >= LogSeverity.Verbose) if (Config.LogLevel >= LogSeverity.Verbose)
{ {
stopwatch.Stop(); stopwatch.Stop();


+ 0
- 4
src/Discord.Net/Models/Server.cs View File

@@ -501,10 +501,6 @@ namespace Discord
var response = await Client.ClientAPI.Send(request).ConfigureAwait(false); var response = await Client.ClientAPI.Send(request).ConfigureAwait(false);
return response.Pruned; return response.Pruned;
} }

/// <summary>When Config.UseLargeThreshold is enabled, running this command will request the Discord server to provide you with all offline users for this server.</summary>
public void RequestOfflineUsers()
=> Client.GatewaySocket.SendRequestMembers(Id, "", 0);
#endregion #endregion


internal Server Clone() internal Server Clone()


+ 3
- 2
src/Discord.Net/Net/WebSockets/GatewaySocket.cs View File

@@ -8,6 +8,7 @@ using Newtonsoft.Json.Linq;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;


@@ -179,8 +180,8 @@ namespace Discord.Net.WebSockets
}); });
public void SendUpdateVoice(ulong? serverId, ulong? channelId, bool isSelfMuted, bool isSelfDeafened) public void SendUpdateVoice(ulong? serverId, ulong? channelId, bool isSelfMuted, bool isSelfDeafened)
=> QueueMessage(new UpdateVoiceCommand { GuildId = serverId, ChannelId = channelId, IsSelfMuted = isSelfMuted, IsSelfDeafened = isSelfDeafened }); => QueueMessage(new UpdateVoiceCommand { GuildId = serverId, ChannelId = channelId, IsSelfMuted = isSelfMuted, IsSelfDeafened = isSelfDeafened });
public void SendRequestMembers(ulong serverId, string query, int limit)
=> QueueMessage(new RequestMembersCommand { GuildId = serverId, Query = query, Limit = limit });
public void SendRequestMembers(IEnumerable<ulong> serverId, string query, int limit)
=> QueueMessage(new RequestMembersCommand { GuildId = serverId.ToArray(), Query = query, Limit = limit });


//Cancel if either DiscordClient.Disconnect is called, data socket errors or timeout is reached //Cancel if either DiscordClient.Disconnect is called, data socket errors or timeout is reached
public override void WaitForConnection(CancellationToken cancelToken) public override void WaitForConnection(CancellationToken cancelToken)


Loading…
Cancel
Save