Assignee mapping
Map provider assignee names to Discord users for privacy-safe mentions.
The plugin maps provider assignee names (like Jira display names) to Discord user mentions. This keeps provider identities private while showing relevant Discord mentions in forum threads.
How it works
Provider display names are never shown directly in Discord. Instead, the assignee mapping system:
- Stores the provider's display name as an internal key
- Looks up the corresponding Discord user ID from guild-specific mappings
- Renders a Discord mention (
<@userId>) in thread content - Hides the assignee entirely if no mapping exists
This is a security contract. Provider names like Jira's displayName must never appear in public-facing Discord content.
Interactive setup
The easiest way to manage mappings is through the /roadmap setup panel:
- Run
/roadmap setup - Click "Provider Settings"
- Use "Add Mapping" to create new assignee mappings
- Select a Jira name from the dropdown, then select the corresponding Discord user
- Use "Remove" buttons to delete existing mappings
- Click "View All" to see all configured mappings
Programmatic API
Manage mappings directly with the settings API:
import {
setAssigneeMapping,
removeAssigneeMapping,
getAssigneeMapping,
getDiscordUserIdForJiraName
} from '@robojs/roadmap'
// Create a mapping
setAssigneeMapping(guildId, 'Alice Smith', '123456789012345678')
// Remove a mapping
removeAssigneeMapping(guildId, 'Alice Smith')
// Get all mappings for a guild
const mappings = getAssigneeMapping(guildId)
// { 'Alice Smith': '123456789012345678', 'Bob Jones': '987654321098765432' }
// Look up a single mapping
const discordId = getDiscordUserIdForJiraName(guildId, 'Alice Smith')
// '123456789012345678' or undefinedimport {
setAssigneeMapping,
removeAssigneeMapping,
getAssigneeMapping,
getDiscordUserIdForJiraName
} from '@robojs/roadmap'
// Create a mapping
setAssigneeMapping(guildId, 'Alice Smith', '123456789012345678')
// Remove a mapping
removeAssigneeMapping(guildId, 'Alice Smith')
// Get all mappings for a guild
const mappings = getAssigneeMapping(guildId)
// { 'Alice Smith': '123456789012345678', 'Bob Jones': '987654321098765432' }
// Look up a single mapping
const discordId = getDiscordUserIdForJiraName(guildId, 'Alice Smith')
// '123456789012345678' or undefinedDiscord User ID custom field
Skip manual mapping entirely by storing Discord User IDs in a Jira custom field. When configured, this takes priority over the assignee mapping system.
JIRA_DISCORD_USER_ID_FIELD_ID="customfield_10042"The field value must be a 17-19 digit numeric Discord User ID. Invalid values are logged and the system falls back to the standard assignee mapping.
See Provider setup for detailed configuration steps.
Content rendering
When a card is synced, the formatCardContentV2() function renders assignees as Discord mentions with avatar thumbnails:
- If the first mapped assignee has a valid Discord account in the guild, their avatar appears as a thumbnail in the Components v2 section
- All mapped assignees appear as
<@userId>mentions in the "Assigned to" metadata field - Unmapped assignees are hidden entirely
Admin-only exceptions
The /roadmap setup panel displays raw provider names in the mapping configuration UI. This is the only context where provider names appear, and it's restricted to administrators managing the mappings.
