private DiscordShardedClient(int[] ids, DiscordSocketConfig config, API.DiscordSocketApiClient client) : base(config, client) { if (config.ShardId != null) { throw new ArgumentException($"{nameof(config.ShardId)} must not be set."); } if (ids != null && config.TotalShards == null) { throw new ArgumentException($"Custom ids are not supported when {nameof(config.TotalShards)} is not specified."); } _shardIdsToIndex = new Dictionary <int, int>(); config.DisplayInitialLog = false; _baseConfig = config; _connectionGroupLock = new SemaphoreSlim(1, 1); if (config.TotalShards == null) { _automaticShards = true; } else { _totalShards = config.TotalShards.Value; _shardIds = ids ?? Enumerable.Range(0, _totalShards).ToArray(); _shards = new DiscordSocketClient[_shardIds.Length]; for (int i = 0; i < _shardIds.Length; i++) { _shardIdsToIndex.Add(_shardIds[i], i); var newConfig = config.Clone(); newConfig.ShardId = _shardIds[i]; _shards[i] = new DiscordSocketClient(newConfig, _connectionGroupLock, i != 0 ? _shards[0] : null); RegisterEvents(_shards[i]); } } }
private static API.DiscordSocketApiClient CreateApiClient(DiscordSocketConfig config) => new API.DiscordSocketApiClient(config.RestClientProvider, DiscordRestConfig.UserAgent, config.WebSocketProvider);
/// <summary> Creates a new REST/WebSocket discord client. </summary> public DiscordShardedClient(DiscordSocketConfig config) : this(null, config, CreateApiClient(config)) { }
/// <summary> Creates a new REST/WebSocket discord client. </summary> public DiscordShardedClient(int[] ids, DiscordSocketConfig config) : this(ids, config, CreateApiClient(config)) { }
internal DiscordSocketClient(DiscordSocketConfig config, DiscordRestApiClient client) : base(config, client) { }