Skip to main content

Unlock Events

Phase 2 + 2.5 update (May 2026): unlock events route into the same Activity Score engine as core events — unlock_handlers family in event_families. AS contributes to the universal formula's base scaling (capped at +50%) and the Weekly Bounty share. The unlock-criterion logic below is unchanged; the new mechanics are additive. The ten unlocks remain is_active=true in monitoring_rules for Resonance Official as of 2026-05-07.

The Phase 1 program ladders ten unlock events that each become claimable at a specific Tune-In level — L0, L10, L20, all the way to L90. Unlike core events (which exist at every tier and grow in payout as you climb), each unlock event is a single monitoring_rules row that simply isn't visible to a member until their tune level meets min_tune_level. Until then it appears in the 🔒 Upcoming Unlocks section of /cooldowns as motivation.

Unlock events are designed for two properties:

  1. A social witness. Almost every unlock requires another member to validate the activity — joining your thread, attending your stage, reacting to your reply, mentioning you. Solo-farmable activities are explicitly avoided.
  2. A Discord-trackable signal. Each event maps to gateway events the bot already receives, with anti-farm guardrails enforced via short-TTL KV keys.

This page walks through all ten in tune-level order.


L0 — thread_starter

Tune required0
Reward30 RSNC
Cap2 / day
TriggerYou create a thread; within 24 hours, at least 2 distinct other users post in it.
Gateway signalsTHREAD_CREATE (records the new thread); MESSAGE_CREATE inside that thread ID (counts distinct posters).
Anti-farmKV key thread:claimed:{thread_id} prevents claiming the same thread twice. KV counter thread_starter:claims:{user_id}:{day} enforces the daily cap.

Available from the moment a member begins their Tune-In journey, this is the entry-level unlock and the lowest-friction validation that someone is starting community-shaped activity.

L10 — stage_host

Tune required10
Reward120 RSNC
Cap1 / week
TriggerYou host a Stage instance (bot sees you as moderator); at least 3 distinct attendees join.
Gateway signalsSTAGE_INSTANCE_CREATE captures the stage and its host; VOICE_STATE_UPDATE events into the stage's channel ID count attendees. After 3 distinct attendees and 60s of sustained presence, the reward fires once.
Anti-farmstage:claimed:{stage_instance_id} prevents double-claim. The 1/week cap prevents continuous staging.

If a server has no Stage channels, the event simply doesn't fire — there is no error or penalty for members in such servers. Brands that want to encourage Stage hosting should configure at least one Stage-eligible channel.

L20 — deep_reply

Tune required20
Reward24 RSNC
Cap5 / day
TriggerYou reply to a message that already has at least 3 unique-user reactions at the time you reply.
Gateway signalsMESSAGE_CREATE with referenced_message_id; the parent's reactor count is read from KV msg:{parent_id}:reactors (7-day TTL, populated by MESSAGE_REACTION_ADD).
Anti-farmdeep_reply:claimed:{parent_msg_id} prevents claiming twice for the same parent. The 5/day cap prevents reply farming.

The "parent already had 3 reactors" requirement is the social-witness mechanism: it forces members to engage with content the room has already endorsed, instead of replying to anything for points.

L30 — conversation_starter

Tune required30
Reward40 RSNC
Cap3 / day
TriggerYour message receives replies from at least 3 distinct users within one hour of posting.
Gateway signalsMESSAGE_CREATE records the source message; subsequent MESSAGE_CREATE events with referenced_message_id pointing to it accumulate distinct replier IDs. Evaluated on a delay (KV key with 1h TTL or per-message Durable Object alarm).
Anti-farmThe 3/day cap. Only distinct repliers count — a single user replying ten times still counts as one.

L40 — voice_sustained

Tune required40
Reward48 RSNC
Cap3 / week
TriggerYou stay in one voice channel for at least 60 continuous minutes — channel-hopping breaks the streak.
Gateway signalsVOICE_STATE_UPDATE events. On join, store voice:session:{user_id}:{channel_id} with the timestamp; on leave or move, compute the duration.
Anti-farmChannel-hopping resets the timer. The 3/week cap prevents 24h-presence farming. Voice sessions that include the user being muted/deafened still count — presence matters here, not active speaking.

