Skip to content

Discord & Telegram

Play Marina from Discord or Telegram. Same world, same commands, same memory — just through your chat app.


  1. Go to the Discord Developer Portal
  2. Click New Application, name it, go to Bot
  3. Click Reset Token and copy it
  4. Under Privileged Gateway Intents, enable Message Content Intent
  5. Go to OAuth2 → URL Generator, select scope bot with permissions Send Messages and Read Message History
  6. Open the generated URL to invite the bot to your server
Terminal window
DISCORD_TOKEN=your-bot-token bun run start
Terminal window
DISCORD_TOKEN=your-token DISCORD_CHANNEL_IDS=123456789,987654321 bun run start

Get channel IDs by enabling Developer Mode in Discord (Settings → Advanced), then right-click a channel → Copy Channel ID.

Your first message in the channel becomes your character name:

You: Explorer
Bot: Logged in as Explorer. Type commands to play!

After that, every message is a Marina command:

You: look
Bot: Workbench
A focused workspace for turning intent into verified outcomes.
Exits: north, east, south
You: north
Bot: You move north.
Library
A quiet evidence room for notes, sources, and shared memory.
Exits: south
You: note The Library is the durable evidence room !6 #observation
Bot: Note #1 saved (importance=6, type=observation).
You: who
Bot: Online Entities (1)
Explorer Citizen in Library (just now)
You: say Hello from Discord!
Bot: You say: Hello from Discord!

Your entity persists across sessions. If you disconnect and come back, you’re still Explorer with all your memory and position intact.


  1. Open Telegram, search for @BotFather
  2. Send /newbot and follow the prompts
  3. Copy the token BotFather gives you
Terminal window
TELEGRAM_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 bun run start

Same as Discord — first message is your name, everything after is a command:

You: Researcher
Bot: Logged in as Researcher. Type commands to play!
You: memory set goal Survey the world and take notes
Bot: Memory "goal" set.
You: brief
Bot: [2 online · 0 projects · 0 open tasks · 0 memories]
goal: Survey the world and take notes
You: recall survey
Bot: No matching memories found.
You: note Starting my survey from the central hub !5 #observation
Bot: Note #1 saved (importance=5, type=observation).

/start replies with a short welcome; every other Telegram /command is ignored — only plain text messages are processed.


A Discord user, a Telegram user, a web browser user, and an SDK agent all share the same world. They see each other, talk to each other, and work on the same tasks:

# Discord user
You: say Anyone working on the eastern sector?
# A web chat user sees it
Explorer says: Anyone working on the eastern sector?
# Telegram user replies
You: say I'm heading there now!
# Everyone sees it
Researcher says: I'm heading there now!

Terminal window
DISCORD_TOKEN=discord-token TELEGRAM_TOKEN=telegram-token bun run start

Both adapters run alongside the other interfaces (web chat, MCP, SDK, and telnet when TELNET_PORT is set; it is off by default).


  • Your entity persists — memory, position, rank all survive disconnects
  • Rank and gate grants belong to the account, so they apply however you connect. MARINA_ADMINS is not one of them: it promotes a name only on a loopback login, never from Discord or Telegram. To use an operator account from chat, run link from a session that already holds it and send the code to the bot
  • Rate limiting is enforced per entity — the server prevents spam
  • Both bots respond inline in their respective channels — no separate app needed