private async Task <ForumEmail> AddCommentWithEmail(string commentText, ForumThread forumThread,
                                                            bool isVisibleToPlayer, Comment parentComment, IEnumerable <User> extraSubscriptions = null)
        {
            var visibleToPlayerUpdated = isVisibleToPlayer && parentComment?.IsVisibleToPlayer != false;

            if (!isVisibleToPlayer)
            {
                forumThread.RequestMasterAccess(CurrentUserId);
            }

            var comment = new Comment
            {
                CommentId    = -1,
                ProjectId    = forumThread.ProjectId,
                AuthorUserId = CurrentUserId,
                CommentText  = new CommentText()
                {
                    Text      = new MarkdownString(commentText),
                    CommentId = -1
                },
                IsCommentByPlayer = !forumThread.HasMasterAccess(CurrentUserId),
                IsVisibleToPlayer = isVisibleToPlayer,
                Parent            = parentComment,
            };

            forumThread.CommentDiscussion.Comments.Add(comment);

            var extraRecipients =
                new[] { parentComment?.Author, parentComment?.Finance?.PaymentType?.User }.
                Union(extraSubscriptions ?? Enumerable.Empty <User>());
            var subscriptions =
                forumThread.GetSubscriptions(extraRecipients, visibleToPlayerUpdated).ToList();

            return(new ForumEmail()
            {
                ForumThread = forumThread,
                ProjectName = forumThread.Project.ProjectName,
                Initiator = await UserRepository.GetById(CurrentUserId),
                Recipients = subscriptions.ToList(),
                Text = new MarkdownString(commentText),
            });
        }