public static UpdateMessageType ParseMessageType(this UpdateMessage message)
        {
            if (message.Message != null)
            {
                var messageText = message.Message.Text;
                if (message.IsBotCommand())
                {
                    if (messageText.StartsWith(BotCommands.CreateOccasion, StringComparison.OrdinalIgnoreCase))
                    {
                        return(UpdateMessageType.GetNewOccasionName);
                    }

                    if (messageText.StartsWith(BotCommands.DeleteOccasion, StringComparison.OrdinalIgnoreCase))
                    {
                        return(UpdateMessageType.GetOccasionsForDelete);
                    }

                    if (messageText.StartsWith(BotCommands.StartPoll, StringComparison.OrdinalIgnoreCase))
                    {
                        return(UpdateMessageType.GetOccasionsToStart);
                    }

                    if (messageText.StartsWith(BotCommands.StopPoll, StringComparison.OrdinalIgnoreCase))
                    {
                        return(UpdateMessageType.StopActivePoll);
                    }

                    if (messageText.StartsWith(BotCommands.Stats, StringComparison.OrdinalIgnoreCase))
                    {
                        return(UpdateMessageType.Stats);
                    }
                }
            }

            var replyToMessage = message.Message?.ReplyToMessage;

            if (replyToMessage != null)
            {
                if (replyToMessage.From.IsBot)
                {
                    if (replyToMessage.Text.Contains(Messages.NewOccasionName, StringComparison.OrdinalIgnoreCase))
                    {
                        return(UpdateMessageType.CreateOccasion);
                    }
                }
            }

            var callbackQuery = message.CallbackQuery;

            if (callbackQuery != null)
            {
                var callbackQueryData = callbackQuery.Data.Split(';');

                if (callbackQueryData.Length == 2 && callbackQueryData[0] == BotCommands.DeleteOccasion)
                {
                    return(UpdateMessageType.DeleteOccasion);
                }

                if (callbackQueryData.Length == 2 && callbackQueryData[0] == BotCommands.StartPoll)
                {
                    return(UpdateMessageType.StartPoll);
                }
            }

            var pollAnswer = message.PollAnswer;

            if (pollAnswer != null)
            {
                return(UpdateMessageType.PollAnswered);
            }

            return(UpdateMessageType.Unknown);
        }