Пример #1
0
        public void FillParameters(ICommand instance,
                                   IEnumerable <DiscordInteractionDataOption> parameters,
                                   DiscordInteractionResolvedCollection resolved)
        {
            if (Parameters is null)
            {
                return;
            }

            foreach (var parameter in parameters)
            {
                Parameters[parameter.Name].SetValue(instance, parameter, resolved);
            }
        }
Пример #2
0
        public void SetValue(
            ICommand instance,
            DiscordInteractionDataOption parameter,
            DiscordInteractionResolvedCollection resolved)
        {
            object?result;

            switch (parameter.Type)
            {
            case ApplicationCommandOptionType.String:
                result = Property.PropertyType.IsEnum
                        ? Enum.Parse(Property.PropertyType, parameter.Value.ToString() !)
                        : parameter.Value.ToString();
                break;

            case ApplicationCommandOptionType.Integer:
                result = (long)parameter.Value;
                break;

            case ApplicationCommandOptionType.Boolean:
                result = (bool)parameter.Value;
                break;

            case ApplicationCommandOptionType.User:
                var userId = (ulong)parameter.Value;
                if (resolved.Members.TryGetValue(userId, out var member))
                {
                    result = member;
                }
                else if (resolved.Users.TryGetValue(userId, out var user))
                {
                    result = user;
                }
                else
                {
                    throw new Exception("Could not get user.");
                }

                break;

            case ApplicationCommandOptionType.Channel:
                var channelId = (ulong)parameter.Value;
                if (resolved.Channels.TryGetValue(channelId, out var channel))
                {
                    result = channel;
                }
                else
                {
                    throw new Exception("Could not get channel.");
                }

                break;

            case ApplicationCommandOptionType.Role:
                var roleId = (ulong)parameter.Value;
                if (resolved.Roles.TryGetValue(roleId, out var role))
                {
                    result = role;
                }
                else
                {
                    throw new Exception("Could not get role.");
                }

                break;

            default:
                throw new InvalidOperationException($"Invalid parameter type: '{parameter.Type}'");
            }

            Property.SetValue(instance, result);
        }