Skip to main content

Staff Tracking System

The Technified Staff Tracking System automatically monitors your staff team’s in-game activity in Roblox games. Track sessions, playtime, and custom actions to gain insights into your team’s performance and activity patterns.

What is Staff Tracking?

Staff Tracking is a Roblox integration that connects your games to Technified’s System. It automatically logs when staff members join and leave your game, tracks their session duration, and allows you to log custom actions like moderation events, admin commands, and gameplay milestones.

Key Features

Automatic Session Tracking

  • Detects when staff join and leave your game
  • Records session duration with second precision
  • Sends heartbeats every 60 seconds to confirm active sessions
  • Works across all places in your game

Staff Verification

  • Verifies staff status via Discord roles or Roblox group ranks
  • Caches verification status for 5 minutes to reduce API calls
  • Only tracks users who match your staff criteria
  • Protects against non staff tracking

Custom Action Logging (coming soon)

  • Log moderation actions (bans, kicks, warnings)
  • Track admin commands and tools usage
  • Record gameplay events (quests, achievements, trades)
  • Fully customizable action types

Activity Dashboard

  • View real-time active staff members
  • Browse session history with filters
  • Analyze activity statistics and trends
  • See custom action logs
Chat Commands
  • /start — Manually start a tracking session
  • /end — End your current session
  • /status — Check your session status

Prerequisites

Before setting up staff tracking, ensure you have:
Technified bot installed in your Discord server ✅ Admin access to Technified Dashboard ✅ Roblox Studio access to your game ✅ HTTP requests enabled in your game (Game Settings → Security)

Installation

Step 1: Generate an API Key

Your API key allows the Roblox module to communicate with Technified:
1

Open Dashboard

2

Select server

Select your Discord server
3

Navigate to API Keys

Navigate to Server SettingsAPI Keys
4

Create key

Click Create API Key
5

Generate

Click Generate and copy the API key — you’ll need it in Step 3
Security: Treat your API key like a password. Never share it publicly or commit it to public repositories.

Step 2: Get the Technified Loader

The Technified Tracker is distributed as a Roblox module that auto-updates:
  1. Visit the Technified Loader on Roblox
  2. Click Get to add it to your inventory
The loader requires the MainModule, whenever we release new features or fixes. You don’t need to manually update your code!

Step 3: Install in Your Game

Now let’s add the tracker to your Roblox game:
1

Open Studio

Open Roblox Studio with your game
2

Navigate

Go to ServerScriptService in the Explorer
3

Import the loader

Open the Toolbox and navigate to inventory
4

Place it into your Game

In the inventory should be the Technified Loader, just drag it into ServerScriptService.
5

Open the script

head into the loader script and setup the required configurations.

Step 4: Enable HTTP Requests

Roblox blocks external API calls by default. Enable them:
1

Open settings

In Roblox Studio, click HomeGame Settings
2

Security tab

Navigate to the Security tab
3

Enable HTTP

Enable “Allow HTTP Requests”
4

Save

Click Save

Step 5: Test Your Installation

Let’s make sure everything works:
1

Play in Studio

Click Play in Roblox Studio
2

Join with your account

Join the game with your Roblox account
3

Wait

Wait 10-15 seconds for the session to register
4

Check dashboard

Go to Technified Dashboard → Navigate to your server → Click Server SettingsTrackingActivity Dashboard
5

Verify

You should see your active session!
If your session appears, you’re all set! If not, see the Troubleshooting section.

Configuration Options

The CONFIG table accepts several options:

Required Settings

{
	GuildId = "1234567890",           -- Your Discord server ID
	ApiKey = "technified_xxxxx",      -- Your API key
}

Optional Settings

