Server Statistics

Activity insights and growth metrics at a glance

Server Statistics gives you a clear picture of how active your server is — who your most engaged members are, when your community is online, and how your server has grown over time. All data is captured live via lightweight Redis counters and flushed to the database every 5 minutes, so the dashboard always stays up to date without impacting bot performance.

Overview

The Statistics tab in the dashboard shows a live snapshot of your server's health. The page is divided into widget cards that each focus on a specific aspect of server activity. Data is updated continuously and charts reflect the last 90 days of history by default.

Widgets

The Statistics page contains the following widgets:

WidgetDescription
6 hero stat cardsTotal members, online now, messages today, messages this week, new joins this week, and active voice sessions — displayed as large number cards at the top of the page.
Member growth chartLine chart showing member joins and leaves over the last 30 days, with a net growth indicator.
Activity heatmap7×24 grid showing message volume per hour of day across the last 90 days. Darker cells = higher activity. Useful for identifying peak hours.
Top channelsBar chart of the 10 most active text channels by message count over the selected time window.
Top contributorsLeaderboard of the 10 most active members by message count. Does not expose message content — counts only.
Moderation trendLine chart showing warn, mute, kick, and ban actions over the last 30 days.
Module activity cardsOne card per enabled module (e.g. Leveling, YouTube Notifications, DayZ Killfeed) showing the number of events that module has recorded.

How it works

Statistics are collected via a lightweight event pipeline:

  1. Every qualifying Discord event (message, join, leave, mod action) triggers a Redis INCR on a time-bucketed key.
  2. Every 5 minutes a background job flushes the Redis counters into the database as hourly aggregates.
  3. Once per hour the aggregator merges the sub-hour buckets into a single hourly record per metric.
  4. Data older than the retention period is automatically pruned at 03:00 UTC each night.
Zero performance impact: all counting happens asynchronously via Redis INCR. The bot's main event loop is never blocked, and no message content is ever read or stored.

Privacy & data retention

Server Statistics stores aggregated counts only — never message content, user IDs attached to message text, or any personally identifiable information beyond member join/leave timestamps. The following data categories are retained:

Data typeRetention
Hourly message & voice activity90 days
Member join / leave events365 days
Moderation action counts (warn, mute, kick, ban)365 days

Automatic cleanup runs every night at 03:00 UTC. Older records are permanently deleted and cannot be recovered.

Troubleshooting

Most issues resolve themselves within the first 10 minutes after enabling the module. If charts remain empty after 15 minutes, work through the points below.
Charts are empty right after enabling Statistics
This is expected. The first flush happens within 5 minutes; the heatmap and charts need at least one flush cycle before they display data. Wait 5–10 minutes and then refresh the dashboard.
Channel names appear as raw IDs (e.g. <#1234567890>)
The bot needs the "View Channels" permission to resolve channel names. Check that TeraOne has this permission at the server level and that it has not been overridden to Deny for individual channels.
A module activity card shows "—" instead of a count
The module in question is either disabled or has not logged any events yet. Enable the module in its own settings tab and trigger at least one event (e.g. send a message to accumulate Leveling data).

Frequently asked questions

Does Statistics track message content?
No. Only the count of messages per channel per hour is recorded. The actual text is never read, stored, or transmitted anywhere.
Can members opt out of being counted?
Currently statistics are server-wide aggregates. Individual message counts used for Top Contributors are stored per user ID, but no message content is attached. A per-user opt-out toggle is planned for a future release.
How far back do charts go?
The activity heatmap and channel/contributor charts use up to 90 days of hourly data. Member growth and moderation trends retain data for 365 days.
Why does the member count in the hero card differ from Discord's member list?
The hero card shows the count at the last data flush (up to 5 minutes ago). Discord's member list is always live. Large bursts of joins/leaves may cause a brief discrepancy until the next flush cycle.
Can I export the statistics data?
A CSV export button is available in the top-right corner of each chart card. It exports the raw hourly data visible in the current chart view.
Server Statistics · TeraOne Docs · TeraOne