Discord and Discourse - Better Together | Blog

Here’s a question we get a lot — Discourse and Discord. They sound awfully similar, but are they the same?


This is a companion discussion topic for the original entry at https://blog.discourse.org/2021/05/discord-and-discourse-better-together/
22 Likes

I love that you’re addressing this very current issue. But I feel like there is still a lack of good workflows, best practices, and ideally tools to make working with these two separate products more efficient, pleasant, and smooth. This is true despite a very similar (albeit more broad) blog post from 3 years ago, that generated a little discussion (and some requests similar to what I’m about to elaborate on).

I’m going to throw out a few examples of what I’d ideally like to be able to do to harmonize e.g. Discord and Discourse, recognizing that none of it may actually be possible due to limitations of Discord or Discourse API, or for other reasons. But I think it’s worth thinking and talking more about this and getting into specifics, because the sync/async is a present issue for a lot of communities, and no ideal solutions yet exist.

First and biggest would just be some (seemingly) simple tooling around making it easier to move between one system and the other. Being able to link to a Discourse #category in Discord just like that, and likewise with a Discord channel in Discourse, so I don’t have to go copy a link in one or the other. Better yet, topic search embedded in Discord so I can find and post a link without leaving Discord. Also being able to generate an invite to one from the other immediately with just a hotkey or something, in either system.

Your own prior article Effectively using Discourse together with group chat | Blog suggests things like

New user: How can I do X?
Helpful user: Good question. Please re-post this to our public forum so that any answers you receive can be searched for and read by anyone else who might be asking the same thing.

This is a fine policy to handle some of the problem, but from a UX perspective it is not ideal for the user. Instead I would love to be able to click on their message in Discord, then with a single command generate an invite link to the forum, sending them to the correct category, and ideally even initiate the “New Topic” action after they sign up, and bonus points for copying the actual contents of their message from Discord into the Discourse topic.

Maybe it also auto-biases to Discord login integration, e.g. user clicks link in Discord, new browser window opens to the forums, with a pop-up that says “You’ve been invited to join the X Discourse community! Click Join login with your Discord account, or choose an alternate login option to the right.” Then once they sign up, it takes them to new topic, maybe.

The suggestion to “wait until chats finish then generate a summary” could also really use some help from the tools. I see you do have a Slack tool that does some of the work semi-automatically, which is great. I haven’t used it, so I don’t know how it handles things like usernames, which would ideally connect with any existing Discourse user names, but more importantly it would be great to have such capability for Discord. I see in that prior blog post there’s an invitation for collaboration from other chat apps, but I’m guessing that didn’t happen. What would it take to incentivize this sufficiently? Could it be made even more powerful, operating on a selection rather than “last 20 message”? And, if this is not already part of the Slack version, auto-generating a link back to the chat in the forum post would be nice too.

I’m really just spit-balling here, but I think at least some of this would really help.

Personally in the long-term I’m really hoping that a single tool emerges that better combines both approaches, sync and async. I know there have been some recent discussions of high volume Discourse topics maybe being able to morph into chats, perhaps with some ephemerality. I’m hoping that this whole concept gets some really deep consideration and a bit of a “blue sky” approach to providing the best set of tools for communities to actually integrate the values of both approaches.

For me this would ideally be realized within Discourse. Perhaps one could spawn chat anywhere, connected to an existing topic, or not (category-level chat would be cool). It could perhaps work a bit like Slack threads in that it “branches” off somewhere, i.e. you’re reading a topic and get to a “reply” that is actually a visual summary of a real time chat that happened, “Chat generated 243 messages on 5/31/21 with users x, y, z [avatars]” or whatever. A modification of the existing topic summary bar, specific to chat, with styling to differentiate it, and click to open the chat window to review it, or expand in-line or something.

Chats could be auto-archived or even deleted, if desired. But ideally tools would be provided to summarize a chat back into the topic, perhaps using familiar Discourse message editing functions (multi-select, etc.). Mods could do this, or users could select one or more messages of their own to contribute back to the topic, if desired. If they don’t after a set period of time it’s all archived (optionally?). For category-based chats, one could “promote” a chat message to a topic, as well.

Anyway, there are a zillion possible ideas. But this seems like a big area of potential value if it can be done right within Discourse. Lessen the tension between e.g. Discord and Discourse, and the “rigidity” of the Discourse approach, while maintaining the benefits of both, and I think it’d be a big win. Easier said than done, but a worthy challenge for sure!

Edit: also I know there has been a ton of varying discussion around similar subjects in the past, e.g.

etc.

Babble is cool, although it doesn’t seem that well supported. More importantly it doesn’t solve most of the problems I’m talking about above, though it does at least integrate everything into one place, which does make it easier to move between interaction modes…

Edit 2: Also-also, there should probably be chat-only categories/“channels”. But again with the possibility to “promote” a message (or series of messages?) into a topic. And now I wonder if I shouldn’t have posted this as a new topic somewhere. Oh well. :grinning_face_with_smiling_eyes:

