I'm using cadence's fork of Half-Shot's bridge; they've added a lot of features to it compared to upstream. so initial impressions:
setup is kind of annoying. I already set up the appservice cause i bridge some other discords on my matrix server too, but yeah, to do this you either need to run your own matrix server, or know someone else willing to set up the bridge on their matrix server. That said, once they install the bridge and you invite it to your discord, they don't need to be involved anymore, unless you want to add it to another discord server later.
you need to join each channel one by one on the matrix side, then create a space for them, then add them all to the space manually (and adjust your channel notif settings for each). This sucks but was plenty doable. Consequently you also need to do this whenever you make a new channel (annoying) and clear out old ones manually (annoying but potentially good).
pluralkit replicates to matrix correctly! However, by default most matrix clients show "tombstones", stand-in indicators of a deleted message. this sucks with pluralkit. you can disable this in element, cant do it in all clients, but you really want this to make pk conversations look readable. Compare:
With deletes (default):

Without deletes (in Element: Settings > Preferences > Timeline > Show a placeholder for removed messages > Click to disable it):

since matrix -> discord messages are just a webhook, there's no pluralkit integration proxying for messages we send in matrix. This is a feature I could technically add to the bridge. Since it's using webhooks just like pluralkit, it could also scan matrix messages for pluralkit proxy tags, and then implement proxying both on the discord and matrix side. On the matrix side it'd need to handle deleting/resending but that's probably fine. I'd need to add a way for a matrix user to send it a PK token to import the system from though. And I guess if, after building that, I extracted that bit out into its own thing I'd have a rudimentary pluralkit-for-matrix appservice.........
On the topic of adding features, I could also probably make it stop prefixing that [BOT] tag from discord to matrix.
Threads aren't implemented in the bridge right now. If you make a thread then only the title of the thread gets replicated to matrix.
You don't get backfill of history from messages before the bridge, naturally.
Kinda wish we'd set it up earlier, but glad we did it now. This should be enough to reconstruct most any conversation we'd want from data that's now in matrix as a backup. Or not even reconstruct, its right there, we can just look at it. So yeah, mission success!
Security Considerations Addendum
Security is mostly thru obscurity- anyone can join a channel but they need both your matrix server, your guild ID, and the channel ID, so its basically one-factor auth in that way (something you know). I guess you know our matrix server so if you manage to deduce our server ID and a channel ID then you can get in to a channel. I think the IDs have some component which is tied to time (dont quote me on that, its been awhile) which means through Math and Deduction based on Us Posting When We First Set It Up you can probably narrow down the number space quite a bit for the server ID, and the general channel ID. Enough to reasonably brute-force the possibility space? I dunno, maybe, guess it depends how fast my matrix server is...
Additionally I think that by default the appservice advertises the rooms publicly in your homeserver's room directory. It looks like we disabled that; i think the setting was
room:
# Set the default visibility of alias rooms, defaults to "public".
# One of: "public", "private"
defaultVisibility: "private"
which we have in matrix-appservice-discord/config.yaml
Maybe there's a way to set these channels invite-only, but idk. Also if you were doing this on a matrix server you set up just for this and nothing else, you could disable federation entirely and just be done with it.