BigBrother: Difference between revisions

From aquila
Jump to navigation Jump to search
No edit summary
No edit summary
 
Line 1: Line 1:
BigBrother is a staff side auditing plugin. It watches specific players (staff and trusted roles) for the commands they run and posts a log of each one to a Discord channel, so server owners have a record of what admin actions were taken, by whom, and where.<blockquote>This plugin has no player facing commands. it runs silently in the background and reports to Discord</blockquote>
__NOTOC__
<div style="background: linear-gradient(135deg, #0b132b 0%, #1c2541 50%, #3a506b 100%); border: 2px solid #e0a96d; border-radius: 12px; padding: 2.5em 1.5em; text-align: center; color: #ffffff; box-shadow: 0 4px 20px rgba(0,0,0,0.3); margin-bottom: 2em;">
<h1 style="border: none; color: #f4a261; font-family: 'Georgia', serif; font-size: 2.3em; margin: 0 0 0.3em 0; padding: 0; text-shadow: 0 2px 4px rgba(0,0,0,0.5);">BigBrother Plugin Documentation</h1>
<p style="font-size: 1.1em; color: #e0e1dd; max-width: 650px; margin: 0 auto; line-height: 1.5;">Staff-side auditing plugin for tracking administrative commands, gamemode alterations, and sensitive actions across AquilaPRJ.</p>
</div>


== What BigBrother Does ==
<div style="background: #eef2f6; border-left: 4px solid #f4a261; border-radius: 0 8px 8px 0; padding: 1.2em 1.5em; margin-bottom: 2em; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
<p style="margin: 0; font-style: italic; color: #1e293b; line-height: 1.6;"><b>Notice:</b> This plugin has no player-facing commands. It runs silently in the background and reports directly to Discord.</p>
</div>


* Watches every command run by a player with the '''<code>bigbrother.watched</code>''' permission
<div style="background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; padding: 1.5em; box-shadow: 0 2px 4px rgba(0,0,0,0.05); margin-bottom: 2em;">
* Also tracks '''gamemode changes''' specifically (even ones not typed as a <code>/gamemode</code> command, e.g. from a menu or another plugin)
<h2 style="border-bottom: 2px solid #e0a96d; color: #0b132b; margin-top: 0; padding-bottom: 0.3em; font-family: 'Georgia', serif;">What BigBrother Does</h2>
* Sends a report to a '''Discord webhook''' for each one, including:
<p style="line-height: 1.6; color: #374151; margin-bottom: 1em;">BigBrother provides a reliable audit trail for server owners to record administrative actions, identifying who performed an action, what they executed, and where they were standing.</p>
** The player's name, UUID, and skin thumbnail
<ul style="color: #374151; line-height: 1.6; margin-top: 0; padding-left: 1.5em;">
** The exact command that was run
<li><b>Command Tracking:</b> Watches every command run by any player possessing the <code>bigbrother.watched</code> permission.</li>
** The world and coordinates the player was standing in when they ran it
<li><b>Gamemode Monitoring:</b> Specifically tracks gamemode modifications, even those triggered through menus or other plugins rather than a typed <code>/gamemode</code> command.</li>
** A timestamp
<li><b>Discord Integration:</b> Sends structured reports to a designated Discord webhook containing the player's name, UUID, skin thumbnail, exact command, world, exact coordinates, and a timestamp.</li>
* Also logs the same info to the server console (if no webhook is set in the plugin config)
<li><b>Console Fallback:</b> Logs the exact same information directly to the server console if no webhook URL is configured.</li>
</ul>
</div>


== How It Decides What to Log ==
<div style="background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; padding: 1.5em; box-shadow: 0 2px 4px rgba(0,0,0,0.05); margin-bottom: 2em;">
<h2 style="border-bottom: 2px solid #e0a96d; color: #0b132b; margin-top: 0; padding-bottom: 0.3em; font-family: 'Georgia', serif;">How It Decides What to Log</h2>
<ul style="color: #374151; line-height: 1.6; margin-top: 0; padding-left: 1.5em;">
<li><b>Permission Gated:</b> Only players with the <code>bigbrother.watched</code> permission are tracked; everyone else is entirely ignored.</li>
<li><b>Smart Filtering:</b> Direct <code>/gamemode</code> text commands are skipped by the command watcher because the standalone gamemode watcher already logs the resulting state change, preventing duplicate alerts and capturing GUI-based transitions.</li>
<li><b>Full Op Coverage:</b> Everything else typed as a command by an operator or watched user is immediately captured and reported.</li>
</ul>
</div>


