Skip to main content

Natural Participation

Reward organic community behavior without requiring slash commands. Users earn RSNC simply by participating naturally in your server.

Database-Driven Configuration

All Natural Participation events are stored in the monitoring_rules Supabase table. When you connect your server via /setup connect, default events are automatically created. Both the Discord bot and Partner Portal read/write from this same source.

Features

FeatureDescriptionDefaultConfigurable
GM Check-inReward "gm" or "good morning"25 RSNC, 24h cooldown
GN Check-inReward "gn" or "good night"15 RSNC, 24h cooldown
Quality MessagesReward thoughtful, high-quality messages10 RSNC (disabled)
Popular MessagesReward when messages reach reaction thresholds25 RSNC (disabled)
Auto-WelcomeAutomatically reward new members on join50 RSNC, one-time
Server BoostSpecial reward for Nitro boosters500 RSNC
Voice ActivityReward for time in voice channels25 RSNC

GM/GN Check-in

Recognized Patterns

Good Morning (case-insensitive):

  • gm, GM
  • good morning
  • gm everyone, gm fam, gm frens
  • morning!
  • rise and shine

Good Night:

  • gn, GN
  • good night
  • gn everyone, gn fam
  • nighty night
  • sweet dreams, sleep well

Configuration

/config events action:edit name:gm_checkin reward:50
/config events action:edit name:gn_checkin reward:25

Cooldown

Default 24-hour cooldown prevents spam. Users can only earn once per day for each type.


Quality Message Scoring

Messages pass through a two-stage pipeline: the gateway relay computes quality metrics, and the worker enforces admin-configured thresholds from detection_config.

Pipeline

  1. Gateway relay filters out spam (very short messages, bot messages) and computes enriched metrics
  2. Relay forwards a message_quality event with metrics to the worker
  3. Worker fetches admin thresholds from monitoring_rules.detection_config
  4. Worker enforces hard thresholds (min_characters, min_words) and optional composite score
  5. If the message passes, the user is rewarded (subject to daily limits)

Quality Metrics

The gateway relay computes the following metrics for each qualifying message:

MetricDescription
lengthCharacter count
word_countTotal word count
unique_word_countDistinct words used
unique_word_ratioVocabulary diversity (0–1)
sentence_countNumber of sentences
avg_word_lengthAverage word length
has_questionContains a question mark
has_code_blockContains code block (triple backticks)
has_linkContains a URL

Composite Quality Score (0–100)

When qualifying_score is set in detection_config, messages receive a composite score:

DimensionMax PointsLogic
Length25min(25, length / ideal_length × 25)
Word count20min(20, word_count / ideal_words × 20)
Vocabulary diversity20unique_word_ratio × 25, capped at 20
Sentence structure15min(15, sentence_count × 5)
Engagement signals10+5 for question, +5 for code block
Resource sharing10+10 for link

Configurable Thresholds

All thresholds are set via detection_config on the monitoring_rules entry:

FieldTypeDefaultDescription
min_charactersint100Hard minimum character count
min_wordsint20Hard minimum word count
qualifying_scoreint (0–100)0Composite score threshold (0 = disabled)
ideal_lengthint200Length target for scoring curve
ideal_wordsint40Word count target for scoring curve
min_unique_word_ratiofloat0Vocabulary diversity gate (0 = disabled)
maxDailyRewardsint5Max rewards per user per day
excluded_channelsarray[]Channel IDs to exclude
channel_multipliersobjectPer-channel reward multipliers

Configure via Discord

/config events action:edit name:regular_engagement min-characters:65 min-words:10
/config events action:edit name:regular_engagement qualifying-score:50

Configure via Partner Portal

In Partner Portal → Discord → Natural Participation:

{
"messageQuality": {
"enabled": true,
"minCharacters": 100,
"minWords": 20,
"rewardPerQualityMessage": 10,
"maxDailyRewards": 5
}
}

Reward messages that get lots of reactions.

How It Works

  1. User posts a message
  2. Other members react
  3. When reactions reach threshold (default: 10), user earns reward
{
"reactionRewards": {
"enabled": true,
"thresholdForPopular": 10,
"popularMessageReward": 25
}
}

Voice Channel Rewards

Reward users for time spent in voice channels.

Configuration

SettingDescriptionDefault
minutesPerRewardMinutes in voice to earn one reward60 min
rewardAmountRSNC per reward cycle25 RSNC
maxRewardsPerDayDaily cap per user3 rewards
requireOthersMust have other users in channeltrue
minOtherUsersMinimum other users required1