{
	-- Staff Tracking
	AutoTrackSessions = true,         -- Auto-track when staff join/leave (default: true)
	HeartbeatInterval = 300,          -- Seconds between heartbeats (default: 300 = 5 minutes)

	-- Chat Commands
	ChatCommandsEnabled = true,       -- Enable /start, /end, /status commands (default: true)

	-- API
	RetryFailedRequests = true,       -- Retry failed API calls (default: true)
	MaxRetries = 3,                   -- Max retry attempts (default: 3)

	-- Debugging
	Debug = false,                    -- Print debug logs to console (default: false)
}
Enable Debug = true during initial setup to see what’s happening behind the scenes.

How Staff Verification Works

The tracker verifies staff members before logging their activity:

Verification Process

1

Player joins

Player joins your game
2

Check cache

Module checks cache — Is this player’s staff status already known? (5-minute cache)
3

API verification

If not cached — Module calls Technified API to verify staff status
4

API checks

API checks — Does this Roblox account match a Discord member with staff roles or group ranks?
5

Result

Staff: Session starts automatically, chat commands enabled Not staff: No tracking occurs, chat commands disabled

Staff Criteria

A player is considered “staff” if they match criteria you set in Technified Dashboard:
  • User’s Discord account is verified with their Roblox account
  • User has a Discord role designated as “staff” in Staff Management settings
Configure Staff Roles:
  1. Go to Server SettingsStaff Management
  2. Click Add Staff Role
  3. Set Discord role or Roblox group criteria
  4. Choose permission level (affects dashboard access)
  5. Save

Using Chat Commands

Staff members can control their tracking sessions with chat commands:

Available Commands

Manually start a tracking session
  • Useful if auto-tracking is disabled
  • Starts a new session or resumes paused session
  • Example: /start
End your current session
  • Stops tracking until you rejoin or use /start again
  • Useful for breaks or AFK periods
  • Example: /end
Check your current session status
  • Shows if you have an active session
  • Displays session start time and duration
  • Example: /status

Chat System Compatibility

The tracker supports both:
  • TextChatService — Modern Roblox chat (2023+)
  • Legacy Chat — Classic chat system (pre-2023) [SHOULD NOT WORK ANYMORE]
Commands work automatically in both systems!

Logging Custom Actions

Beyond automatic session tracking, you can log custom actions:

Basic Action Logging

local Tracker = _G.TechnifiedTracker

-- Log an action
Tracker:LogAction(
	player,                              -- Who performed the action
	"KICK_PLAYER",                       -- Action type (your choice)
	Tracker.ActionCategories.MODERATION, -- Category (see below)
	{ reason = "Spamming" },             -- Additional details (optional)
	targetPlayer                         -- Who was affected (optional)
)

Action Categories

Use these built-in categories for organization:

MODERATION

Bans, kicks, warnings, mutes

VERIFICATION

Identity verification checks

MANAGEMENT

Server management actions

SYSTEM

Automated system events

GAMEPLAY

Game events, quests, achievements

ADMIN

Admin commands and tools

CUSTOM

Anything else you want to track

Practical Examples

local function banPlayer(admin, targetName, reason)
	local target = Players:FindFirstChild(targetName)
	if not target then return end

	-- Log the ban
	_G.TechnifiedTracker:LogAction(
		admin,
		"BAN_PLAYER",
		_G.TechnifiedTracker.ActionCategories.MODERATION,
		{
			reason = reason,
			duration = "permanent"
		},
		target
	)

	-- Execute the ban
	target:Kick("Banned: " .. reason)
end

Checking Staff Status

You can check if a player is verified staff:

Is Player Staff?

local Tracker = _G.TechnifiedTracker

if Tracker:IsStaff(player) then
	print(player.Name .. " is verified staff!")
	-- Give admin tools, commands, etc.
else
	print(player.Name .. " is not staff")
end

Get Active Sessions

See all currently active staff sessions:
local activeSessions = Tracker:GetActiveSessions()

for userId, session in pairs(activeSessions) do
	local player = session.player
	local duration = os.time() - session.startTime
	print(player.Name .. " has been active for " .. duration .. " seconds")
