Faction Hub
The Faction Hub is a directory of the groups inside your community — departments, task forces, corporate divisions — each with its own roster, ranks, recruitment, discipline record and optionally its own Discord server wired to the bot.
Who can do what
| Role | Can |
|---|---|
| Any member | Browse the directory, view faction profiles, apply to factions with open recruitment. |
| Roster member | All of the above, plus My Membership — your rank, your applications, and setting your own LoA status. |
| Faction leadership the owner, or anyone on the high-command list | Manage the roster and ranks, open and close recruitment, decide applications, post announcements and events, link a Discord server, file appeals against punishments. |
| Hub staff the factionHub permit, Manage Server, or server owner | Edit any faction's record, issue and revoke punishments, decide appeals. |
Every one of these is re-checked on the server for each action. Hiding a button in the interface is never the only thing standing between someone and an action they should not be able to take.
Rosters and ranks
Each faction has an ordered rank ladder, highest first. The default ladder is Commander, Deputy, Officer, Operative, Recruit, and it is fully rewritable — up to 20 ranks, each unique and at most 40 characters. A roster holds up to 400 members, one row per Discord user, each with a rank, a status and an optional note.
Member status is Active, LoA or Suspended.
Members can set themselves Active or LoA with /faction loa; only leadership can set
someone Suspended.
If you rename or delete a rank that people are on, they drop to the lowest rung rather than displaying a rank that no longer exists. Reorder deliberately.
Applications
- Leadership opens recruitment and writes up to 10 questions, each optionally required. A minimum account age of up to 365 days can be set as a raid guard.
- A member applies from the faction's profile page. Applying is blocked if recruitment is closed, if they are already on the roster, or if a required question is unanswered.
- The faction's Discord is notified, if the applications module is bound to a channel.
- Leadership accepts or rejects. Accepting adds the person to the roster in the same step — if the roster is full, you get a clear error rather than an accepted application that silently went nowhere.
- Applicants can withdraw their own application while it is still pending.
One pending application per person per faction. Re-applying after a rejection is allowed. The 300 most recent applications are kept per faction.
Punishments and appeals
Hub staff — not faction leadership — issue punishments against a faction. There are two types, Strike and Warning, at three severities:
| Severity | Expires after |
|---|---|
| Minor | 30 days |
| Moderate | 90 days |
| Severe | Never — stays active until appealed |
Faction leadership can file an appeal, with a mandatory reason. Only one open appeal per punishment. Hub staff decide it; accepting an appeal makes the punishment inactive.
Expiry and appeals stop a punishment counting — they never delete it. Active counts drive the faction's standing; lifetime totals stay visible to staff. History is not rewritten, so an accepted appeal is recorded as an accepted appeal rather than as though nothing happened.
Linking a faction's own Discord
A faction can link its own Discord server so the bot posts there. The bot must already be in that server, and you must have Manage Server or own it — this is verified live against Discord, not taken on trust. One server per faction; a server already claimed by another faction is rejected.
Six independently toggled modules, each bound to its own channel:
- Announcements — posts from
/faction announceand the hub. - Applications — new applications and decisions.
- Roster — joins, promotions, demotions and removals.
- Punishments — punishments issued and appeal outcomes.
- Events — scheduled events posted to the hub.
- Welcome — a greeting when someone joins, supporting
{user}.
The channel picker only offers channels the bot can actually see and post in, so you cannot bind a module to a channel that will silently fail. Each module has a Test message button that reports the real result rather than an optimistic success.
Discord delivery failures never block the action itself. If the bot cannot post a roster change, the roster change still happens — the notification is logged as failed rather than rolling back your edit.