Discord-to-Linear
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
How it works: React to any Discord message with a configured emoji (like :huss:
or 🧿
- used as an example in this val) and it automatically becomes a Linear ticket with context from the Discord thread.
Team members can use custom emojis to identify themselves as the ticket creator.
Before you can run this cron, you must add the following Environment Variables (via left sidebar of this val):
DISCORD_BOT_TOKEN
: Your Discord bot token- Go to Discord Developer Portal → Create application → Complete the steps → Go to
Bot
on the sidebar → Copy token (orReset Token
and thenCopy
if you didn't copy it the first time) - Important: Enable "Message Content Intent" in Bot → Privileged Gateway Intents
- Go to Discord Developer Portal → Create application → Complete the steps → Go to
DISCORD_SERVER_ID
: Your Discord server ID (right-click server name → Copy ID)DISCORD_MONITORED_CHANNELS
: Comma-separated channel IDs to monitor (right-click channel → Copy ID)- Example:
1327384540187983926,1327384540187983927
- Example:
LINEAR_API_KEY
: Your Linear API key- Go to Linear Settings → API → Personal API keys → Create key
LINEAR_TEAM_ID
: Your Linear team UUID, this is NOT the 3 letterTeam Identifier
found in issue IDs- On any Linear page, type
CMD+K
to pull up the quick menu + enterDev: Copy model UUID
to copy your UUID - Example:
6312a2a0-633b-47dc-a225-81d5d1759bf4
- On any Linear page, type
- Create bot: Discord Developer Portal → New Application → Bot
- Set permissions: OAuth2 → URL Generator → selecting
bot
unfurls a Bot Permissions dropdown below → SelectView Channels
,Read Message History
,Add Reactions
- Enable intents: Bot → Privileged Gateway Intents → ✅ Message Content Intent
- Invite bot: Use generated URL to add bot to your server
main.tsx
- Main cron job that runs every minute checking for new reactions, you can also manually pressRun
to run it immediately- Emoji Configuration - Edit
backend/config.ts
to customize team member emojis:
TARGET_EMOJIS: {
"huss": "Huss", // Custom Discord emoji :huss:, use just the name without colons (e.g., `"huss"` for `:huss:`)
"nas": "Nas", // Custom Discord emoji :nas:
"🧿": "Team", // Unicode built-in emoji, use the actual emoji (e.g., `"🧿"`)
}
Cron