Skip to main content

Streak & Attendance System

Reward consistent engagement with streak bonuses and milestone rewards.

How Streaks Work

  1. Users check in daily with /daily
  2. Consecutive days build their streak counter
  3. Streak multipliers increase rewards
  4. Milestone bonuses unlock at specific days

Streak Multipliers

Higher streaks mean higher rewards on all activities:

Streak DaysMultiplierBonus
1-2 days1.0xBase reward
3+ days1.1x10% bonus
7+ days1.25x25% bonus
14+ days1.5x50% bonus
30+ days2.0x100% bonus

Calculation Example

Base daily reward: 25 RSNC

StreakCalculationTotal
Day 125 × 1.025 RSNC
Day 325 × 1.127.5 RSNC
Day 725 × 1.2531.25 RSNC
Day 1425 × 1.537.5 RSNC
Day 3025 × 2.050 RSNC

Milestone Bonuses

One-time bonuses for hitting streak milestones:

MilestoneBonus
7 days50 RSNC
30 days200 RSNC
100 days1,000 RSNC
365 days5,000 RSNC

Users claim milestones via /streak.


Grace Period

The grace period allows users to miss time without losing their streak.

Default: 24 Hours

Users have 24 hours from their last check-in before their streak resets.

Configure Grace Period

/config streaks grace-period:8     # 8 hours (stricter)
/config streaks grace-period:48 # 48 hours (more forgiving)

Range: 1-72 hours

Strategy Guide

Grace PeriodBest For
8 hoursActive communities, frequent engagement
24 hours (default)Standard daily engagement
48 hoursCasual communities, weekend forgiveness
72 hoursVery casual, maximum forgiveness

User Commands

View Streak Status

/streak

Shows:

  • Current streak days
  • Longest streak ever
  • Current multiplier
  • Next milestone
  • Available milestone claims

Claim Milestone

/streak claim milestone:7

Claims the 7-day milestone bonus (if eligible).


How Streak is Tracked

Daily Check-in

When a user runs /daily:

  1. Check if within grace period from last check-in
  2. If yes: Increment streak counter
  3. If no: Reset streak to 1
  4. Record check-in timestamp
  5. Apply multiplier to reward

Streak Persistence

Streaks are stored in the discord_user_streaks table:

  • current_streak - Current consecutive days
  • longest_streak - All-time record
  • last_checkin - Timestamp of last activity

Configuration in Partner Portal

Integrations → Discord → Streak Settings

Available Settings

  • Enable/disable streaks
  • Grace period (hours)
  • Streak multipliers (customize thresholds)
  • Milestone bonuses (customize amounts)

Best Practices

Encourage Daily Engagement

  1. Reasonable base rewards: Don't make day 1 too low
  2. Meaningful multipliers: 2x at day 30 is significant
  3. Achievable milestones: 7-day milestone should be reachable

Prevent Burnout

  1. Forgiving grace period: 24-48 hours recommended
  2. Weekend consideration: 48+ hours helps weekend breaks
  3. Communicate clearly: Users should know the rules

Combine with Other Features

  1. Role rewards: VIP members get streak bonuses
  2. Announcements: Celebrate milestone achievements
  3. Leaderboards: Show streak rankings

Troubleshooting

"My streak reset unexpectedly"

  1. Grace period expired: Check when last check-in was
  2. Different timezone: Resets at midnight UTC
  3. Test mode was on: Test activities don't count

"Multiplier isn't applying"

  1. Check current streak: /streak
  2. Verify multiplier threshold: Must hit exact day count
  3. Confirm streaks are enabled: Check Partner Portal

"Milestone already claimed"

Each milestone can only be claimed once. Check /streak for available milestones.


Role-Based Milestones

Beyond streak milestones, admins can create role-based milestones that auto-assign Discord roles when users meet compound criteria. Users also receive a one-time RSNC bonus when the milestone is unlocked.

How It Works

  1. Admin creates a milestone linked to a Discord role via /milestone create
  2. Admin adds one or more criteria via /milestone add-criteria
  3. A CRON job periodically evaluates all users against milestone criteria
  4. When a user meets all criteria, they receive the Discord role and RSNC bonus automatically

Available Criteria Types

CriteriaSourceDescription
messages_totalKV statsTotal messages sent
rsnc_earnedKV statsLifetime RSNC earned from bot
voice_hoursKV statsTotal voice channel hours
reactions_totalKV statsTotal reactions given
streak_daysKV statsCurrent streak length
streak_longestKV statsLongest streak ever
claims_totalKV statsTotal reward claims
activity_scoreCalculatedComposite engagement score
rsnc_balanceOn-chainCurrent RSNC token balance

Activity Score Formula

The activity_score is a weighted composite of multiple engagement signals:

activity_score = totalMessages
+ (totalVoiceMinutes × 2)
+ (totalReactions × 5)
+ (currentStreak × 10)

Suggested thresholds:

LevelScoreTypical Profile
Beginner50A few messages + some reactions
Active500Regular daily participant
Power User2,000Heavy multi-channel engagement
Legend10,000Long-term dedicated community member

Compound Criteria

Milestones support multiple criteria — the user must meet all of them. This allows nuanced role requirements:

/milestone create role:@Whale name:Whale
/milestone add-criteria role:@Whale type:rsnc_earned threshold:5000
/milestone add-criteria role:@Whale type:messages_total threshold:500
/milestone add-criteria role:@Whale type:activity_score threshold:2000

Admin Commands

/milestone create role:@VIP name:"VIP Member" description:"Top contributor"
/milestone edit role:@VIP reward:1000
/milestone add-criteria role:@VIP type:rsnc_earned threshold:5000
/milestone remove-criteria role:@VIP type:rsnc_earned
/milestone list
/milestone delete role:@VIP

Storage

Milestones are stored in the discord_role_configs table with assignment_type = 'milestone'. Criteria are stored in assignment_config.criteria as an array of { type, threshold } objects. The RSNC bonus is stored in effect_config.amount.