internal SocketInteractionDataOption(Model model)
        {
            this.Name  = model.Name;
            this.Value = model.Value.IsSpecified ? model.Value.Value : null;

            this.Options = model.Options.IsSpecified
                ? model.Options.Value.Select(x => new SocketInteractionDataOption(x)).ToImmutableArray()
                : null;
        }
Example #2
0
        internal SocketInteractionDataOption(Model model, DiscordSocketClient discord, ulong guild)
        {
            Name     = model.Name;
            Value    = model.Value.IsSpecified ? model.Value.Value : null;
            _discord = discord;
            _guild   = guild;

            Options = model.Options.IsSpecified
                ? model.Options.Value.Select(x => new SocketInteractionDataOption(x, discord, guild)).ToImmutableArray().ToReadOnlyCollection()
                : null;
        }
        internal RestSlashCommandDataOption(RestSlashCommandData data, Model model)
        {
            Name = model.Name;
            Type = model.Type;

            if (model.Value.IsSpecified)
            {
                switch (Type)
                {
                case ApplicationCommandOptionType.User:
                case ApplicationCommandOptionType.Role:
                case ApplicationCommandOptionType.Channel:
                case ApplicationCommandOptionType.Mentionable:
                    if (ulong.TryParse($"{model.Value.Value}", out var valueId))
                    {
                        switch (Type)
                        {
                        case ApplicationCommandOptionType.User:
                        {
                            var guildUser = data.ResolvableData.GuildMembers.FirstOrDefault(x => x.Key == valueId).Value;

                            if (guildUser != null)
                            {
                                Value = guildUser;
                            }
                            else
                            {
                                Value = data.ResolvableData.Users.FirstOrDefault(x => x.Key == valueId).Value;
                            }
                        }
                        break;

                        case ApplicationCommandOptionType.Channel:
                            Value = data.ResolvableData.Channels.FirstOrDefault(x => x.Key == valueId).Value;
                            break;

                        case ApplicationCommandOptionType.Role:
                            Value = data.ResolvableData.Roles.FirstOrDefault(x => x.Key == valueId).Value;
                            break;

                        case ApplicationCommandOptionType.Mentionable:
                        {
                            if (data.ResolvableData.GuildMembers.Any(x => x.Key == valueId) || data.ResolvableData.Users.Any(x => x.Key == valueId))
                            {
                                var guildUser = data.ResolvableData.GuildMembers.FirstOrDefault(x => x.Key == valueId).Value;

                                if (guildUser != null)
                                {
                                    Value = guildUser;
                                }
                                else
                                {
                                    Value = data.ResolvableData.Users.FirstOrDefault(x => x.Key == valueId).Value;
                                }
                            }
                            else if (data.ResolvableData.Roles.Any(x => x.Key == valueId))
                            {
                                Value = data.ResolvableData.Roles.FirstOrDefault(x => x.Key == valueId).Value;
                            }
                        }
                        break;

                        default:
                            Value = model.Value.Value;
                            break;
                        }
                    }
                    break;

                case ApplicationCommandOptionType.String:
                    Value = model.Value.ToString();
                    break;

                case ApplicationCommandOptionType.Integer:
                {
                    if (model.Value.Value is long val)
                    {
                        Value = val;
                    }
                    else if (long.TryParse(model.Value.Value.ToString(), out long res))
                    {
                        Value = res;
                    }
                }
                break;

                case ApplicationCommandOptionType.Boolean:
                {
                    if (model.Value.Value is bool val)
                    {
                        Value = val;
                    }
                    else if (bool.TryParse(model.Value.Value.ToString(), out bool res))
                    {
                        Value = res;
                    }
                }
                break;

                case ApplicationCommandOptionType.Number:
                {
                    if (model.Value.Value is int val)
                    {
                        Value = val;
                    }
                    else if (double.TryParse(model.Value.Value.ToString(), out double res))
                    {
                        Value = res;
                    }
                }
                break;
                }
            }

            Options = model.Options.IsSpecified
                ? model.Options.Value.Select(x => new RestSlashCommandDataOption(data, x)).ToImmutableArray()
                : ImmutableArray.Create <RestSlashCommandDataOption>();
        }