How It Works

  1. Gateway tracking: Bot tracks voice channel joins/leaves via Discord gateway
  2. Time accumulation: Voice minutes accumulate while in eligible channels
  3. Claim rewards: Users run /voice claim when they have enough time
  4. Daily cap: Voice tracker enforces maxRewardsPerDay limit
Voice Claims Bypass Event Cooldown

Voice rewards have their own rate-limiting system (maxRewardsPerDay). The /voice claim command bypasses the event handler's cooldown check because the voice tracker already enforces the daily limit. This allows users to claim multiple rewards in a single sitting if they've accumulated enough time.

User Commands

CommandDescription
/voiceCheck voice time progress and available rewards
/voice claimClaim earned voice reward (ephemeral response)

Example Flow

  1. User joins voice channel at 2:00 PM
  2. User leaves at 3:00 PM (60 minutes accumulated)
  3. User runs /voice → Shows "1 reward available"
  4. User runs /voice claim → Earns 25 RSNC
  5. User can claim up to 3 rewards per day (default)

Configure Voice Rewards

/config voice minutes_per_reward:30 rsnc_per_reward:15 max_daily:10

Event Type

Voice rewards use the voice_time event type. When configuring via /config events:

/config events action:create name:voice_time reward:25 cooldown:-1 smart:true
Cooldown Setting for Voice Events

Use cooldown:-1 or cooldown:0 for voice events. The voice tracker's maxRewardsPerDay is the authoritative rate limit, not the event cooldown.


Configurable Event Triggers

Beyond the built-in event types above, you can create custom triggered events that automatically detect and reward specific behaviors using the /config events command with a trigger option.

Trigger Types

TriggerGateway EventWhat It Matches
keywordchannel_messageMessages starting with specific words (gm, gn, gz, etc.)
min_lengthmessage_qualityNon-spam messages longer than N characters
reaction_countreaction_thresholdMessages that receive N+ unique reactions

Keyword Trigger

Watch specific channels for configurable keyword matches. Unlike the built-in GM/GN events, keyword triggers let you define any words to match.

/config events action:create name:gm_reward trigger:keyword keywords:gm,gn,gz channels:gm-channel reward:5 cooldown:24

How it works:

  1. Gateway relay sends all messages as channel_message events with a 50-character content preview
  2. Worker checks the preview against your configured keywords (case-insensitive, word-boundary aware)
  3. If a keyword matches and the channel is allowed, the message author is rewarded
  4. Cooldown and max-claims limits are enforced per user

Min Length Trigger

Reward users for posting substantive messages of a configurable length.

/config events action:create name:quality_chat trigger:min_length min-length:50 reward:2 cooldown:1

How it works:

  1. Gateway relay sends message_quality events for non-spam messages with character count
  2. Worker checks if the message length meets your configured minimum
  3. If it does, the message author is rewarded

Reaction Count Trigger

Reward message authors whose posts become popular (measured by unique reactions).

/config events action:create name:popular_post trigger:reaction_count min-reactions:5 reward:10 cooldown:0

How it works:

  1. Gateway relay sends reaction_threshold events at levels [3, 5, 7, 10, 15, 20, 25, 50]
  2. Worker checks if the threshold meets your configured minimum
  3. Each message can only trigger a reward once per event (KV-tracked, prevents double-rewarding)
  4. The message author receives the reward, not the reactor

Trigger Detection Config

Trigger configuration is stored in the detection_config JSON field on monitoring_rules:

// Keyword trigger
{ "trigger": "keyword", "keywords": ["gm", "gn", "gz"], "channels": ["gm-channel"] }

// Min length trigger
{ "trigger": "min_length", "min_length": 50 }

// Reaction count trigger
{ "trigger": "reaction_count", "min_reactions": 5 }

How It All Works

When you connect your Discord server via /setup:

  1. Real-time Detection: Resonance monitors messages for GM/GN patterns, quality content, and engagement
  2. Automatic Rewards: When patterns are detected, rewards are automatically distributed
  3. Custom Triggers: Create your own triggered events for keyword, length, or reaction-based detection
  4. No Configuration Needed: Default settings work out of the box

What Gets Detected

  • GM/GN messages (with 24-hour cooldown)
  • Quality messages (100+ characters, thoughtful content)
  • Custom keyword matches (configurable per event)
  • Popular messages by reaction count (configurable threshold)
  • Voice channel activity
  • Third-party bot level-ups (Mee6, Arcane, etc.)
  • Server boosts

