I discovered this when trying to handle moving platforms in a generic manner in my game and it seems to work well under most cases.
What you do is for every moving platform you first make sure it shares some collision group such as 'Solid'. You then store some variables about its previous position and update it every step:
this.prevX = this.x
this.prevY = this.y
Then in your player's on step event you put this at the very top (or before you handle movement of your character):
let target = ct.place.occupied(this, this.x, this.y, 'Solid') || ct.place.occupied(this, this.x, this.y + 1, 'Solid')
if (target && target.prevX && target.prevY) {
this.x += (target.x - target.prevX)
this.y += (target.y - target.prevY)
}
How it works is the moving wall runs into the player first, and then this code resolves that by pushing the player in the same x and y distance that the platform moves. Additionally, the second half of the target definition line also checks if the player is right under the platform instead of colliding with it. This allows the player to also move with the platform when its moving downwards.
The downside is this gets buggy when the moving platform pushes the player into another wall, but on the plus side it's quite simple!