Discord Integration¶
Connecting PulseRoster to Your Discord Server¶
PulseRoster integrates with Discord for authentication, role synchronization, and bot commands.
Linking Discord Server¶
Setup Steps¶
- Go to Settings > Discord
- Enter your Discord Guild ID
- Add the PulseRoster bot to your server
- Configure role mappings
Finding Your Guild ID¶
- Enable Developer Mode in Discord (Settings > Advanced)
- Right-click your server name
- Click Copy Server ID
Adding the Bot¶
- Click the Add Bot link in settings
- Select your Discord server
- Grant required permissions
- Complete authorization
Required Bot Permissions¶
| Permission | Purpose |
|---|---|
| Manage Roles | Add/remove roles from members, including the on-duty role |
| View Channels | Access server information |
| Read Messages | Process commands |
| Send Messages | Respond to commands |
| Embed Links | Post the duty board and command replies |
Department Discord Servers¶
Link more Discord servers alongside your main one, such as a DOT or Fire department's own server.
Linking a Server¶
- Go to Settings > Discord
- Under Department servers, enter a name, the server's ID and (optionally) the department it belongs to
- Click Link server
- Open the server's row and click Add the bot to invite the bot there too
What Works in a Department Server¶
- Role mappings. Pick the server at the top of Role mappings. Each server has its own mappings, so a rank can give one role in your main server and another in the department's server.
- Sync roles covers every linked server.
- Nickname sync renames members there too, using their callsign and badge from that server's department.
- Notifications can post to channels in any linked server after you refresh channels.
- Bot commands (
/roster,/duty,/loaand the rest) work inside the department server.
Members only get roles in a server they have joined. Members who haven't joined are skipped, not reported as errors.
Limits¶
| Plan | Extra servers |
|---|---|
| Free | 1 |
| Standard | 5 |
| Professional | Unlimited |
Unlinking¶
Open the server's row and click Unlink. Its role mappings are removed. Roles already given in that server stay, but PulseRoster stops managing them.
Role Mapping¶
Map PulseRoster entities to Discord roles.
Mappable Entities¶
| Entity Type | Description |
|---|---|
| Ranks | Department ranks |
| Subdivisions | Specialized units |
| Certifications | Member qualifications |
| Community Roles | Title/badge roles |
Setting Up Mappings¶
- Go to Settings > Discord
- Under each entity type, click Add Mapping
- Select the PulseRoster entity
- Select the Discord role
- Save
Example Mappings¶
| PulseRoster | Discord Role |
|---|---|
| Sergeant (Rank) | @LSPD Sergeant |
| SWAT (Subdivision) | @SWAT Unit |
| FTO (Certification) | @Field Training Officer |
Automatic Sync¶
When enabled, PulseRoster automatically syncs roles.
Sync Triggers¶
| Event | Action |
|---|---|
| Promotion | Add new rank role, remove old |
| Demotion | Add new rank role, remove old |
| Department Transfer | Remove old department roles, add new ones |
| Termination | Remove all mapped roles |
| Certification awarded | Add certification role |
| Certification revoked | Remove certification role |
| Subdivision joined | Add subdivision role |
| Subdivision left | Remove subdivision role |
Enabling Auto-Sync¶
- Go to Settings > Discord
- Enable Automatic Role Sync
- Save
Discord Notifications¶
Send automatic notifications to Discord channels when events occur in PulseRoster.
Tier limits
Discord notifications are available on every plan, capped by plan: Free can configure up to 3 event types, Standard up to 15, and Professional all event types.
Setting Up Notifications¶
- Go to Settings > Notifications
- Click Sync Channels to load your Discord channels
- Configure events individually, or use a category's Apply to All to set one channel for every event in that category:
| Setting | Description |
|---|---|
| Event Type | What triggers the notification |
| Channel | Discord channel to send to |
| Role Mention | Optional role to ping |
| Department Filter | Limit to specific departments |
Available Events¶
| Event | Description |
|---|---|
| Member Joined | New member added to community |
| Member Left | Member removed or terminated |
| Promotion | Member rank increased |
| Demotion | Member rank decreased |
| Department Transfer | Member transferred between departments |
| LOA Requested | Member submits an LOA request |
| LOA Approved | LOA request approved (leave begins) |
| LOA Denied | LOA request denied |
| LOA Returned | Member returns from leave |
| Disciplinary Issued | Disciplinary action issued |
| Disciplinary Appeal | Member submits an appeal |
| Disciplinary Resolved | Disciplinary action resolved/closed |
| Certification Awarded | Certification granted |
| Certification Revoked | Certification revoked |
| Commendation | Award given |
| Transfer Requested | Member requests a department transfer |
| Transfer Source Approved | Source department approves the request |
| Transfer Denied | Transfer request denied |
Notification Format¶
Notifications are sent as rich embeds with:
- Member name and avatar
- Event details
- Timestamp
- Link to view in PulseRoster
Manual Sync¶
Force a complete role synchronization.
Full Sync¶
- Go to Settings > Discord
- Click Sync All Roles
- Wait for completion
This will:
- Check all members
- Add missing roles
- Remove incorrect roles
- Report any errors
Individual Sync¶
Sync a single member:
- Go to member profile
- Click Sync Discord Roles
- Roles update immediately
Discord Bot Commands¶
If your community uses the PulseRoster Discord bot, members can run these slash commands directly in your Discord server. Replies are only visible to the person who ran the command, so they never clutter a channel.
Available Commands¶
| Command | Description |
|---|---|
/roster [department] |
Your roster, grouped by department, with rank and callsign |
/lookup <member> |
A member's profile: status, rank, callsign, badge, certifications |
/activity |
Your logged hours this period and progress toward your requirement |
/loa <start> <end> <reason> |
Submit a leave of absence request |
/duty |
Clock on and off duty from a private panel; see Duty Clock below |
Members must link their Discord account
The bot identifies people by their linked Discord account. A member who has not connected Discord to their PulseRoster profile cannot use these commands; the bot replies with a link to connect it. Members link their account under Settings on their own profile.
Duty Clock¶
The duty clock lets members go on and off duty from Discord. The time between clocking in and clocking out is logged to their activity hours automatically, so there is nothing to fill in afterwards.
Included on every plan
The duty clock is part of activity tracking and is available on every plan, including Free.
Turning It On¶
- Go to Settings → Activity
- Scroll to Discord Duty Clock
- Tick Enable the duty clock and save
It is off by default. Nothing changes for your members until you enable it.
Clocking In and Out¶
There is one command. Members run /duty and a panel opens that only they can see, showing whether they are on or off duty and the buttons that apply:
| Button | What it does |
|---|---|
| Clock In | Go on duty. Appears when you are off duty |
| Clock Out | Go off duty. Your hours are logged automatically |
| Who's on duty | Everyone currently on duty and how long they have been out |
The panel updates itself in place as you use it, so there is one message to look at rather than a trail of replies.
Members in more than one department
If you serve in several departments, the panel adds a dropdown so you pick which one you are going on duty for before you clock in. Members in a single department never see it.
A shift shorter than a minute is closed without logging anything, so a mis-tap does not leave an empty entry on your record.
If your community has set up more than one activity type, the panel also lets you change what the current shift is logged as while you are on duty.
The Clock In/Out Board¶
You can also put a permanent board in a channel, showing who is on duty with Clock In and Clock Out buttons anyone can use:
- Go to the channel you want the board in
- Run
/dutyand press Post board here
The board updates itself as people come on and off duty, so the channel always shows who is currently out. Pressing a button on it opens your own private panel rather than changing what everyone else sees.
You need to be the community owner or hold the Manage Integrations staff permission to post one, and the bot needs permission to send messages and embeds in that channel. Posting a new board removes the previous one, so you never end up with two.
Seeing Who Is On Duty¶
Alongside the Who's on duty button in Discord, your Time Logs page shows a live on-duty board with each person's department and how long they have been out, counting up in real time. Community staff see everyone, supervisors see their own departments, and members see their own shift.
Supervisor Controls¶
Supervisors and command staff get a Manage button on their own /duty panel. It lists who is on duty, lets you pick a member, and closes their shift once you confirm. Use it when somebody logs off without clocking out.
Supervisors can also clock someone out from the on-duty board on the Time Logs page. Hours from either action are always recorded as unverified and flagged for review, since nobody witnessed the shift directly.
To add hours for a member who could not reach Discord at all, use the time log form on the Time Logs page: it records the real start and end times, rather than starting a shift from the moment you press the button.
Settings¶
| Setting | What it controls |
|---|---|
| Enable the duty clock | Turns the whole feature on or off |
| Auto-verify Discord shifts | Whether clock-out hours count as verified without supervisor review. Off by default |
| Maximum shift length | How long a shift can run before it is closed automatically. Default 12 hours |
| Activity type for duty shifts | Which activity type the hours are logged under. Default Patrol |
| On-duty Discord role | An optional role applied while someone is on duty, so it shows in the member list |
Forgotten Clock-Outs¶
If someone forgets to clock out, their shift is closed automatically once it passes your maximum shift length. They are credited only up to that limit, the hours are logged as unverified, and the entry is flagged for review. A forgotten clock-out therefore neither runs up hours nobody earned nor throws away a real shift.
The On-Duty Role¶
If you nominate a Discord role under Settings → Activity, the bot adds it when someone clocks in and removes it when they clock out, so who is out is visible at a glance in your member list.
For this to work the bot needs the Manage Roles permission, and the bot's own role must sit above the on-duty role in your server's role list. If the role does not appear, that hierarchy is almost always the reason. The role is cosmetic; if Discord rejects the change, the shift is still recorded correctly.
Troubleshooting¶
Roles Not Syncing¶
- Verify bot is in server: Check server member list
- Check bot permissions: Needs "Manage Roles"
- Check role hierarchy: Bot role must be above roles it manages
- Try manual sync: Use the sync button in settings
Common Issues¶
| Issue | Solution |
|---|---|
| "Missing Permissions" | Move bot role higher in hierarchy |
| "Role not found" | Verify role still exists in Discord |
| "User not found" | Member may have left Discord server |
| "Rate limited" | Wait a few minutes and try again |
Duty Clock Issues¶
| Issue | Solution |
|---|---|
| "Link your Discord account first" | The member has not connected Discord to their PulseRoster profile. They can do it under Settings on their own profile |
| "Duty clock is off" | Enable it under Settings → Activity |
| "This server is not connected" | The Discord server is not linked to your community. Connect it under Settings → Discord |
| "Which department?" | The member serves in several departments and none is marked primary. Add the department to the command, or set a primary department |
| Commands do not appear | Newly added commands can take up to an hour to show in every server. Try fully restarting your Discord client |
| On-duty role not applied | The bot's own role must sit above the on-duty role, and the bot needs Manage Roles |
| Board not updating | The board refreshes about once a minute. If it stopped entirely, run /duty and press Post board here again; the old message may have been deleted |
Bot Role Hierarchy¶
The PulseRoster bot can only manage roles below its own role. Ensure:
- Go to Discord Server Settings > Roles
- Drag the PulseRoster bot role above all roles it needs to manage
- Save changes
Multiple Discord Mappings¶
You can map multiple PulseRoster entities to the same Discord role.
Example¶
Map both "Sergeant" and "Senior Officer" ranks to the same "@Senior" Discord role.
Behavior¶
- Role added when member has any mapped entity
- Role removed only when member has no mapped entities
Quick Reference¶
Discord URLs¶
| Page | URL |
|---|---|
| Discord Settings | /c/[slug]/settings/discord |
Required Permissions¶
| Action | Permission |
|---|---|
| Configure Discord | community.settings |
| Manual sync | community.settings |
Need help? Join our Discord Community for support.