Ejemplo n.º 1
0
        public async Task SetKinkPreferenceAsync
        (
            string kinkName,
            [OverrideTypeReader(typeof(HumanizerEnumTypeReader <KinkPreference>))]
            KinkPreference preference
        )
        {
            var getUserKinkResult = await _kinks.GetUserKinkByNameAsync(this.Context.User, kinkName);

            if (!getUserKinkResult.IsSuccess)
            {
                await _feedback.SendErrorAsync(this.Context, getUserKinkResult.ErrorReason);

                return;
            }

            var userKink = getUserKinkResult.Entity;
            var setKinkPreferenceResult = await _kinks.SetKinkPreferenceAsync(userKink, preference);

            if (!setKinkPreferenceResult.IsSuccess)
            {
                await _feedback.SendErrorAsync(this.Context, setKinkPreferenceResult.ErrorReason);

                return;
            }

            await _feedback.SendConfirmationAsync(this.Context, "Preference set.");
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UserKink"/> class.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="kink">The user's kink.</param>
        public UserKink([NotNull] User user, [NotNull] Kink kink)
        {
            this.User = user;
            this.Kink = kink;

            this.Preference = KinkPreference.NoPreference;
        }
Ejemplo n.º 3
0
        public async Task ShowKinksByPreferenceAsync
        (
            IUser otherUser,
            [OverrideTypeReader(typeof(HumanizerEnumTypeReader <KinkPreference>))]
            KinkPreference preference
        )
        {
            var getUserKinksResult = await _kinks.GetUserKinksAsync(otherUser);

            if (!getUserKinksResult.IsSuccess)
            {
                await _feedback.SendErrorAsync(this.Context, getUserKinksResult.ErrorReason);

                return;
            }

            var userKinks = getUserKinksResult.Entity;

            var withPreference = userKinks.Where(k => k.Preference == preference).ToList();

            if (!withPreference.Any())
            {
                await _feedback.SendErrorAsync(this.Context, "The user doesn't have any kinks with that preference.");

                return;
            }

            var paginatedKinkPages = _kinks.BuildPaginatedUserKinkEmbeds(withPreference);
            var paginatedMessage   = new PaginatedEmbed(_feedback, _interactivity, this.Context.User)
                                     .WithPages(paginatedKinkPages);

            await _interactivity.SendPrivateInteractiveMessageAsync(this.Context, _feedback, paginatedMessage);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UserKink"/> class.
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="kink">The user's kink.</param>
        public UserKink(User user, Kink kink)
        {
            this.User = user;
            this.Kink = kink;

            this.Preference = KinkPreference.NoPreference;
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Sets the user's preference for the given kink.
        /// </summary>
        /// <param name="userKink">The user's kink.</param>
        /// <param name="preference">The new preference.</param>
        /// <returns>A modification result which may or may not have succeeded.</returns>
        public async Task <ModifyEntityResult> SetKinkPreferenceAsync
        (
            UserKink userKink,
            KinkPreference preference
        )
        {
            userKink.Preference = preference;
            await _database.SaveChangesAsync();

            return(ModifyEntityResult.FromSuccess());
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Sets the user's preference for the given kink.
        /// </summary>
        /// <param name="userKink">The user's kink.</param>
        /// <param name="preference">The new preference.</param>
        /// <param name="ct">The cancellation token in use.</param>
        /// <returns>A modification result which may or may not have succeeded.</returns>
        public async Task <ModifyEntityResult> SetKinkPreferenceAsync
        (
            UserKink userKink,
            KinkPreference preference,
            CancellationToken ct = default
        )
        {
            userKink.Preference = preference;
            await _database.SaveChangesAsync(ct);

            return(ModifyEntityResult.FromSuccess());
        }
Ejemplo n.º 7
0
        private async Task SetCurrentKinkPreference(KinkPreference preference)
        {
            var getUserKinkResult = await _kinks.GetUserKinkByFListIDAsync(_targetUser, _currentFListKinkID);

            if (!getUserKinkResult.IsSuccess)
            {
                await _feedback.SendErrorAndDeleteAsync(this.MessageContext, getUserKinkResult.ErrorReason);

                return;
            }

            var userKink            = getUserKinkResult.Entity;
            var setPreferenceResult = await _kinks.SetKinkPreferenceAsync(userKink, preference);

            if (!setPreferenceResult.IsSuccess)
            {
                await _feedback.SendErrorAndDeleteAsync(this.MessageContext, setPreferenceResult.ErrorReason);
            }
        }
Ejemplo n.º 8
0
        private async Task SetCurrentKinkPreference(KinkPreference preference)
        {
            var getUserKinkResult = await this.Kinks.GetUserKinkByFListIDAsync(this.Database, this.Context.User, this.CurrentFListKinkID);

            if (!getUserKinkResult.IsSuccess)
            {
                await this.Feedback.SendErrorAndDeleteAsync(this.Context, this.Interactive, getUserKinkResult.ErrorReason);

                return;
            }

            var userKink            = getUserKinkResult.Entity;
            var setPreferenceResult = await this.Kinks.SetKinkPreferenceAsync(this.Database, userKink, preference);

            if (!setPreferenceResult.IsSuccess)
            {
                await this.Feedback.SendErrorAndDeleteAsync(this.Context, this.Interactive, setPreferenceResult.ErrorReason);
            }
        }
Ejemplo n.º 9
0
    public async Task <Result <FeedbackMessage> > SetKinkPreferenceAsync
    (
        string kinkName,
        KinkPreference preference
    )
    {
        var getUserKinkResult = await _kinks.GetUserKinkByNameAsync(_context.User.ID, kinkName);

        if (!getUserKinkResult.IsSuccess)
        {
            return(Result <FeedbackMessage> .FromError(getUserKinkResult));
        }

        var userKink = getUserKinkResult.Entity;
        var setKinkPreferenceResult = await _kinks.SetKinkPreferenceAsync(userKink, preference);

        return(setKinkPreferenceResult.IsSuccess
            ? new FeedbackMessage("Preference set.", _feedback.Theme.Secondary)
            : Result <FeedbackMessage> .FromError(setKinkPreferenceResult));
    }
Ejemplo n.º 10
0
        public async Task ShowKinksByPreferenceAsync
        (
            [NotNull]
            IUser otherUser,
            [OverrideTypeReader(typeof(HumanizerEnumTypeReader <KinkPreference>))]
            KinkPreference preference
        )
        {
            var userKinks = await this.Kinks.GetUserKinksAsync(this.Database, otherUser);

            var withPreference = userKinks.Where(k => k.Preference == preference).ToList();

            if (!withPreference.Any())
            {
                await this.Feedback.SendErrorAsync(this.Context, "The user doesn't have any kinks with that preference.");

                return;
            }

            var paginatedKinks = this.Kinks.BuildPaginatedUserKinkEmbed(withPreference);

            await this.Interactive.SendPrivatePaginatedMessageAsync(this.Context, this.Feedback, paginatedKinks);
        }
Ejemplo n.º 11
0
    public async Task <IResult> ShowKinksByPreferenceAsync
    (
        KinkPreference preference,
        IUser?user = null
    )
    {
        user ??= _context.User;

        var kinksWithPreference = await _kinks.QueryDatabaseAsync
                                  (
            q => q
            .Where(k => k.User.DiscordID == user.ID)
            .Where(k => k.Preference == preference)
                                  );

        if (!kinksWithPreference.Any())
        {
            return(Result <FeedbackMessage> .FromSuccess
                   (
                       new FeedbackMessage
                       (
                           "The user doesn't have any kinks with that preference.",
                           _feedback.Theme.Warning
                       )
                   ));
        }

        var pages = _kinks.BuildPaginatedUserKinkEmbeds(kinksWithPreference);

        return(await _feedback.SendContextualPaginatedMessageAsync
               (
                   _context.User.ID,
                   pages,
                   ct : this.CancellationToken
               ));
    }
Ejemplo n.º 12
0
        public async Task <RuntimeResult> SetKinkPreferenceAsync
        (
            string kinkName,
            [OverrideTypeReader(typeof(HumanizerEnumTypeReader <KinkPreference>))]
            KinkPreference preference
        )
        {
            var getUserKinkResult = await _kinks.GetUserKinkByNameAsync(this.Context.User, kinkName);

            if (!getUserKinkResult.IsSuccess)
            {
                return(getUserKinkResult.ToRuntimeResult());
            }

            var userKink = getUserKinkResult.Entity;
            var setKinkPreferenceResult = await _kinks.SetKinkPreferenceAsync(userKink, preference);

            if (!setKinkPreferenceResult.IsSuccess)
            {
                return(setKinkPreferenceResult.ToRuntimeResult());
            }

            return(RuntimeCommandResult.FromSuccess("Preference set."));
        }
Ejemplo n.º 13
0
 public async Task ShowKinksByPreferenceAsync
 (
     [OverrideTypeReader(typeof(HumanizerEnumTypeReader <KinkPreference>))]
     KinkPreference preference
 )
 => await ShowKinksByPreferenceAsync(this.Context.User, preference);
Ejemplo n.º 14
0
        /// <summary>
        /// Sets the user's preference for the given kink.
        /// </summary>
        /// <param name="db">The database.</param>
        /// <param name="userKink">The user's kink.</param>
        /// <param name="preference">The new preference.</param>
        /// <returns>A modification result which may or may not have succeeded.</returns>
        public async Task <ModifyEntityResult> SetKinkPreferenceAsync([NotNull] GlobalInfoContext db, [NotNull] UserKink userKink, KinkPreference preference)
        {
            userKink.Preference = preference;
            await db.SaveChangesAsync();

            return(ModifyEntityResult.FromSuccess(ModifyEntityAction.Edited));
        }
Ejemplo n.º 15
0
    private async Task <Result> SetCurrentKinkPreference(KinkPreference preference)
    {
        var leaseData = await _dataService.LeaseDataAsync(_context.Message.Value.ID, this.CancellationToken);

        if (!leaseData.IsSuccess)
        {
            return((Result)leaseData);
        }

        await using var lease = leaseData.Entity;

        if (lease.Data.CurrentFListKinkID is null)
        {
            throw new InvalidOperationException();
        }

        var getUserKinkResult = await _kinks.GetUserKinkByFListIDAsync
                                (
            lease.Data.SourceUserID,
            lease.Data.CurrentFListKinkID.Value
                                );

        if (!getUserKinkResult.IsSuccess)
        {
            return(Result.FromError(getUserKinkResult));
        }

        var userKink      = getUserKinkResult.Entity;
        var setPreference = await _kinks.SetKinkPreferenceAsync(userKink, preference);

        if (!setPreference.IsSuccess)
        {
            return(setPreference);
        }

        var moveNext = await lease.Data.MoveToNextKinkInCategoryAsync(_kinks, this.CancellationToken);

        if (!moveNext.IsDefined(out var hasMore))
        {
            return((Result)moveNext);
        }

        if (hasMore)
        {
            return(await UpdateAsync(lease.Data));
        }

        lease.Data.GoToCategorySelection();

        var send = await _feedback.SendContextualNeutralAsync
                   (
            "All done in that category!",
            lease.Data.SourceUserID,
            new FeedbackMessageOptions(MessageFlags : MessageFlags.Ephemeral),
            ct : this.CancellationToken
                   );

        return(send.IsSuccess
            ? await UpdateAsync(lease.Data)
            : (Result)send);
    }