Ejemplo n.º 1
0
        public static async Task Main()
        {
            // TODO: Replace this with EnvironmentVariableNullException
            var token = Environment.GetEnvironmentVariable("DISCORD_TOKEN") ??
                        throw new ArgumentNullException("DISCORD_TOKEN");
            var brokerName = Environment.GetEnvironmentVariable("BROKER_NAME") ?? "skyra";
            var brokerUrl  = Environment.GetEnvironmentVariable("BROKER_URL") ?? "amqp://localhost:5672";
            var shardCount = Environment.GetEnvironmentVariable("DISCORD_SHARD_COUNT") ?? "1";

            var identifyOptions = new IdentifyOptions
            {
                GuildSubscriptions = true,
                LargeThreshold     = 250,
                Presence           = new UpdateStatusDispatch
                {
                    Game = new Activity {
                        Name = "Skyra.Worker, help", Type = ActivityType.LISTENING
                    }
                }
            };

            var gateway = new GatewayHandler(token,
                                             brokerName,
                                             new Uri(brokerUrl),
                                             identifyOptions,
                                             int.Parse(shardCount));

            await gateway.ConnectAsync();
        }
Ejemplo n.º 2
0
        public GatewayHandler(string token, string brokerName, Uri brokerUri, IdentifyOptions identifyOptions,
                              int?shardCount)
        {
            _brokerUri      = brokerUri;
            _gatewayCluster = shardCount.HasValue
                                ? new Cluster(token, shardCount, identifyOptions)
                                : new Cluster(token, identifyOptions: identifyOptions);
            _broker = new AmqpBroker(brokerName);

            _gatewayCluster.Log      += OnLog;
            _gatewayCluster.Error    += OnError;
            _gatewayCluster.Dispatch += (_, args) => Task.Run(() =>
                                                              _broker.PublishAsync(Enum.GetName(typeof(GatewayEvent), args.Event),
                                                                                   Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(args.Data, Formatting.None,
                                                                                                                                      new JsonSerializerSettings {
                NullValueHandling = NullValueHandling.Ignore
            }))));

            _broker.Receive += BrokerOnReceive;
        }