L50 — mentor_reach

Tune required50
Reward36 RSNC
Cap3 / day
TriggerYou reply to a message from a new member (joined within the last 7 days, fewer than 5 server messages) within 24 hours of their post.
Gateway signalsMESSAGE_CREATE with referenced_message_id; check parent author's joined_at (cached from GUILD_MEMBER_ADD) and total message count. Both must pass.
Anti-farmOnly one mentor_reach claim per (mentor, target) pair per week — mentor_reach:{reply_author}:{target}:week. The 3/day cap on top.

L60 — traffic_director

Tune required60
Reward80 RSNC
Cap1 / week
TriggerYou are @mentioned by at least 5 distinct users within a 24-hour rolling window.
Gateway signalsOn every MESSAGE_CREATE, the mentions[] array is inspected. For each mentioned user, the counter user:mention_count24h:{mentioned}:{mentioner} is incremented (24h TTL — one mention per mentioner per 24h window). A scheduled hourly job finds users whose distinct-mentioner count crossed 5.
Anti-farmDistinct mentioners — a single user mentioning you ten times counts as one. The 1/week cap prevents continuous claiming.

This event recognizes members who become "convergence points" — people the community routes others to. It's claimable only once per week to keep it from rewarding fame instead of the underlying activity.

L70 — resonance_beacon

Tune required70
Reward60 RSNC
Cap3 / week
TriggerYou post a message containing an external URL; at least 3 distinct users react to the message. The message must also pass the quality gate (so this isn't link-spam).
Gateway signalsMESSAGE_CREATE with URL regex match; beacon:{msg_id}:reactors is a KV set populated by MESSAGE_REACTION_ADD. Fires once when the third distinct reactor lands.
Anti-farmOne reward per message; 3/week cap. The quality-gate prerequisite means the message itself has to be substantive — not just "look at this cool link".

L80 — answered_question

Tune required80
Reward90 RSNC
Cap2 / day
TriggerYou reply to a message containing a question, and either: (path A) the question's OP reacts to your reply with one of ✅ 👍 🙏 ❤️ 💯, or (path B) your reply itself collects at least 3 unique-user reactions within 24 hours.
Gateway signalsQuestion detection via /\?\s*$/ regex on the parent's content; reply detection via referenced_message_id. Reactions tracked via the standard MESSAGE_REACTION_ADD pipeline.
Anti-farmanswered:{reply_msg_id} prevents double-claim across the two paths. The 2/day cap.

L90 — dawn_patrol

Tune required90
Reward72 RSNC
Cap1 / day
TriggerYou post the first message in a channel after at least 8 hours of silence, and that message passes the quality gate.
Gateway signalsOn MESSAGE_CREATE, KV channel:{id}:last_qualifying_msg is read; if the timestamp is at least 8h old and the current message passes the gate, fires.
Anti-farmGuild-wide 1/day cap (not per-channel) — prevents members from rotating through silent channels for repeat claims.

This is the only Phase 1 unlock that doesn't require a social witness — it rewards initiative, on the theory that a member at L90 has earned the trust to break silence in a way the community will eventually engage with. The quality-gate requirement is what keeps dawn_patrol from being a "post anything in a dead channel for free RSNC" exploit.


Notes on adding your own unlock events

The Phase 1 ladder is the reference, not the canon. Brands are encouraged to design their own unlock events that suit the activities their community values. When you do:

  • Pick a Discord gateway signal you can already track. Most unlock events fall out cheaply because the bot already receives the underlying gateway event (MESSAGE_CREATE, MESSAGE_REACTION_ADD, VOICE_STATE_UPDATE, THREAD_CREATE, etc.).
  • Always include a social-witness condition. "You did X" is farmable; "You did X and N other members validated it" usually isn't.
  • Use short-TTL KV for state. Distinct-user counters, claim guards, and time-windows live in Cloudflare KV with TTLs scaled to the event (1h to 30 days). Avoid putting unlock-event state in Postgres if you can avoid it.
  • Pick a min_tune_level that creates progression, not a paywall. Every unlock should be reachable by an active member within a few weeks of sustained engagement. The L90 dawn_patrol is the late-game capstone, not the entry point.