Ejemplo n.º 1
0
        // Thank you Yukine. Guys please go check out the bot named Senpai by Yukine#8080. An awesome bot by an awesome dev.
        private void BrokerOnReceive(object?_, AmqpReceiveEventArgs e)
        {
            Task.Run(async() =>
            {
                var @event = e.Event;

                if (int.TryParse(@event, out var shardId))
                {
                    if (!_gatewayCluster.Shards.TryGetValue(shardId, out var shard))
                    {
                        return;
                    }
                    var packet = JsonSerializer.Deserialize <SendPacket>(Encoding.UTF8.GetString(e.Data));
                    await shard.SendAsync(packet.OpCode, packet.Data);
                }
                else if (@event == "SEND")
                {
                    var data      = JsonSerializer.Deserialize <SendableDispatch>(Encoding.UTF8.GetString(e.Data));
                    var dataBytes = Encoding.UTF8.GetBytes(JsonSerializer.Serialize(data.Packet));

                    if (data.GuildId == "*")
                    {
                        var tasks = new Task[ShardCount];
                        for (var i = 0; i < ShardCount; i++)
                        {
                            tasks[i] = _broker.PublishAsync(i.ToString(), dataBytes);
                        }

                        await Task.WhenAll(tasks);
                    }
                    else
                    {
                        var calculatedShardId = (long.Parse(data.GuildId) >> DiscordShardingFormula) %
                                                _gatewayCluster.Shards.Count;
                        await _broker.PublishAsync(calculatedShardId.ToString(), dataBytes);
                    }
                }

                _broker.Ack(e.Event, e.DeliveryTag);
            }).Wait();
        }
Ejemplo n.º 2
0
        public void HandleEvent(SkyraEvent @event, AmqpReceiveEventArgs args)
        {
            var data = Encoding.UTF8.GetString(args.Data);

            switch (@event)
            {
            case SkyraEvent.READY:
                OnReady(JsonConvert.DeserializeObject <ReadyDispatch>(data));
                break;

            case SkyraEvent.RESUMED:
                break;

            case SkyraEvent.CHANNEL_CREATE:
                break;

            case SkyraEvent.CHANNEL_UPDATE:
                break;

            case SkyraEvent.CHANNEL_DELETE:
                break;

            case SkyraEvent.CHANNEL_PINS_UPDATE:
                break;

            case SkyraEvent.GUILD_CREATE:
                OnRawGuildCreate(JsonConvert.DeserializeObject <Guild>(data));
                break;

            case SkyraEvent.GUILD_UPDATE:
                OnRawGuildUpdate(JsonConvert.DeserializeObject <Guild>(data));
                break;

            case SkyraEvent.GUILD_DELETE:
                OnRawGuildDelete(JsonConvert.DeserializeObject <UnavailableGuild>(data));
                break;

            case SkyraEvent.GUILD_BAN_ADD:
                OnRawGuildBanAdd(JsonConvert.DeserializeObject <GuildBanAddPayload>(data));
                break;

            case SkyraEvent.GUILD_BAN_REMOVE:
                OnRawGuildBanRemove(JsonConvert.DeserializeObject <GuildBanRemovePayload>(data));
                break;

            case SkyraEvent.GUILD_EMOJIS_UPDATE:
                break;

            case SkyraEvent.GUILD_INTEGRATIONS_UPDATE:
                break;

            case SkyraEvent.GUILD_MEMBER_ADD:
                break;

            case SkyraEvent.GUILD_MEMBER_REMOVE:
                break;

            case SkyraEvent.GUILD_MEMBER_UPDATE:
                break;

            case SkyraEvent.GUILD_MEMBERS_CHUNK:
                break;

            case SkyraEvent.GUILD_ROLE_CREATE:
                break;

            case SkyraEvent.GUILD_ROLE_UPDATE:
                break;

            case SkyraEvent.GUILD_ROLE_DELETE:
                break;

            case SkyraEvent.INVITE_CREATE:
                break;

            case SkyraEvent.INVITE_DELETE:
                break;

            case SkyraEvent.MESSAGE_CREATE:
                OnRawMessageCreateAsync(JsonConvert.DeserializeObject <Message>(data));
                break;

            case SkyraEvent.MESSAGE_UPDATE:
                OnRawMessageUpdateAsync(JsonConvert.DeserializeObject <MessageUpdatePayload>(data));
                break;

            case SkyraEvent.MESSAGE_DELETE:
                OnRawMessageDeleteAsync(JsonConvert.DeserializeObject <MessageDeletePayload>(data));
                break;

            case SkyraEvent.MESSAGE_DELETE_BULK:
                break;

            case SkyraEvent.MESSAGE_REACTION_ADD:
                break;

            case SkyraEvent.MESSAGE_REACTION_REMOVE:
                break;

            case SkyraEvent.MESSAGE_REACTION_REMOVE_ALL:
                break;

            case SkyraEvent.MESSAGE_REACTION_REMOVE_EMOJI:
                break;

            case SkyraEvent.PRESENCE_UPDATE:
                break;

            case SkyraEvent.PRESENCES_REPLACE:
                break;

            case SkyraEvent.TYPING_START:
                break;

            case SkyraEvent.USER_UPDATE:
                break;

            case SkyraEvent.VOICE_STATE_UPDATE:
                break;

            case SkyraEvent.VOICE_SERVER_UPDATE:
                break;

            case SkyraEvent.WEBHOOKS_UPDATE:
                break;

            case SkyraEvent.NOTIFY_TWITCH_STREAM_START:
                break;

            case SkyraEvent.NOTIFY_TWITCH_STREAM_END:
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(@event), @event.ToString(), null);
            }
        }