end

Check Specific Session

Get details about a player’s session:
local session = Tracker:GetSession(player)

if session then
	print("Session started at:", session.startTime)
	print("Duration:", os.time() - session.startTime)
else
	print("No active session")
end

Force Re-verification

Clear cached staff status to force a fresh check:
-- Player got promoted? Force re-check
Tracker:ClearStaffCache(player)

-- Next time IsStaff() is called, it will check with the API

<Note>
There will be more commands after some updates
<Note>

Viewing Activity Data

In Technified Dashboard

Access the Activity Dashboard to see all tracked data:
1

Navigate

Go to Server SettingsTracking
2

Open dashboard

Click Activity Dashboard on one of the cards
3

View data

You’ll see:
  • Activity Breakdown — Stats by user and game
  • Recent Sessions — Latest session history
  • Recent Actions — Custom action logs

Filtering and Analysis

Use the dashboard controls:
  • Time Filters — Today, This Week, This Month
  • Place Filter — Filter by specific game/place
  • User Filter — View specific staff member’s activity
  • Sorting — Sort by sessions or total time

Staff Management

Access staff configuration:
  1. Go to Server SettingsTracking
  2. Click Staff Management to configure:
    • Staff role criteria
    • Permission levels
    • Discord and Roblox group connections

Troubleshooting

Symptom: Staff join the game but no sessions appear in dashboardSolutions:
  • ✅ Wait 15-30 seconds — sessions can take a moment to register
  • ✅ Check player is verified in Technified (Discord ↔ Roblox link)
  • ✅ Verify player matches staff criteria in Staff Management
  • ✅ Enable Debug = true in config and check Studio output for errors
  • ✅ Confirm API key has staff:read and staff:write scopes
Symptom: Console shows “Failed to load Technified module”Solutions:
  • ✅ Verify MODULE_ASSET_ID is correct: 72126668297116
  • ✅ Check the module is public and accessible
  • ✅ Try getting the original loader again from Creator Store
  • ✅ Ensure your Roblox Studio is up to date
Symptom: API requests fail with 403 errorSolutions:
  • ✅ Regenerate your API key in Technified Dashboard
  • ✅ Verify API key is correct in your loader script
  • ✅ Check API key has required scopes (staff:read, staff:write)
  • ✅ Ensure your guild ID matches your Discord server
Symptom: Console shows “HTTP requests are not enabled”Solutions:
  • ✅ Go to Game Settings → Security
  • ✅ Enable “Allow HTTP Requests”
  • ✅ Save and re-publish your game
  • ✅ Restart Roblox Studio
Symptom: /start, /end, /status commands don’t respondSolutions:
  • ✅ Check ChatCommandsEnabled = true in config
  • ✅ Verify player is verified staff (commands only work for staff)
  • ✅ Try in both Studio and published game (chat systems differ)
  • ✅ Check for script errors in output
Symptom: Sessions end prematurely or don’t stay activeSolutions:
  • ✅ Check HeartbeatInterval isn’t set too high (default: 300 seconds)
  • ✅ Ensure game isn’t paused/frozen
  • ✅ Verify network connection is stable
  • ✅ Check API rate limits aren’t being hit (many simultaneous staff)

Best Practices

Security

Protect Your API Key
  • ❌ Never commit API keys to public repositories
  • ❌ Never share API keys in Discord or publicly
  • ✅ Store keys in ServerScripts only (never LocalScripts)
  • ✅ Regenerate keys if compromised
  • ✅ Use different keys for test and production games
Validate Inputs
  • Always verify player inputs before logging actions
  • Sanitize strings to prevent injection attacks
  • Check player permissions before executing admin commands
  • Never trust client-side data

Performance

Optimize Tracking
  • Use batch logging for multiple actions at once
  • Don’t log every tiny event — focus on meaningful actions
  • Increase HeartbeatInterval if you have many staff (reduces API calls)
  • Cache staff status when possible (already done automatically)