15 Likes

You maybe interested in "Discord Bot": run one on your Discourse server & keep things in sync

It’s a general integration plugin that can link Discord to Discourse in a couple of ways.

It’s designed to be extensible. It uses the Discourse events framework and the Discord API Ruby gem.

PRs for additional features welcome.

8 Likes

Nice, thank you. I’m definitely hoping for deeper/more sophisticated integration which may be out of the scope of what you’ve developed. But it’s definitely a nice plugin to have in the meantime.

By the way, more generally, I subsequently discovered this earlier post from Sam that shows this has been on the Discourse team’s mind for quite some time! Some great details on his thinking are over in that thread, this is just some of it:

7 Likes

Can you please elaborate in some detail? What do you mean by “deeper” & “sophisticated” integration?

Please feel free to submit PRs or consider specifying (& potentially funding) features to grow the plugin.

1 Like

I wrote a plugin that solves this problem somewhat. At least when it comes to permissions: Here is an introduction of how it works: Sync your Discord roles with your Discourse groups! - YouTube

It connects the permission systems of both platflorms.

I think a good idea would be to take this and flip it on its head. Instead of pointing people from discord to discourse we could treat the conversations that happen on discord as an asset. Its a giant treasure trove of content that can be used to automatically create threads in discourse.
When I wrote the plugin to sync discord roles with discourse groups I recognized how powerful the discord api is. We can react to any event that happens on the discord server. So for example we could create discourse threads every time somebody uses a question mark. I think questions and their answers are probably the most valuable low hanging fruit on the discord side that we could pick and put into the discourse fruit basket. This would also widen the funnel into the community because suddenly the most valuable parts of the discord conversations become accessible from the normal web. Discord conversations are not indexed by search engines at the moment, so this could open up a big opportunity.

3 Likes

Sure! I outlined some of these ideas above actually. For example:

But to hopefully outline it generally (and keeping in mind that I realize some of this may be impossible or more difficult than it is worth, this is the idealized vision):

Ability for Admins, Mods, or anyone (depending on permission settings) to instantly create Topics in Discourse from one (or more) messages in Discord with super simple UI, e.g. right-click.

  • UI to select Category and tags (optionally) for new Topic
  • Multi-select could be used to identify several messages to include
  • Basic version could simply create a Topic from System or other Discourse non-person user, with contents of 1 or more Discord messages as a single message beginning a new topic
  • Advanced version would ideally match Discord to Discourse users and create a Topic from the first message selected, attributing it to the correct matching user, with the other selected messages as replies, again correctly attributed
  • In either case, a message would be posted to Discord like “A conversation here has just been turned into a Discourse topic. Head on over there to continue the discussion if you like! [link].”

Scroll down on this page to “Retroactive Threading” for a good example (both in concept and UI) for what I have in mind:

Stretch goals:

  • Another nice feature would be notifying the user(s) who(se) message(s) are being turned into a Discourse topic within Discord, with a link to the new topic
  • Allowing user(s) whose messages were selected for topic creation to deny/opt-out would also be nice to have
  • Option to automatically invite authors of selected messages to Discourse if they don’t already have an account (or one can’t be found that matches, which could be addressed in signup if they do have an account, just with a different email, etc.)
  • Integration with Discord’s existing (newly added) thread hinting behavior where it says (when people Reply to a previous message) “Want to make it easier to follow this conversion of X replies? Start a [thread]” by adding another option e.g. “Start a [thread], or a new [topic] in our forum.
  • Detection of long messages being composed in Discord and then offering the suggestion e.g. “It looks like you’re writing a very long chat message. Do you want to [start a forum topic] instead?”
  • In-line, expandable (pop-up, scrollable?) topic views for topics that are linked to a message/Discord thread, i.e. it shows a normal “onebox” type preview, but you can click it to view more of the actual conversation somehow, like in a popup with scroll

The overall goal is to make it easier, if not seamless, for people to start new topics from existing conversations in Discord and continue their more in-depth conversations on a platform where it makes more sense. And ideally to also provide contextual but unobtrusive hints (much as Discord already does) when people might want to continue a conversation on the forums rather than in Discord. I don’t pretend that some of this won’t itself be a bit cumbersome or awkward, but I do think it would be an improvement over what we have.

It remains to be seen how the chat integrated into Discourse itself will look like, as well as how much it will be adopted e.g. for communities that want to have an active real time component as well as forum, vs. those that for example started in Discord, or already have both a strong Discord and forum community. Will the integration be enough to get new community developers to just use Discourse for both real time and forum functions? We’ll see. But the utility of much of what I’ve proposed above might heavily depend on that outcome.

I’m not a coder, but I do think about funding things frequently. The problem is I have numerous things I want to see added to/improved in Discourse, and certainly not enough money to fund them all. :grinning_face_with_smiling_eyes: So I prioritize… The Discord integration features are more something of interest for my consulting clients, so I’m hopeful one day I can convince one of them to fund some expansion there.

