The Discord bot that runs your Black Desert guild.
CritIQ is an all-in-one Discord bot and web dashboard built strictly for Black Desert Online guilds. Member tracking, war analytics, gear-score tracking, performance flags, event signups, alliance dashboards, live combat logs from IKUSA โ in one install, with a single Discord sign-in.
Up and running, end to end
The path from "click Add to Discord" to "first war recorded" โ usually a few minutes once you have your BDO guild name handy:
- Add the bot to your server. Click Add to Discord from critiq.one. You need Manage Server permission. The bot joins quietly and sits there until you set it up.
- Run /setup in your bot channel. Discord Administrator required. The bot asks for your BDO guild name, reads the official BDO guild page, and shows the imported member list for confirmation.
- Confirm the roster. CritIQ registers your guild and imports every member at 0/0 KDR. Optionally designate a Discord role as your "Owner" role here.
- Sign in to the dashboard. Visit critiq.one/dashboard โ "Log in with Discord" โ grant the requested read-only scopes. You're routed to your dashboard.
- Record your first war with /warscores. Upload BDO results screenshots in pairs (names + stats). Automatic extraction reads each screenshot, fuzzy-matches names against your roster, and shows a confirmation embed. Confirm โ and the war is recorded.
Detailed install flow
1. Adding CritIQ to Discord
The Add-to-Discord button takes you through Discord's standard app install flow. CritIQ asks for the permissions it actually uses โ reading channels, sending messages, posting images and embeds, managing its own messages, and running slash commands. You must have Manage Server on the server you're adding it to.
The bot is dormant until you actually run /setup. Nothing is stored about your guild yet.
2. /setup โ guild registration
Run in any channel where the bot can post. Requires Discord Administrator. The bot replies with an embed asking for your exact BDO guild name (e.g. Omniscient). Type it as a chat message in the same channel โ the setup session lives for 15 minutes.
CritIQ reads the official BDO guild profile page and pulls every member, with automatic retries if the page is slow to respond.
You'll see the imported member list + guild master for confirmation. On approval, every member is added at default stats. You can optionally designate a Discord role as your dashboard Owner role during this wizard.
3. /sync roster โ keeping the roster fresh
Re-reads your BDO guild page and reconciles changes against your CritIQ roster. New members join the list with default stats. Members who've left BDO are marked inactive, but their lifetime stats stay intact. A short summary message gets posted to your sync notification channel (configurable via /config โ Sync Notifications).
4. The first war
Use /warscores to upload your BDO Node War / Siege results. Screenshots must be uploaded in pairs (names image + stats image), up to 5 pairs per command. The flow:
- Each attachment is read with automatic extraction.
- Names from each pair's first image are matched to kills/deaths from the second.
- Fuzzy matching reconciles extracted names against the live roster (handles imperfect reads).
- You get a confirmation message with matched rows + a dropdown to manually assign any unmatched names.
- On confirm: the war is recorded, every member's lifetime stats are updated, matched members are marked present for attendance, guild-wide KDR is recalculated.
The dashboard updates in real time โ no refresh needed.
Discord sign-in, roles, and access
The login flow
The dashboard uses Discord login โ read-only access to your profile and the list of servers you're in. Flow:
- Click Log in with Discord on the landing page.
- Discord prompts you to authorize CritIQ. Only "read profile + read your servers" is requested โ no write access ever.
- You're returned to CritIQ, signed in, and routed straight to your guild's dashboard.
Permission tiers
Permissions are resolved per guild. CritIQ reads your live Discord role list and compares it against the roles you've designated as Owner, Admin, and User in /config โ Role Settings.
Roles are re-checked automatically every few minutes and whenever the dashboard tab regains focus โ so role changes in Discord propagate without you having to log out and back in.
Permissions matrix
| Action | Owner | Admin | User |
|---|---|---|---|
| View dashboard & stats | โ | โ | โ |
| Upload war scores (/warscores) | โ | โ | โ |
| Sync roster (/sync roster) | โ | โ | โ |
| Manage exceptions & vacations | โ | โ | โ |
| Edit member stats inline | โ | โ | โ |
| Toggle war exclusion / alliance inclusion | โ | โ | โ |
| Run /config sub-menus | โ | bootstrap* | โ |
| Create / manage alliances | โ | โ | โ |
| Disband guild / purge stats | โ | โ | โ |
* Discord Administrators can run /config during initial bootstrap when no roles are yet configured.
Eight tabs, every angle of your guild
The dashboard at critiq.one/dashboard surfaces every guild metric in a dark-mode, glass-morphism interface. Every tab respects permissions and only shows what you're allowed to do.
The global shell
- Sticky top bar โ the CritIQ eye logo, a guild switcher for jumping between any guilds you have access to, links for Docs / Invite / Feature Request / Settings / Sync, and your user menu with logout.
- Global stats strip โ eight cards at the top of every tab: Total Wars, Guild KDR, Total Kills, Total Deaths, Wins, Losses, Draws, and Win Rate %.
- Global filter controls โ war type (Node / Siege / All), capped vs uncapped, and month/year. Filters apply to both stats strips at once.
- Orphaned guild banner โ shows up if the guild's owner has left Discord, letting an eligible member claim ownership with a one-time adoption key.
Every member, every stat, one card
The default landing tab โ a fast, scrollable grid showing every active guild member with their kills, deaths, KDR, attendance, class, and quick admin toggles.
Card anatomy
- Avatar and family name (long names quietly scroll on hover so nothing gets cut off).
- Badges for Discord-linked, on vacation, exception status, and grace period for new members.
- KDR, kills, deaths, and war attendance numbers with smooth count-up animation.
- A small trend arrow (up / down / flat) based on recent KDR change.
- Class icon and specialization โ Awakening, Succession, or Ascension.
- Lifetime attendance percentage based on the last seven wars they were eligible for.
- Pity dots showing how close a member is to a pity token (for the events that use it).
- A "live" badge if the member is currently streaming on Twitch.
- Flip the card to see notes or change a member's class (admin/owner). Class changes can apply going forward only or be applied retroactively to past wars.
Search, sort, filter, view
- Search by family name or character name.
- Sort by KDR, kills, deaths, attendance, name, last-warred date, or vacation status.
- Filter by class โ pick any class on your roster.
- Filter by custom member group, or open the "Manage Groups" panel to create one.
- Filter to find members who haven't linked a Discord account yet.
- Switch the view between the standard grid and a Kanban board where you can drag members between groups.
Admin actions
- Exception toggle โ flag a member so their stats don't count toward guild KDR (trial members, etc.).
- Vacation toggle โ pause attendance tracking for someone taking time off.
- Edit class โ change a member's class either going forward only, or backfilled to past wars too.
- Delete member โ right-click any card to remove a member.
- Merge stats โ combine two member records into one (handy when someone changes their family name).
- Add or edit notes โ open a notes panel for any member.
Every war, stat-by-stat
Full timeline of past Node Wars and Sieges. The list view shows date, type, result (Win / Loss / Draw), capped flag, total K/D, and total players. Click any war to open the war-detail modal.
The war detail view
Clicking a war opens a full-screen view with a stats sidebar and a player roster:
- Sidebar โ date, war type, result tags, the key totals (Kills, Deaths, K/D, Players), the top 5 classes, an animated donut showing class composition, and an accolades panel that surfaces Most Kills, Best K/D, Most Improved, and Victim.
- Player roster โ sortable by name, kills, deaths, or K/D. Each row has its own exclusion toggle, a class assignment dropdown, and a remove button.
- Inline editing โ admins can fix kills and deaths for any player directly in the table.
War-level actions (admin/owner)
- Toggle exclusion โ the eye icon on each row. Excluded wars drop out of K/D stats but still count for attendance.
- Toggle alliance inclusion โ controls whether this war contributes to the alliance's combined stats.
- Edit the date, or edit type / result / capped flag if you got it wrong on first upload.
- Add a missing member manually, or remove a member from the war if they shouldn't be there.
- Delete the war entirely, or add a note to it.
- LIVE badge appears on any war that's linked to a Live War session.
Charts, trends, and deep-dives
Visual breakdowns of guild performance โ head-to-head comparisons, class composition, and KDR trends over time.
Highlight cards
Four flippable cards at the top โ MVP, Most Improved, Consistency, and Best War KDR. Flip any card to cycle through attendance accolades: perfect attendance, gold/diamond rate, longest streak, single-war kill record, death dealer, victim, hot streak, and returning members.
Charts
- KDR Timeline โ guild-wide and per-member kill/death ratio over time, with a clean gradient fill.
- Attendance Heatmap โ calendar-style grid showing every war a member did or didn't show up to.
- Player Comparison Radar โ spider chart that compares 2โ4 members side by side across kills, deaths, KDR, attendance, and more.
- Class Distribution โ floating bubble cluster where each class is an orb sized by how many guildmates main it. Hover any orb to see the breakdown of Awakening / Succession / Ascension within that class.
- Class Performance โ kills, deaths, and KDR broken down by class so you can see which classes are pulling the most weight.
- Roster Priority โ every member's KDR plotted over time on one chart, with sortable tiers for spotting drift.
The under-performers, surfaced automatically
Admin/owner only. Two parallel flag tracks: Performance Issues (KDR below your threshold) and No-Shows (members who keep signing up but not showing, or who miss multiple events in a row). Both are private โ officers see them, flagged members never do.
Threshold settings (gear icon)
- KDR threshold (for example, 0.20) and the window it's measured over โ all-time, the last X days, the last X wars, or the last month.
- Attendance percentage threshold and the window it's measured over.
- No-show percentage threshold, window, and minimum number of events before flagging.
- Cooldown days per flag type so the same member doesn't get re-flagged the day after a lead is assigned to them.
- One master enable/disable switch for the whole system.
Tabs within the tab
- Issue type โ Performance (KDR), Attendance, or No-Show.
- Status โ Flagged, Active Assignments, Resolved, or Leads.
Lead assignment system
The owner designates one or more Discord roles as Leads and sets how many assignments each lead can take at a time. When a member is flagged, an owner can assign them to a lead. CritIQ sends a notification to your Lead Notifications channel pinging the chosen lead role.
- Each lead role has a maximum assignment capacity so no one gets overloaded.
- The Active Assignments tab tracks every mentorship in progress.
- The Complete Assignment dialog marks a mentorship resolved, with optional notes about the outcome.
- Each flagged member's recent history is expandable โ the last 10 wars or no-show events at a glance.
Create events, build rosters, post to Discord
One place to create events, collect signups from Discord, build out your teams, and post the finished roster card back to your Discord server.
Event creation
The Event Creation dialog lets admins configure:
- Event type โ Node War, Siege, Practice, or Custom.
- Date, time, and timezone.
- Team setup โ top-level teams (Frontline / Flex / Backline) with sub-teams that have their own colors and capacities.
- An optional event image and a custom accent color for the Discord card.
- A recurring schedule, e.g. every Tuesday at 20:00.
- Mention roles to ping when the event is posted.
- Lock and archive toggles when the event is over.
Drag-and-drop reassignment
Admins can drag signups between teams and sub-teams. Capacity is enforced โ drops into a full sub-team get a friendly bounce-back message. When a team is at capacity, extra signups become waitlisted within that same team โ their name stays visible right below the team they signed up for, just with a strikethrough. No separate waitlist column.
Sync to Discord
- Post to Discord โ publishes the event card with team breakdowns to the channel you choose.
- Re-sync โ updates the existing event card in place after team changes.
- Ping Missing โ mention members who haven't responded yet.
- Composition view โ pie chart of class distribution across the current roster.
Templates & presets
Save your common team setups as templates. Save full event configurations as presets so you can recreate them with one click. Each signup tile shows the member's family name, their selected class and specialization, their KDR, and their gear score (if they've linked it).
Every BDO streamer in one feed
A live look at who in the BDO community is streaming right now. Members of your guild get pride of place, surrounded by the broader BDO partner community.
- Partner Carousel โ rotating spotlight of featured BDO partner streams.
- Live Members Strip โ horizontal row of your guild's currently-live members, with one spotlight player picked out above.
- Category filter pills โ Nodewar, RBF, Grinding, Bosses, and more.
- Streams grid โ every BDO stream live right now, with viewer counts and a gold ring on partnered creators.
- Refresh cadence โ the feed refreshes every 45 seconds.
Members link their Twitch with /link-twitch <family> <handle> in Discord.
Screenshot-driven war import
CritIQ's flagship feature: drop your BDO results screenshots and the stats land in your dashboard. No manual data entry, no spreadsheet wrangling.
The pipeline
- Upload pairs. Each war screenshot pair is (1) the names panel + (2) the kills/deaths panel. Up to 5 pairs (10 attachments) per command.
- Read each screenshot. CritIQ automatically extracts the names and the numbers from your attachments.
- Match names to stats by row order within each pair.
- Fuzzy-match against your roster. Small misreads ("Vexa" โ "Vaxa") are reconciled automatically.
- Confirmation. The bot replies with the matched rows, any unmatched names (with a dropdown so you can manually assign them), and the per-player kills/deaths.
- Confirm and save. The war is recorded, every member's lifetime kills/deaths/KDR is updated, every matched member is marked present, and guild-wide KDR is recalculated. Members not in the screenshot are marked absent.
- Live update. Every open dashboard tab refreshes instantly โ no manual reload needed.
Real-time combat from your log file
CritIQ's real-time combat analytics overlay for BDO Node Wars. Stream your IKUSA log to the dashboard for a live kill feed, per-guild K/D breakdowns, killbase timeline chart, and class identification โ all updating second-by-second so the shot-caller can read the fight as it happens.
What IKUSA is
BDO doesn't ship with a built-in combat log. IKUSA is a community-made Windows tool that watches BDO's network activity and writes each kill and death to a text log file on your computer. CritIQ reads that log file (without modifying it) and turns it into something a shot-caller can actually use mid-fight.
Two ways to connect
Open the Live War tab in a modern browser (Chrome, Edge, Brave, or Opera), click Open Log File, pick your IKUSA log, and grant read permission. The browser reads new lines from the file every half-second. The log file itself never leaves your computer โ only the parsed kill/death events (player, target, kill or death flag, enemy guild) are sent to CritIQ so it can identify enemy classes.
A small companion app runs on your PC and tails the IKUSA log, forwarding events to the dashboard over a local connection. Works in any browser but requires you to keep a terminal window running. The in-browser option has replaced this for most users.
How the data flows
- IKUSA notices a kill or death in BDO and writes a line to its log file.
- CritIQ reads that line within a half-second of it appearing.
- It rolls the event into a running snapshot: total kills, total deaths, overall K/D, and a per-enemy-guild breakdown.
- If it's seeing a player it doesn't recognize, it looks up their class against the running list of known BDO characters.
- When an entirely new enemy guild shows up, CritIQ scrapes that guild's BDO page once so future kills resolve fast.
- The kill feed, per-guild cards, timeline chart, and summary bar all update on screen as new events arrive.
Real-time features
- Live kill feed โ the most recent events, color-coded by enemy guild.
- Per-guild breakdown cards โ enemies grouped by their guild, with a K/D progress bar, class composition tags, and an expandable per-player table. Click any card to scope the chart to just that guild.
- Kill / death timeline chart โ kills in amber, deaths in red, bucketed into one-minute slots. Mouse-wheel zooms in to second-by-second detail under about 10 minutes.
- Connection status โ a small indicator shows whether CritIQ is reading your log, with automatic reconnect if it drops.
- Class identification โ class icons appear within about half a minute of an enemy first showing up.
- Family-name toggle โ switch the whole UI between BDO character names and family (account) names on the fly.
Session management
- Start and stop tracking from the same screen. Saving a session lets you keep the full record with an optional note.
- Replay any saved session โ pulls up the full kill feed, charts, and class breakdowns just as if it were happening live.
- Link to a war โ connect a saved session to a row in your war history so the History tab shows a LIVE badge next to it.
- Guild Profiles mode โ combined stats per enemy guild across every session you've saved: wars faced, lifetime K/D, class composition donut, and an optional full roster view.
2โ4 guilds, one combined view
In BDO, guilds often band together for node wars and sieges. CritIQ mirrors that on the dashboard โ 2 to 4 separate guilds link up to share statistics while keeping their own data sovereign. Owner-only feature.
What an alliance is
An alliance does not merge data โ every guild keeps its own roster, K/D, attendance, and admin controls. What it adds is a shared lens: combined K/D ratio, pooled kill/death totals, unified roster view, per-guild breakdowns side-by-side. Partner data is strictly read-only โ you can look, but you can't edit another guild's members or wars.
Creation flow
- From the Alliance tab, enter an alliance name (3 to 50 characters).
- Enter 1 to 3 partner guild names exactly as they appear in CritIQ. Capitalization doesn't matter, but spelling must be exact.
- Click Create Alliance. Your own guild is marked accepted automatically, and each partner gets a pending invitation.
- Every invited owner sees a pending invitation appear on their dashboard instantly โ no refresh needed.
- When all invited guilds accept, the alliance flips from pending to active and everyone can start sharing stats.
Invitation states
| Status | Meaning |
|---|---|
| Pending | Waiting on that guild owner's response. |
| Accepted | Guild has joined; counts toward unanimous activation. |
| Declined | Guild owner actively rejected the invite. |
| Cancelled | Automatically set when a different guild declined and the alliance was disbanded. |
Cascade rejection
CritIQ takes an all-or-nothing approach. The moment any invited guild clicks Decline:
- That guild's invitation flips to Declined.
- The alliance is disbanded.
- Every other guild that was still Pending is automatically moved to Cancelled. Their pending invitation disappears from their dashboard right away.
- The alliance creator gets a Discord notification (if they've set up a notification channel).
This prevents half-formed "zombie" alliances and makes it impossible to accidentally accept an invite that's already dead in the water.
Combined statistics
Once active, the Alliance Stats view shows:
- Total Kills, Total Deaths, Combined K/D โ summed across every opted-in war from every member guild.
- Per-guild breakdown cards โ each ally's contribution at a glance.
- Trend chart โ the last seven wars of alliance K/D.
- Unified war history โ recent wars from every guild, sortable and filterable.
- Class composition donut across every allied war.
- Two stat modes โ full (every member counts) or exception-excluded (only your combat-active members).
War inclusion toggle
Each war can be opted in or out of the alliance individually. In the war history table, every row has an eye icon. Click it to add or remove that war from the alliance's combined stats. You can only toggle wars from your own guild. New wars default to not included, so every guild explicitly chooses which wars count toward the alliance.
Real-time updates
The Alliance dashboard updates the instant something changes โ when a partner accepts, declines, or toggles a war, every member guild's dashboard reflects it within a beat. No manual refresh, no waiting.
Alliance Mode + guild picker
Alliance Mode is a different concept from creating an alliance. It's a setup where a single Discord server hosts multiple BDO guild profiles at once. When an owner runs a command like /warscores in an Alliance Mode server, CritIQ first asks "which guild?" with one button per configured guild. The owner picks; the command runs against that guild. If there's only one guild configured, the picker is skipped entirely.
Screenshot-driven gear scores
Members keep their gear up to date with two BDO screenshots: the Equipment screen and the Detailed Stats screen. CritIQ reads both automatically and records AP, AAP, DP, gear score, and class for the linked member.
The flow
- A member runs /gearupdate and attaches both screenshots.
- CritIQ extracts the numbers from each one.
- Their current gear is updated and the previous version is kept in history.
- Anyone can run /gear @user to see someone's current gear, or /gearlist to see the whole guild ranked by gear score.
- Admins use /gearping to remind members who haven't submitted gear yet.
Channel restriction
If you'd rather contain gear chatter to one place, set a dedicated channel in /config โ Gear Channel. With that set, every /gear-family command only responds in that channel.
Rankings
/rankings shows your guild's gear-score ranking against tracked rival guilds (refreshed up to once a day to stay friendly with BDO's servers). The tracked-guilds list is maintained centrally โ reach out in the Discord if you want a guild added or removed.
The /config menu
Owner-only once your roles are set up. Running /config opens an interactive menu where each button takes you into the settings for that area.
All slash commands
Every Discord slash command CritIQ exposes, grouped by category. Permission tags: Owner Admin User+ Any
Setup & guild onboarding
War tracking
Gear tracking
Member linking (Discord โ BDO family)
Classes
Event signups (helper commands)
Events are created and managed from the dashboard. Members sign up using buttons on the Discord card the bot posts.
Performance flags
Configuration
Analytics
General / utility
Fun
Admin / bot maintenance
Frequently asked
Free for guilds today โ there's no billing system, no credit card prompt, no upgrade tier. Every feature ships in one tier. If that ever changes, existing guilds will be grandfathered.
No. When you use the in-browser option, your log file is read directly from your computer. Only the parsed kill/death events (player, target, kill or death, enemy guild) are sent to CritIQ โ and only so it can identify enemy classes. The raw log itself never leaves your PC.
Alliances require unanimous acceptance. If you invited three guilds and only two have accepted, the alliance stays pending until the third also accepts. If any guild declines, the alliance is disbanded and any still-pending invitations are automatically cancelled.
CritIQ re-checks your Discord roles every few minutes and whenever you tab back to the dashboard. If your roles changed in Discord (you got promoted, demoted, or left), the dashboard reflects that without you having to log out and back in.
No. Performance flags are officer-only. Admins and owners see them; flagged members do not.
CritIQ paces requests to stay within BDO's limits. If the website starts rate-limiting us anyway, the lookup queue pauses and the dashboard shows a small banner with a countdown. It clears itself the next time a request succeeds โ you don't have to do anything.
Join our Discord at discord.gg/omnibdo โ release notes, support, and the broader CritIQ community all live there.