Tweet
Aaaanyhow, those who are interested in getting early access and to the Slack-Discord bridge should message me!

πŸ‘‡ I'll help you get set up as soon as next week!
twitter.com/messages/compo…

#buildinpublic #slack #discord
Speaking of going fast: The rest kind of happened in a flash! In no specific order today I implemented the following

πŸ“ Message editing
πŸ—‘ Message deleting
πŸ™‹β€β™‚οΈ Emoji reactions
🧡 Discord thread mirroring

We are now at feature parity with the @NomadList version!

#buildinpublic
Implemeting message sync from #Discord to #Slack was much smoother!

Only annoyance is that Slack doesn't let you customize the username and avatar on file uploads. Had to work around that.

Oh well. We're going fast now!

#buildinpublic
I spent a long time messing around with this, because apparently Laravels HTTP client does not do well with FormData requests, buuut:

πŸ“‚ We're now syncing files from #Slack to #Discord!

That means that we're done syncing in one direction

Now the same in reverse

#buildinpublic
This morning I got around to finalizing the threading feature. It's not 100% in line with what usually happens on Discord as I have to create a thread every time someone replies on Slack, but in a way I find the UX actually closely mirrors each other.

#buildinpublic
Also this already works across all synced channels. More of a minor detail, but it's neat that the existing code translates over so well!

Anyhow, onwards!

#buildinpublic
If you mention a channel, however, the link does correctly translate, which is super freaking cool imo.

Plus it's a nice quality of life improvement for the other side so they don't have to search for channels on their own.

#buildinpublic
Also channel/username mentions and emojis get correctly translated already.

I wish I could @ the proper user on the other side but that seems pretty hard to do without maintaining a mapping of users on both sides, something I'd rather avoid.

We'll see!

#buildinpublic
I'm back with more things! One of the big chunks is done: We can sync basic messages from Slack to Discord now!

I forgot how fiddly this was, but it's running well now! Next up I have to implement reply functionality and then we can do the Discord side!

#buildinpublic
I also setup an async queue for both sides of the sync process so the app can process the messages without blocking any incoming requests.

#buildinpublic
Yday was Austria day πŸ‡¦πŸ‡Ή so instead of working I spent quality time with my wife and pug.

This morning was housekeeping! I noticed the extended workflow I used for Discord had expiring tokens. Every 5 minutes the app now refreshes all Discord tokens expiring soon

#buildinpublic
And the entire onboarding workflow is done. It came out a lot smoother than I thought!

Of course it still needs some polish before the launch, but for testing it’s perfect already.

Now we β€œjust” have to hook up the existing message processing to the new app!

#buildinpublic
Good progress on step 2! Now fetching all the channels from both the Slack and Discord servers and matching them up by name

If I can't find a match, I give out a warning for that

Now we just need to save this as config and then we can get to the actual bridging!

#buildinpublic
Today's first task was implementing the installation flow for Slack, which is a bit more involved than Discord

It also showed me a way that I can get both the Slack team ID and the Discord guild ID through bot installation

So the setup process is now 2 steps!

#buildinpublic
Also implemented the first part of step 2: Adding the bot to your Discord, which is just me sending you to an external link! Easy as pie!

Slack is a bit more tricky because they do some OAuth 2 bullsh-- ✨ magic to ensure I get a separate token for each workspace

#buildinpublic
Alright! Added the first step in the process which is adding your server IDs, which I need to keep messages associated in pairs!

For now you just set-and-forget them (lean startup, yo!) but I'll let you edit them in the future. ;)

#buildinpublic
I also set up a tiny dashboard that can guide the first early access users through the process of setting things up.

These 3 steps should be enough, but I might have to adjust this as I keep developing.

#buildinpublic
Slack app is now setup and added to my demo workspace. Good thing I have the Nomad List internal app to figure out all the scopes etc. Saves so much headache to know these upfront.

#buildinpublic
Exciting news to bring to you today:

πŸ’΅ The Slack-Discord bridge has its first official customer!

But I'm now on a clock to get this running ASAP! We gotta pick up the pace and cut the MVP scope down to the absolute minimum to get this out the door! Let's gooo!

#buildinpublic
And we're off to the races! Today's hour is dedicated to setting up a new Slack workspace and Discord server as well as setting up the connection for the Discord bot.

πŸ€– It's alive!

Tomorrow will be doing the same thing for Slack, which is a lot trickier!

#buildinpublic