About

Why LunaLink exists.

Finding people to play with across Discord should not require this much effort. LunaLink was built to close that gap, one cross-server command at a time.

The problem

Discord was not designed for this.

Servers are siloed. LFG channels only reach people already in your community. Coordinating across multiple servers means juggling invites, links, and hoping people have DMs open.

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 are not limited to whoever happens to be in the same server you are in right now. You are searching the full network, and the game search is powered by IGDB, so you are picking from a real database of over 200,000 games with live autocomplete as you type.

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.

Beyond that, LunaLink handles scheduling so you can set up a party in advance, reporting so bad actors can be flagged, and Patreon-linked premium so subscriptions manage themselves automatically. The goal was to make the whole process from “I want to play something” to “I am in a party with people” as short as possible.

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 to open an interactive form. Search your game via IGDB, pick your mode, party size, and expiry, then hit Go Live.

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 is built.

LunaLink is a Node.js bot with a SQLite database, IGDB integration for game data, and a live admin dashboard.

RuntimeNode.js

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

Discord libraryDiscord.js v14

Uses V2 components, slash commands with autocomplete, button and select menu interactions, and DM channel partials for reading direct messages.

DatabaseSQLite

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

Game dataIGDB API

Game search and autocomplete are powered by IGDB. /randomgame also pulls live from IGDB filtered by rating and popularity.

PremiumPatreon OAuth

Users link their Patreon account via /linkpatreon. Webhooks from Patreon automatically grant or revoke premium when subscriptions change.

HostingSelf-hosted

LunaLink runs on a private VPS. The live dashboard is at stats.lunalink.uk.

Get started

Try it yourself.

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

Add LunaLink to Discord