I had a plan to add this to Nowhere.
Rather than DM I was going to use ephemeral messages.
Serve out unique addresses from an xpub. Then just keep track of how many you have given out so you kno a how high to make the wallet gap limit.
I'm the end I decoded against it as a usefull as that would be my hope is that silent payments will make that redundant for the donation use case. Still having unique addresses is useful if you want to know for certain which user has paid since they were each given a unique address.
I did find one project doing this via DM as you suggest.y issue with dms is both the metadata leakage and that the messages remain on relays.

GitHub
GitHub - kdmukai/nostrpaydm: Basic proof of concept to run an on-chain bitcoin donation campaign via Nostr DMs
Basic proof of concept to run an on-chain bitcoin donation campaign via Nostr DMs - kdmukai/nostrpaydm