Use some kind of crawler (selenium, wget, etc.) to manually create a backup by scraping the site.
I think this is not great given how JavaScript heavy Discourse is (i.e. it loads posts incrementally based on cursor position). It’s also brittle - scraping code is often complicated.
…but, it can be done by anyone, with no permissions necessary.
API
Use the Discourse API to pull content. This could be done either periodically as a full crawl or incrementally on a continuous basis.
I think this is a fine way to go assuming the API offers everything we need and someone can provision API credentials.
Having sat there and considered significantly the longterm utility of logs and access to information that Bitcoin requires to defend itself—literally transparency is one of its best and most-resulted-in-rescues defences—I would like to also recommend that you make the archival and thus witnessing something that more than one person or process can perform.
On IRC, people can create and maintain logs longer-term on a per-person basis. This creates a much more robust and participation-based consensus on what constitutes the historical record.
I have found that this is an important facet of archival effectiveness as well. There are on occasion some attacker-injection problems that can be a problem for the safety of individuals, but I have also found that the most diligent and reliable sources of archival information are also the most reasonable and realistically practical people as well—so this tends to be an addressable problem.
Thus, may I suggest that the archival process itself be made available to individuals who are interested in participating.
Further, now that I’m thinking about it, I would like to point out that for those forums like Slack where the relevant historical archive is spotty, questionable, inaccessible, or otherwise opaque, these places are the sources of significant and ongoing attacker fuel—a simple propaganda-only example would be the ongoing nonsense about the “dragon’s den.”
The only caveat with this script is if someone updates an old post (older than a day), the update won’t be detected. I’m not sure if there’s a good solution for this, but maybe some other part of the API could clue us in to updated posts.