---
id: nova/community/roles
title: "Community Roles"
product: nova
canonical: https://zeroauthoritydao.ai/docs/nova/community/roles
related: [nova/community]
tokens: 1802
---

# Community Roles

Community Roles gives Discord roles automatically for wallet holdings on Stacks, EVM, Solana or Bitcoin, for Ascend levels, and on PRO for time in the server, activity and holding time. Nova re-checks and updates them.

**Community Roles** give Discord roles to members for what they have earned: what their wallets hold on Stacks, EVM chains, Solana or Bitcoin, the level they reached by chatting, how long they have been around and how active they are, or several of these together. You write a rule once ("the Holder role for 1,000 of our token", "the Elder role at level 20") and Nova grants the role and keeps it in line.

***

## How it works

A **rule** gives one role for one thing. Several rules can give the same role, and one member can earn several roles.

| A rule can ask for | Example |
| --- | --- |
| **A holding**: at least an amount of one asset on one chain | The Holder role for 1,000 of a token |
| **A level**: an [Ascend](https://zeroauthoritydao.ai/docs/nova/community/community-games.md) level, with no wallet at all | The Elder role at level 20 |
| **A holding and a level**: the member needs both | The Core role for 1,000 of a token and level 10 |
| **A verified wallet**: any member who proved a wallet, whatever it holds | A Verified role |
| **The member themselves** (Community PRO): time in the server and activity, with no wallet | The OG role for members of 180 days who were active on 20 days |

On **Community PRO** any rule can also ask for more, and the member then needs all of it. You choose the numbers, so "active" means what your community wants it to mean:

| Condition | What it counts | Example |
| --- | --- | --- |
| Days in the server | Days since the member joined (leaving and coming back starts again) | Member for 180 days |
| Active days, ever | Different days the member sent a real message. Never taken away | Active on 20 days |
| Active days of the last 30 | The same, for the last 30 days. The role comes off when a member goes quiet and comes back when they return | Active on 4 of the last 30 days |
| Days held | How long the member has held a rule's amount | Diamond Hands for 1,000 of a token held 90 days |

A role for time in the server always needs a sign of activity as well (a level, or active days), so it never goes to an account that joined long ago and never spoke. Active days are counted from the day Ascend was turned on.

**Days held are counted by Nova**, from the first check that finds the amount in the member's verified wallet. Nova does not see what a wallet held before the member verified, and the count starts again from zero if a re-check finds them below the amount. Nobody gets a "held 90 days" role on day one, so ask holders to verify early.

A holding can be on any of these chains:

| Chain | What a rule can require |
| --- | --- |
| Stacks | A token or an NFT collection |
| Ethereum, Base, Arbitrum, Optimism, Polygon, BNB Chain, Avalanche | An ERC-20 token or an ERC-721 NFT collection |
| Solana | An SPL token |
| Bitcoin | A BTC balance |

**Level roles** need nothing from the member: Nova gives the role the moment they reach the level. Levels come from Ascend, so turn it on first (_"@Nova turn on XP and levels"_). A role that only time brings (the 180th day in the server, the 90th day of holding) arrives at the next automatic re-check, or at once when the member asks for their roles.

**Holding roles** need a wallet: a member verifies one wallet for each chain your rules use. They get a private link, connect the wallet and sign a message to prove it is theirs. Signing is not a transaction and costs nothing. Nova reads the holdings on chain and adds the roles. From then on Nova re-checks members on a schedule, so someone who sells below the amount loses the role and someone who buys in gets it.

A member who asks for their roles is told what they still lack for the ones they did not get, for example _"level 7 of 10"_ or _"400 of 1,000"_.

Two things Nova will not do. It never gives a role that carries moderation or admin permissions. And if holdings or a level cannot be read at re-check time, the roles that depend on it are left exactly as they are: an outage never strips roles. Chains are checked separately, so a problem on one chain does not hold up the roles from another.

***

## Free vs Community PRO

| | Free | Community PRO |
| --- | --- | --- |
| Role rules per server (any kind, any chain) | 5 | 30 |
| Automatic re-check of holdings | Every week | Every day |
| Manual re-sync | Once every 72 hours | Once every 6 hours |
| Holding, level and verified-wallet rules | ✓ | ✓ |
| Level roles given the moment the level is reached | ✓ | ✓ |
| Roles for time in the server and activity | — | ✓ |
| "Held for N days" on a holding rule | — | ✓ |
| "Get my roles" button | ✓ | ✓ |

A server that ends up over its rule limit keeps every rule working and can still edit or remove them. It only cannot add more. The same goes for a server that leaves Community PRO: its time, activity and holding-time rules keep working and can be lowered or removed, not added or raised.

***

## Set it up (Discord only)

1. In **Server Settings > Roles**, create the role and drag **Nova's role above it**. Nova needs the *Manage Roles* permission.
2. As an admin, tell Nova the rule in your server. For a holding, give the exact contract, and the network for an EVM token:
   > _"@Nova give the Holder role to anyone with 1000 of SP2ABC...XYZ.my-token"_

   > _"@Nova give the Elder role at level 20"_

   > _"@Nova give the Core role to anyone with 1000 of SP2ABC...XYZ.my-token and level 10"_

   > _"@Nova give the OG role to members who have been here 180 days and were active on at least 20 days"_ (Community PRO)

   > _"@Nova give Diamond Hands to anyone who has held 1000 of SP2ABC...XYZ.my-token for 90 days"_ (Community PRO)
3. Give members a way to get their roles. Post a button in a channel:
   > _"@Nova post the roles button in #roles"_

   Members can also run `/roles` and choose **Get Roles**. Either way they see the roles they have earned and what is still missing, and get their wallet link when a rule asks for a wallet.
4. Check or change it any time: _"@Nova show our role rules"_ lists every rule with how many members hold its role. _"@Nova change the Elder level to 25"_, _"@Nova remove rule #2"_ and _"@Nova re-sync roles"_ do what they say.

The same rules are on the **Community Roles** card under Nova Harbor in the [Community Settings dashboard](https://zeroauthoritydao.ai/docs/nova/community/settings-dashboard.md), and in `/roles` under **Setup Roles** (server Administrators). Chat, dashboard and command edit one list.

> [!NOTE]
> **Added a rule for members who already qualify?** A member already at the level, or who verified a wallet before the rule existed, gets the role at the next re-sync with nothing to do, or at once by pressing the button. A member verifies one wallet on each chain, and a wallet counts for one Discord account per server: verifying it from a second account moves its roles to that account.

> [!WARNING]
> **Not supported yet.** Roles for leaderboard rank, a ladder that keeps only the highest role, and holding time read from chain history. For holdings: ERC-1155 tokens, Solana NFT collections, and Runes, BRC-20 or Ordinals on Bitcoin; smart-contract wallets (such as Safe) cannot be verified on EVM. If a role is not being given, ask _"@Nova show our role rules"_: a rule Nova cannot act on says why.