Check Your Cooldowns

Run /cooldowns to see your active cooldown timers and daily charge status. The command:

  • Queries monitoring_rules for all active events on the server
  • Shows events with cooldown timers (e.g., GM check-in: ⏳ 12h 30m)
  • Shows daily charge events (e.g., Quality Messages: ✅ 3/5 charges available)
  • Only displays events that have a cooldown or daily limit configured

Verify It's Working

Run /test all in your Discord server. You should see:

Natural Participation: Active ✅

Semantic Intent Detection

Beyond simple keyword matching, the bot uses a semantic detector to understand the meaning of messages — rewarding achievement announcements, quest completions, and milestone celebrations even when users phrase them differently.

Detected Intents

IntentExample PhrasesConfidence
LEVELUP"leveled up to level 5", "reached level 10!"High
COMPLETION"quest completed", "finished the mission", "task done"High
STREAK"30-day streak", "streak milestone reached"High
ENGAGEMENT"earned XP on Zealy", "claimed OAT on Galxe"High
ACHIEVEMENT"unlocked the badge", "earned achievement"High
REWARD"claimed my reward", "got my tokens"High
MILESTONE"hit 1000 points", "reached the milestone"High
ONBOARDING"completed setup", "finished onboarding"High

Confidence Tiers

ConfidenceThresholdHow It's Determined
1.0Phrase matchExact multi-word trigger phrase detected
0.7Keyword comboTwo or more related keywords present
filtered< 0.6Single keyword — not rewarded to reduce noise

Quest Platform Detection

The semantic detector also recognizes quest platform activity from 5 major platforms:

PlatformDetected Phrases
Zealy"XP on Zealy", "Zealy quest", "zealy.io"
Galxe"Galaxy OAT", "Galxe campaign", "galxe.com"
Guild.xyz"Guild role", "role granted by guild", "guild.xyz"
QuestN"QuestN task", "questn.io"
Layer3"Layer3 quest", "layer3.xyz"

When a quest platform message is detected, the intent is tagged as ENGAGEMENT and the originating platform is recorded in the event metadata.

Using Semantic Detection in Events

Create a custom event that fires on achievement announcements:

/config events action:create name:quest_achievement trigger:keyword smart:true reward:15 cooldown:24

Set smart:true to enable semantic matching instead of exact keyword matching.


Quest Platform Rewards

Automatically reward users who complete quests on external platforms and share their achievements in your Discord.

Supported Platforms

  • Zealy (formerly Crew3) — XP earned, quest completed
  • Galxe — OAT claimed, campaign completed
  • Guild.xyz — role granted, quiz passed
  • QuestN — task completed
  • Layer3 — quest finished

How It Works

  1. User completes a quest on Zealy/Galxe/Guild/etc.
  2. User pastes achievement in your Discord server
  3. Semantic detector recognizes the platform + achievement
  4. ENGAGEMENT event fires → user earns RSNC
  5. Platform source is recorded in event metadata

Create a Quest Platform Event

/config events action:create name:quest_platform reward:20 cooldown:24

Or configure separate rewards per platform via Partner Portal → Events.


Configuration in Partner Portal

Go to Partner Portal → Integrations → Discord → Natural Participation:

{
gmCheckin: {
enabled: true,
reward: 25,
cooldownHours: 24,
responseEnabled: false
},
gnCheckin: {
enabled: true,
separateCooldown: false, // Share cooldown with GM
reward: 15
},
messageQuality: {
enabled: false,
minCharacters: 100,
minWords: 20,
rewardPerQualityMessage: 10,
maxDailyRewards: 5
},
reactionRewards: {
enabled: false,
thresholdForPopular: 10,
popularMessageReward: 25
},
welcomeAutomation: {
enabled: false,
autoRewardOnJoin: false
}
}

Best Practices

Prevent GM Spam

  1. Channel restriction: Limit GM/GN to a specific channel

    • Configure in Partner Portal → Events → Allowed Channels
  2. Reasonable rewards: Don't make GM/GN the highest paying event

  3. Quality balance: Enable quality messages to reward substantive content

Encourage Voice Participation

  1. Reasonable caps: 10 rewards/day = 5 hours of voice
  2. Team activities: Combine with game nights for bonuses
  3. Multipliers: Give role bonuses for voice regulars

Quality Content

  1. Start disabled: Enable after community is established
  2. Moderate thresholds: 100 chars is reasonable
  3. Daily caps: Prevent gaming the system