* Only players with the '''<code>bigbrother.watched</code>''' permission are watched, everyone else is never logged.
<div style="background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; padding: 1.5em; box-shadow: 0 2px 4px rgba(0,0,0,0.05); margin-bottom: 2em;">
* <code>/gamemode</code> commands typed directly are '''skipped''' by the command watcher, because the separate gamemode watcher already reports the resulting change (this avoids duplicate reports and also catches gamemode changes that don't come from a typed command)
<h2 style="border-bottom: 2px solid #e0a96d; color: #0b132b; margin-top: 0; padding-bottom: 0.3em; font-family: 'Georgia', serif;">Who's Currently Watched</h2>
* Everything else an OP types as a command gets reported
<p style="line-height: 1.6; color: #374151; margin-bottom: 1em;">The <code>bigbrother.watched</code> permission is managed through LuckPerms groups rather than assigned to individual player accounts. Users placed into these groups are monitored automatically:</p>


== Who's Currently Watched ==
<table class="wikitable" style="width: 100%; border-collapse: collapse; margin-bottom: 1em;">
<code>bigbrother.watched</code> is granted through LuckPerms '''groups''', not to individual players. Anyone placed in one of these groups is watched automatically, and taking them out of the group stops the logging:
<thead>
{| class="wikitable"
<tr style="background: #f1f5f9; text-align: left;">
|+
<th style="padding: 0.75em; border: 1px solid #cbd5e1; color: #0b132b;">LuckPerms Group</th>
!LuckPerms group
<th style="padding: 0.75em; border: 1px solid #cbd5e1; color: #0b132b;">Status</th>
|-
</tr>
|gamestaff
</thead>
|-
<tbody>
|serverguide
<tr>
|-
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><code>gamestaff</code></td>
|staff
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">Watched automatically</td>
|-
</tr>
|OP
<tr style="background: #f8fafc;">
|}
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><code>serverguide</code></td>
To watch an additional group, grant it the <code>bigbrother.watched</code> permission in LuckPerms. To stop watching a group, remove the permission (or remove the players from it).
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">Watched automatically</td>
</tr>
<tr>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><code>staff</code></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">Watched automatically</td>
</tr>
<tr style="background: #f8fafc;">
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><code>OP</code></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">Watched automatically</td>
</tr>
</tbody>
</table>


== What Shows Up in Discord ==
<p style="line-height: 1.6; color: #374151; margin-bottom: 0;">To add monitoring for another group, grant it the <code>bigbrother.watched</code> permission node inside LuckPerms. To stop monitoring, revoke the permission or remove the players from the group.</p>
Each alert is posted as an embed titled '''"BigBrother Alert"''', showing:
</div>
{| class="wikitable"
 
|+
<div style="background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; padding: 1.5em; box-shadow: 0 2px 4px rgba(0,0,0,0.05); margin-bottom: 2em;">
!Field
<h2 style="border-bottom: 2px solid #e0a96d; color: #0b132b; margin-top: 0; padding-bottom: 0.3em; font-family: 'Georgia', serif;">What Shows Up in Discord</h2>
!Contents
<p style="line-height: 1.6; color: #374151; margin-bottom: 1em;">Alerts appear inside Discord formatted as a clean rich embed titled <b>"BigBrother Alert"</b>, complete with the player's skin thumbnail and execution timestamp.</p>
|-
 
|Player
<table class="wikitable" style="width: 100%; border-collapse: collapse;">
|The op's username
<thead>
|-
<tr style="background: #f1f5f9; text-align: left;">
|UUID
<th style="padding: 0.75em; border: 1px solid #cbd5e1; color: #0b132b; width: 25%;">Embed Field</th>
|Their unique player ID
<th style="padding: 0.75em; border: 1px solid #cbd5e1; color: #0b132b;">Contents</th>
|-
</tr>
|Command
</thead>
|The exact command text, in a code block
<tbody>
|-
<tr>
|World
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><b>Player</b></td>
|Which world they were in
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">The operator or staff member's username</td>
|-
</tr>
|Location
<tr style="background: #f8fafc;">
|Their X, Y, Z coordinates
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><b>UUID</b></td>
|}
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">Their unique player identification code</td>
The embed also shows the player's Minecraft skin as a thumbnail and a timestamp of when the command was run.
</tr>
<tr>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><b>Command</b></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">The exact command text enclosed in a code block</td>
</tr>
<tr style="background: #f8fafc;">
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><b>World</b></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">The specific game world where the action occurred</td>
</tr>
<tr>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><b>Location</b></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">Exact X, Y, and Z coordinate metrics</td>
</tr>
</tbody>
</table>
</div>
 
<div style="background: #ffffff; border: 1px solid #d1d5db; border-radius: 8px; padding: 1.5em; box-shadow: 0 2px 4px rgba(0,0,0,0.05); margin-bottom: 2em;">
<h2 style="border-bottom: 2px solid #e0a96d; color: #0b132b; margin-top: 0; padding-bottom: 0.3em; font-family: 'Georgia', serif;">Server Configuration</h2>
<p style="line-height: 1.6; color: #374151; margin-bottom: 1em;">Administrators can configure the plugin behavior directly within its configuration file:</p>
 
<table class="wikitable" style="width: 100%; border-collapse: collapse;">
<thead>
<tr style="background: #f1f5f9; text-align: left;">
<th style="padding: 0.75em; border: 1px solid #cbd5e1; color: #0b132b; width: 30%;">Setting</th>
<th style="padding: 0.75em; border: 1px solid #cbd5e1; color: #0b132b;">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><code>webhook-url</code></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">The Discord webhook URL where alerts are dispatched. <b>Required</b>—without this, alerts will not post externally.</td>
</tr>
<tr style="background: #f8fafc;">
<td style="padding: 0.75em; border: 1px solid #cbd5e1;"><code>server-name</code></td>
<td style="padding: 0.75em; border: 1px solid #cbd5e1;">A text label for identifying individual servers in multi-server networks. <i>Currently unused.</i></td>
</tr>
</tbody>
</table>
</div>


== Server Configuration ==
Admins set these values in the plugin's config file:
{| class="wikitable"
|+
!Setting
!What it controls
|-
|webhook-url
|The Discord webhook URL alerts are sent to'''. required''', or nothing will be posted
|-
|server-name
|A label for identifying which server an alert came from. '''Currently unused'''
|}
[[Category:Plugins]]
[[Category:Plugins]]

Latest revision as of 13:08, 22 August 2026

BigBrother Plugin Documentation

Staff-side auditing plugin for tracking administrative commands, gamemode alterations, and sensitive actions across AquilaPRJ.

Notice: This plugin has no player-facing commands. It runs silently in the background and reports directly to Discord.

What BigBrother Does

BigBrother provides a reliable audit trail for server owners to record administrative actions, identifying who performed an action, what they executed, and where they were standing.

  • Command Tracking: Watches every command run by any player possessing the bigbrother.watched permission.
  • Gamemode Monitoring: Specifically tracks gamemode modifications, even those triggered through menus or other plugins rather than a typed /gamemode command.
  • Discord Integration: Sends structured reports to a designated Discord webhook containing the player's name, UUID, skin thumbnail, exact command, world, exact coordinates, and a timestamp.
  • Console Fallback: Logs the exact same information directly to the server console if no webhook URL is configured.

How It Decides What to Log

  • Permission Gated: Only players with the bigbrother.watched permission are tracked; everyone else is entirely ignored.
  • Smart Filtering: Direct /gamemode text commands are skipped by the command watcher because the standalone gamemode watcher already logs the resulting state change, preventing duplicate alerts and capturing GUI-based transitions.
  • Full Op Coverage: Everything else typed as a command by an operator or watched user is immediately captured and reported.

Who's Currently Watched

The bigbrother.watched permission is managed through LuckPerms groups rather than assigned to individual player accounts. Users placed into these groups are monitored automatically:

<thead> </thead> <tbody> </tbody>
LuckPerms Group Status
gamestaff Watched automatically
serverguide Watched automatically
staff Watched automatically
OP Watched automatically

To add monitoring for another group, grant it the bigbrother.watched permission node inside LuckPerms. To stop monitoring, revoke the permission or remove the players from the group.

What Shows Up in Discord

Alerts appear inside Discord formatted as a clean rich embed titled "BigBrother Alert", complete with the player's skin thumbnail and execution timestamp.

<thead> </thead> <tbody> </tbody>
Embed Field Contents
Player The operator or staff member's username
UUID Their unique player identification code
Command The exact command text enclosed in a code block
World The specific game world where the action occurred
Location Exact X, Y, and Z coordinate metrics

Server Configuration

Administrators can configure the plugin behavior directly within its configuration file:

<thead> </thead> <tbody> </tbody>
Setting Description
webhook-url The Discord webhook URL where alerts are dispatched. Required—without this, alerts will not post externally.
server-name A text label for identifying individual servers in multi-server networks. Currently unused.