public void Estimate(PokerUser user, int estimation, int messageId = 0)
        {
            var session = GetSession(user);

            if (!EnsureSession(user))
            {
                return;
            }

            if (session.Poker == null)
            {
                messageSender.NoPokerRunning(user);
                return;
            }

            if (!session.CanUserEstimate(user))
            {
                messageSender.EstimationAlreadyCounted(user);
            }

            session.Estimate(user, estimation, messageId);
            if (messageId != 0)
            {
                messageSender.UpdateEstimation(user, estimation, messageId);
            }

            if (!session.IsEstimationCompleted())
            {
                return;
            }

            messageSender.SendPokerResult(session, session.Poker.ToString());
            session.ClearPoker();
        }