About

Why LunaLink exists.

Finding people to play with across Discord shouldn't require this much effort. LunaLink was built to close that gap.

If your friends play different games across different servers, finding someone to actually play with on any given night involves a lot of pinging and waiting. Most LFG solutions are either tied to a single server or require you to join yet another community just to find a match.

LunaLink was built around a different idea: what if one bot could sit in all your servers at once, build a shared pool of available players, and let anyone search that whole pool with a single command?

The cross-server search means that when you run /findparty, you're not limited to whoever happens to be in the same server you're in right now. You're searching the full network of servers LunaLink is active in.

The DM relay solves the communication side without requiring a shared server. Once your party forms, the bot becomes the relay point. Everyone talks through their DMs with LunaLink, and messages are forwarded to the whole party. No server invites. No sharing personal contact details. Just coordination.

The goal was to make the whole process — from "I want to play something" to "I'm in a party with people" — as short as possible. A couple of commands and you're done.

How it works

From available to in a party.

The whole flow takes less than a minute once the bot is in your server.

STEP 01

Add LunaLink

Invite the bot to your server. No configuration needed. It starts listening for commands immediately.

STEP 02

Go available

Run /available with your game, mode, and party size. You're now visible to anyone on the network who runs /findparty.

STEP 03

Someone joins

When a player hits Join on your listing, both of you get a DM from LunaLink setting up the party relay.

STEP 04

Chat and play

Message LunaLink directly to talk to your party. Everything gets relayed. No shared server needed.

Under the hood

How it's built.

LunaLink is a lightweight Node.js bot with a SQLite database. No external dependencies beyond Discord's API.

Runtime Node.js

The bot runs as a single persistent Node.js process, managed by PM2 in production for automatic restarts and logging.

Discord library Discord.js v14

Uses slash commands, button interactions, and the DM channel partial intent for reading direct messages.

Database SQLite

All listings, party members, usage records, and premium accounts are stored in a local SQLite database via better-sqlite3.

Cross-server search Shared DB

Because the bot is one process across all servers, every listing writes to the same database. /findparty queries that single database regardless of which server the command came from.

Game matching Alias table

250+ games are pre-mapped with their common aliases. Search input is normalised before hitting the database, so variant spellings resolve to the same canonical name.

Hosting Self-hosted

LunaLink runs on a private server. The dashboard at /dashboard shows live stats. The public website you're on now is a fully separate static site.

Get started

Try it yourself.

Add LunaLink to your server and see how fast you can fill a party.

Add LunaLink to Discord