Skip to content

Privacy-safe community activity analysis

analyze_community_activity takes one exact guild and a bounded set of unique exact permitted guild channels or threads. Each selection may retain its own exact beforeMessageId cursor, so a caller can deliberately inspect another historical window without creating a connector-side index. The total message budget is bounded across the complete request. The connector verifies its pinned identity and every channel's exact guild and local read scope before fetching message evidence, then pages Discord's Get Channel Messages route newest to oldest in bounded requests.

The transient projection reads only exact message, channel, guild, author, webhook, and reply-target IDs; author bot and system flags; message type; and creation timestamps. It ignores content, embeds, components, attachments, reactions, mentions, polls, snapshots, usernames, display names, avatars, channel names, topics, roles, and unknown fields. Message Content intent is not required because content is neither inspected nor returned. Author IDs exist only long enough to compute aggregates and never enter the result, activity log, operation receipts, cache, telemetry, database, or local file.

Only ordinary and reply messages count as conversation evidence. Human participation excludes bots, system users, and webhooks while retaining aggregate sample-composition counts. Results include distinct human participants, active UTC days, top-participant and top-five message shares, multi-day participation, explicit human-to-human reply latency, observed reply coverage, distinct reply relationships, unordered reciprocal pairs, and UTC weekday and hour distributions. Nearest-rank latency percentiles and every other metric carry fixed definitions in the result so callers do not need to infer the calculation.

Coverage reports the exact channels, per-channel starting and continuation cursors, pages requested, observed timestamp boundaries, returned message counts, and whether pagination stopped on the request limit or a short or empty page. A short or empty page is not described as complete history because Discord may also return no messages when READ_MESSAGE_HISTORY is unavailable. Duplicate, oversized, unordered, cross-channel, cross-guild, malformed, or conflicting reply evidence rejects the complete call without partial output.

The fixed limitations explicitly prevent causal or whole-community claims from a bounded sample. Explicit replies omit conversational responses that do not use Discord's Reply action, latency covers only targets present in the sample or resolved by Discord, UTC timing may not match participant time zones, and content-free evidence cannot support topic, theme, sentiment, or intent analysis. See Discord's Get Channel Messages and reply-reference contracts.

Canonical source: docs/reference.md

Documentation generated for guildcontrol@0.0.0. Canonical source and edit history remain in the public repository. GuildControl is an independent project and is not affiliated with or endorsed by Discord Inc. Discord is used only to identify the platform that GuildControl connects to.