Yeah, I did come across this at some point, not sure if before or after my post above. It’s helpful, so thank you for that. It only covers part of the “problem”, but it’s definitely a part of a possible solution.

I agree with you for the most part, but I’m cautious about automated posting/reposting. Cautious but interested in the possibilities, certainly. If it could be rule-based, as you describe, it could be more useful.

That’s very interesting! I’m not familiar with the Discord API so I’m not sure what’s possible, but what you describe sounds like it could allow for some useful solutions. Something rule-based, as I mention above, would be a good option to have.

However I still think powerful tools for mods/admins to manually “curate” Discord content might be the most important or useful thing. Certainly it’s what we have the least capability for now, because Integromat (for example) can already essentially do what you’re describing, looking at Discord topics that are posted, searching for particular text (e.g. ?), or even particular reactions (e.g. an emoji react restricted to mods/admins that triggers via Integromat to post only those topics to Discourse) and then create a Discourse topic from that. So while it’d be nice to have that functionality in a native plugin/integration, it feels less exciting as an area of focus for me than what I’ve described above.

2 Likes

this is what I had in mind.

I am not sure if I understand you correctly: do you mean the right click should happen in the discord or in the discourse UI?

I also think that it should be curated. But the issue is that we cant add features to the discord UI. Thats out of our control. So we would need to use the discord API to import all the discord messages into discourse. And then we could have a kind of “discord analytics hub” in the discourse admin/moderator Dashboard, that lets your browse the discord messages and analyze them and automatically create threads from them. Maybe there could also be a notification for a mod every time someone uses a question mark or other symbol in discord. The notification would lead them to a page where they could turn the question and the answers into a discourse thread immediately or dismiss the notification.

3 Likes

Thanks for the detailed response @oshyan

Yeah, Discord is not open source and I believe modifying the official client is against its terms of service.

(Let’s appreciate for a moment the refreshing difference in the way Discourse is managed and exposed for modification!)

You could build or modify an alternative client, but that’s a big undertaking to track the features of the official client (whilst adding more!). I’m not that up-to-speed with alternative clients but if you can suggest one that is well maintained and has a plugin system …

So right off the bat, I’d say Discord side UI modifications are going to be more tricky.

However, I’m about to release a new change to the Discord Bot plugin that allows you to copy the x last messages from Discord into a new Topic in Discourse.

This is achieved by “bot” command as apposed to a menu click.

It respects and matches user accounts and allows you to specify the target Topic title or Category.

In this release there is also a feature to auto copy chat from Discord to Discourse if the channel and Category names match.

There is already an ability to post new Topics into an announcements Channel.

4 Likes

In Discord.

Yeah, I wasn’t aware of that, but I suspected as much. Which is part of why I haven’t laid all this out before now. That said it sounds like @merefield has been able to accomplish a fair bit with this recent update! So that’s pretty exciting.

This is an interesting idea, but it does seem like a bit of a “heavy” solution… (admittedly mine is heavy in its own ways, and yours at least is feasible in the sense that Discourse is open source while Discord is not).

I’ll second that!

Unfortunately 3rd party clients appear to be against the Discord ToS and the only ones I have seen are either abandoned, or closed-source (and likely to be banned at some point anyway). Matrix has a Bridge to Discord, but that’s about it.

Yeah, that makes sense. What I described was my ideal case, but I figured it was probably not feasible.

Oh wow, I didn’t expect this. Fantastic! While it may not be quite as convenient or customizable as I envisioned, it sounds like this might actually fulfill most of the basic goals I had in mind for improvements. I’m really glad to hear this has also seemed useful enough to others that you’ve worked on it. Thank you!

When you say it matches user accounts, does it create a single Topic with the earliest Discord message in the set as the first message, and the rest as replies?

Huh, interesting. So does it just make every message into a new topic, or what? If not, how does it determine what is a Topic starter and what is replies?

Thank you again for working on this. I’m excited to try the updates when available.

3 Likes

By matching accounts I mean if the person logs in using their Discord credentials, so that an associated login exists, then the message in Discord will be correctly attributed and accompanied by the correct Avatar in Discourse.

No this would be wasteful I think, it targets a single Topic in the Category.

3 Likes

Yes, I understood that. What I was wondering about is you use “accounts” plural, and the modification imports the “last x messages”. What if those messages are from 5 different people? Does it then create a single topic with 5 separate messages (as replies), each one attributed to a matching Discourse account (if available)?

I agree. I figured it didn’t work this way, but am unclear on how the details of how it works. That said, I think it just makes sense for me to wait until you release it and if I have any remaining questions at that time, then I can ask. Thanks again! :slight_smile:

1 Like

Those updates were released: Discord Bot: run one on your Discourse server & keep things in sync - #82 by merefield

5 Likes