Rate Limiting
  • Be mindful of API rate limits (100 requests per minute)
  • Use batch endpoints when logging multiple actions
  • Don’t spam the API with unnecessary calls

Testing

Before Going Live
  • Test in Studio first with Debug = true
  • Verify sessions appear in dashboard
  • Test chat commands work correctly
  • Try logging custom actions and check they appear
  • Test with different staff permission levels
Ongoing Monitoring
  • Regularly check dashboard for unusual patterns
  • Review action logs for suspicious activity
  • Monitor API key usage and rotate periodically
  • Keep the module updated (happens automatically)

Advanced Usage

Manual Session Control

Disable auto-tracking and control sessions manually:
local CONFIG = {
	-- ... other config
	AutoTrackSessions = false,  -- Disable auto tracking
}

-- Manual control
Players.PlayerAdded:Connect(function(player)
	if someCondition(player) then
		_G.TechnifiedTracker:StartSession(player)
	end
end)

Players.PlayerRemoving:Connect(function(player)
	_G.TechnifiedTracker:EndSession(player)
end)

Custom Heartbeat Logic

Implement your own heartbeat system:
-- Disable auto heartbeats (not recommended)
-- Then implement your own:

task.spawn(function()
	while true do
		task.wait(60)
		for _, player in ipairs(Players:GetPlayers()) do
			if _G.TechnifiedTracker:HasActiveSession(player) then
				_G.TechnifiedTracker:Heartbeat(player)
			end
		end
	end
end)

Conditional Tracking

Only track certain staff in specific conditions:
Players.PlayerAdded:Connect(function(player)
	-- Only track if in specific place
	if game.PlaceId == YOUR_MAIN_PLACE then
		-- Tracking happens automatically
	else
		-- Don't track in this place
		if _G.TechnifiedTracker:HasActiveSession(player) then
			_G.TechnifiedTracker:EndSession(player)
		end
	end
end)

API Methods Reference

Quick reference of all available methods:

Session Management

  • Tracker:StartSession(player) — Manually start a session
  • Tracker:EndSession(player) — Manually end a session
  • Tracker:Heartbeat(player) — Send a keepalive heartbeat
  • Tracker:HasActiveSession(player) — Check if player has active session
  • Tracker:GetSession(player) — Get session details
  • Tracker:GetActiveSessions() — Get all active sessions

Action Logging

  • Tracker:LogAction(player, type, category, details, target) — Log single action
  • Tracker:LogBatchActions(actions) — Log multiple actions at once

Staff Verification

  • Tracker:IsStaff(player) — Check if player is verified staff
  • Tracker:ClearStaffCache(player) — Force re-verification on next check

Module Updates

The Technified module auto-updates automatically. When we release new features or fixes:
  1. Module updates on Roblox’s servers
  2. Next time your game loads, it fetches the latest version
  3. No action required from you!
Current Version: Check dashboard for latest version info

Getting Help

Debug Mode

Enable debug logging to see what’s happening:
Debug = true  -- in CONFIG
Check Studio Output window for detailed logs.

Support Channels

Need help? Contact us:
  • Support Server — Join Technified Discord for live help
  • Documentation — Browse guides and references

Common Questions

Yes! Testing in Studio is recommended before publishing.
Use the same API key across all games, or create separate keys for organization.
No, tracking is restricted to verified staff members only for privacy.
Minimal impact. The module is optimized and uses caching.
Stay in Game until the API is Online again. If you leave, your data will be lost.

Next Steps

Now that staff tracking is set up:

Configure Staff Roles

Define who counts as “staff”

Implement Custom Logging

Add moderation action tracking to your admin systems

Monitor the Dashboard

Check activity regularly for insights

Optimize Configuration

Adjust heartbeat interval and options as needed

Track your team’s activity effortlessly with Technified’s Staff Tracking System. Set it up once, and let it run automatically.