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))
 {
 }
Exemple #5
0
 internal DiscordSocketClient(DiscordSocketConfig config, DiscordRestApiClient client) : base(config, client)
 {
 }