結論
初回は @client.direct_messages_events(count: 1) で取得し、その戻り値から next_cursor を得て、それを用いて次回は @client.direct_messages_events(count: 1, cursor: next_cursor) で取得します。
next_cursor に nil が返ってきたら取得完了です。
罠
普通に取得すると(なぜか)いきなり Rate limits に達して 15分間 身動きが取れなくなります。理由は次のとおりです。