コード例 #1
0
        internal static new async Task <RestSlashCommandData> CreateAsync(DiscordRestClient client, Model model, RestGuild guild, IRestMessageChannel channel)
        {
            var entity = new RestSlashCommandData(client, model);
            await entity.UpdateAsync(client, model, guild, channel).ConfigureAwait(false);

            return(entity);
        }
コード例 #2
0
        internal override async Task UpdateAsync(DiscordRestClient client, Model model, bool doApiCall)
        {
            await base.UpdateAsync(client, model, doApiCall).ConfigureAwait(false);

            var dataModel = model.Data.IsSpecified
                ? (DataModel)model.Data.Value
                : null;

            Data = await RestSlashCommandData.CreateAsync(client, dataModel, Guild, Channel, doApiCall).ConfigureAwait(false);
        }
コード例 #3
0
        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>();
        }