Text size Contrast Detail

OddCord system plan

This page holds the whole plan in one place. You do not need to read all of it. Every section starts with a one-line summary, so you can read only the summaries and open the parts you need.

Do this first

Three things, in this order. Nothing else on this page matters until these are done.

  1. Install seven bots. About two hours. Section 9 lists them. After that you never touch them again.
  2. Build the account link. A member types one command in Discord and one code in Twitch chat. Section 6, job 1.
  3. Build one reward. One voucher, sent by you by hand. Section 6, job 3.
Section 2

Words used here

In one line

Each word below means exactly one thing on this page and is never swapped for a similar word.

WordWhat it means here
Your systemThe website, database, API and Discord bot that you build and own.
Bought botA Discord bot made by someone else that you invite to your server. You never connect it to your system.
APIThe one program that reads and writes your database. Nothing else touches the database.
BridgeA small program that listens to one platform and passes what it hears to the API.
PersonOne human being. One row in the person table.
IdentityOne account a person owns on one platform. One person can have four identities.
CreditsEarned by watching and taking part. Can be exchanged for real vouchers. Can never be gambled.
CoinsUsed only in minigames. Cannot buy anything real. Can never become credits.
LedgerA list of every credit and coin change ever made. Rows are added, never edited or deleted.
EventOne thing that happened on a platform. For example one minute of watching, or one subscription.
Section 3

The rule

In one line

You build anything a member experiences. You install anything that keeps the server safe and tidy. The two groups never connect.

You build it if a member experiences it

Identity, credits, levels, rewards, games. These are the thing you are making. They live in your database.

You install it if it is server admin

Moderation, message filtering, logging, raid defence. A member only notices these when something goes wrong. Other people have already built them well.

You were stuck because you were asking which bots your system should connect to. The answer is none of them. They run beside your system, not inside it. No bot reads your database, and your system never calls a bot.

Section 4

The map

In one line

Activity happens on four platforms, bridges collect it, the API stores it, and members see the result in Discord and on the website.

Diagram of the system Four platforms feed four bridges. The bridges feed one API. The API reads and writes one database and sends results to the website, Discord and a reward list. Seven bought bots sit below a dashed line with no connections. PLATFORMS BRIDGES YOU WRITE ONE API WHAT MEMBERS SEE Twitchchat, subs YouTubenot yet Minecraftnot yet Discordcommands Twitch bridgelistens, forwards YouTube bridgenot yet Minecraft bridgenot yet Your Discord botone command The API Decides what anevent is worth. Finds the person. Checks balances. Nothing else maywrite to thedatabase. The databasethe ledger is truth Websitehistory and shop Discord replyone hub command Reward listyou send by hand BOUGHT BOTS. NOT CONNECTED TO ANYTHING ABOVE Sapphiremoderation, logs Jockie Musicmusic Statbotactivity numbers 4 safety botssee section 9
The dashed line means no connection. Nothing below it can read or write anything above it. Dashed boxes are parts you have not built yet.
The same thing in words, if the diagram is hard to read

Twitch sends events to a bridge. The bridge sends them to the API. The API writes to the database. The website and Discord ask the API for answers. The bought bots are separate and connect to nothing.

Section 5

What connects to what

In one line

Every arrow in the map, and the exact method each one uses.

FromToMethodWhat it sends
TwitchTwitch bridgeEventSub webhookChat messages, subscriptions, cheers, stream going live
YouTube not yetYouTube bridgePubSubHubbub pushNew uploads, memberships
Minecraft not yetMinecraft bridgeServer plugin sends HTTPSSession start and stop, milestones
DiscordYour Discord botGateway websocketSlash commands, button clicks
Any bridge or botThe APIPOST /events with a shared secretOne event, plus a key that stops duplicates
The APIThe databaseSQLNew ledger rows, lookups
WebsiteThe APIREST, Discord loginBalance, history, shop
Bought botsNothingNo connection existsNothing
One rule for bridges

A bridge never decides how many credits something is worth. It only passes the event along. All value rules live in the API, so changing a rate is one edit in one place.

Section 6

The three jobs

In one line

Your system only does three things. Everything else is a variation of one of them.

Job 1. Connect a Discord account to a Twitch account6 steps

One human has several platform accounts. This job joins them so both count towards the same balance.

  1. The member types /link twitch in Discord.Your bot sends their Discord ID to the API.
  2. The API makes a six-character code.It saves the code with their person ID and an expiry time ten minutes ahead.
  3. The bot sends the code by direct message.The message says to type !link ABC123 in your Twitch chat within ten minutes.
  4. The member types the code in Twitch chat.Your Twitch bridge is already reading chat, so it sees the code and the Twitch account together.
  5. The bridge sends both to the API.The API checks the code is valid and not expired, then saves a new identity row for Twitch pointing at the same person.
  6. The bot confirms in Discord.Both accounts now lead to one person. Every future event from either platform lands on the same balance.
This is why the database looks the way it does

These same six steps work for YouTube and Minecraft later with no change to the database. That is the whole reason the identity table is separate.

Job 2. Turn watching into credits5 steps
  1. Twitch sends an event to your bridge.Check the signature first. Reject anything unsigned, because this address is public.
  2. The bridge passes it to the API.It sends the platform, the account ID, the event type, the size, and a key that stops duplicates.
  3. The API finds the person.It looks up the identity. If there is no match, the account is not linked yet, so it saves the event and pays nothing for now.
  4. The API decides what it is worth.One table holds the rates. One watched minute is one credit. One subscription is five hundred.
  5. The API adds a ledger row.It never edits a balance. The balance is the sum of all ledger rows.
Job 3. Exchange credits for a real voucher5 steps
  1. The member opens /hub and clicks a reward.A button, not a typed command.
  2. The API checks three things together.Enough credits, the reward is in stock, and no identical request is already waiting.
  3. The API writes two rows together.A ledger row that subtracts credits, and a redemption row marked waiting. If either fails, both are undone.
  4. You get a message.In a private staff channel: who, which reward, and the redemption ID.
  5. You send the voucher by hand and mark it done.The status changes to sent.
Sending by hand is the correct first version

Writing code to send vouchers automatically, before you know whether anyone wants a voucher, is work that feels useful and produces nothing. Add it when doing it by hand becomes annoying.

Section 7

The database

In one line

Eight tables. The two that matter most are identity and ledger.

-- one row for each human being
person        id, display_name, created_at

-- one row for each platform account a person owns
identity      id, person_id, platform, platform_user_id, linked_at
              platform is one of: discord, twitch, youtube, minecraft

-- short codes used while connecting two accounts
link_code     code, person_id, platform, expires_at, used_at

-- every event received, saved before it is valued
event         id, idempotency_key, platform, platform_user_id,
              type, magnitude, payload_json, received_at, processed_at

-- how an event becomes currency. change rates only here.
rule          id, event_type, currency, amount_per_unit, daily_cap, active

-- rows are only ever added. balance is the sum of delta.
ledger        id, person_id, currency, delta, reason,
              source_event_id, created_at

-- what can be bought
reward        id, name, cost_credits, stock, active, fulfilment_type

-- and who bought it
redemption    id, person_id, reward_id, status,
              ledger_id, created_at, fulfilled_at, note

Three rules for the database

Rule 1
Everything points at person.id

Never point at a Discord ID. When you add Minecraft, this is the difference between one afternoon of work and rebuilding everything.

Rule 2
Never change a balance directly

Add a ledger row instead. When someone says their credits are missing, you will have a dated record. With real vouchers involved you will need one eventually.

Rule 3
Keep credits and coins fully separate

Credits are earned, can buy real things, and can never be gambled. Coins are for minigames and can never become credits. This stops one lucky game from emptying your voucher budget. It also keeps you away from the point where a currency won by chance, that has real-world value, starts to count as gambling. That matters if anyone in your audience is under 18. Rules differ by country and I am not a lawyer, so check this properly before you launch minigames.

Section 8

Two known problems

In one line

Both are cheap to prevent now and expensive to fix later.

Problem 1. The same event pays twice

Twitch sends an event again if your server is slow to reply, or replies with an error. Without protection, one subscription pays out twice.

The fix. Every event carries a key, which is the message ID Twitch already provides. That column has a unique constraint. The second attempt to save it fails, nothing is paid, and you still reply with a success code so Twitch stops resending.

Problem 2. Events from people who have not linked yet

Most of your Twitch chat will not have connected Discord. Do not throw those events away.

The fix. Save them with the raw Twitch account ID and leave the processed time empty. When that person links later, go back through their saved events and pay them. Paying someone for everything they did before they linked is the strongest reason to link that you will ever have.

Section 9

Which bots to install

In one line

Seven bots. Six are free. Five dollars per month in total. Only two need real setup.

Each box below is one job. Open a box to see the choice and the alternatives. If you only want the answer, install the seven marked install and skip the rest.

Block bad messages before they postDiscord AutoMod, free
Install
Discord AutoMod

Built into Discord, so it stops a message before anyone sees it. No bot can do that. Turn on the ready-made lists for profanity, sexual content and slurs, then add your own words. Set this up first, because it changes what you need from everything else.

Limit

There is a maximum number of rules. When you reach it, the next job covers the gap.

Moderation, logging, self-assign rolesSapphire, free
Install
Sapphire

Adds extra actions on top of Discord AutoMod instead of running a second filter. It is the only bot here that does this. It has case management, more than eighty log types with ignore lists, self-assign roles, and alerts for Twitch, YouTube and TikTok. Used by 1,738,800 servers. Made by one independent developer. Completely free.

Alternative
Carl-bot

Choose this instead if you want TagScript, which lets you write commands with variables and conditions. Sapphire has nothing similar. Carl-bot also has 250 reaction-role pairs. Used by 14,847,972 servers. Two downsides: it runs its own filter alongside Discord AutoMod, and it is owned by a company called Bot Labs, which belongs to BlueStacks.

Alternative
Dyno

4.99 dollars per month. Choose it if other people will configure the server and want one on-off switch per feature.

Avoid

Maki, Discortics, ProBot and MEE6. Their best features are levels, economy and tickets, which you are building yourself.

Stop someone destroying the serverWick, 5 dollars per month
Install
Wick

The only thing here that helps when a staff account is stolen and starts deleting channels. It watches for mass deletion, webhook spam and permission changes, removes the roles of whoever is doing it, and can undo the damage. It also backs up your server structure. The free version covers the basics. The five dollar version adds backups, undo, and panic mode.

You own this
bleed

You already bought this for life. It covers the same six kinds of attack, and can give staff moderation powers without giving them dangerous Discord permissions. Using it here instead of Wick brings your bot cost to zero. Two catches: it is a large multipurpose bot, so you must keep its levels, economy and music switched off, and its invite link asks for full Administrator by default, which you should reduce on the permission screen.

Alternative
Zeppelin

Free and open source, but you run it on your own server and maintain it yourself.

Stop mass raidsBeemo, free
Install
Beemo

Detects large coordinated raids by fake accounts and bans them. It shares information across more than 100,000 servers, so a raid that hit another server first is blocked on yours before it starts. Setup is almost nothing: invite it and give it permission to ban. Its own site says raid protection is free permanently.

Note

It only does this one thing. It will not stop a single troublemaker or a staff member behaving badly. Those are the two jobs above. There is no real competitor.

Check who is joiningDouble Counter, free
Install
Double Counter

Spots second accounts belonging to banned people, and blocks VPNs, proxies, Tor and virtual machines. It gives a score from zero to one hundred rather than a yes or no, and takes about three seconds. This matters more for you than for most servers: once credits become real vouchers, someone making extra accounts is committing fraud, not just being annoying.

Alternative
Wick verification

If you already pay for Wick, its own verification screen may be enough, and that is one fewer bot. It is weaker at spotting second accounts.

Be careful

This identifies people by their device and network. Tell your members it is running. Start it in warning-only mode before letting it ban automatically, because shared houses and normal VPN users do get flagged.

MusicJockie Music, free
Install
Jockie Music

Four separate free copies can sit in one server, so four voice channels can play different things. It plays from Spotify, Apple Music, Tidal, Deezer, Bandcamp, Vimeo, Mixcloud, direct files, more than 20,000 radio stations, and Twitch streams. A queue holds up to 10,000 tracks. It includes a guess-the-song game. Playing 24 hours a day needs five server boosts.

Important
It cannot play YouTube

This is not a fault. In 2021 Google sent legal notices that shut down Groovy and Rythm completely, and in 2023 forced Hydra to remove music entirely. No large music bot plays YouTube any more. Assume any music bot can disappear, and never make it essential.

Alternative

Chip or Vexera if Jockie stops working. Save the link rather than installing them now.

Activity numbersStatbot, free
Install
Statbot

Shows member and channel activity, and can display numbers as channel names, including clocks and countdowns. Install it early, because it cannot fill in the past. The day you want to compare this year to last year, you needed it a year ago.

Later
Your own page

You will already be saving every event in your database. After step 2 you can show better numbers than any bot, because yours can compare Discord activity against Twitch watch time and credits spent. Statbot fills the gap until then.

Levelsyou build this
You build
Your bot

Levels and credits both come from the same thing: taking part. Two separate systems means two sets of numbers that must be kept in step forever. Use one ledger and one progression.

Until then
Statbot Statroles

Gives roles based on how active someone has been recently, and removes the role when they stop. It is not a level system, so there is nothing to untangle later. Statbot is already installed for the job above.

Welcome messageyou build this
You build
Your bot

Sapphire has no welcome feature, which turns out to help. Your welcome message is where account linking starts, so the link button belongs in the bot that owns identity. One message, one button, straight into job 1.

Also use
Discord Onboarding

Built into server settings. Rules agreement and channel choices. Free, no bot needed.

Automatic replies to keywordsSapphire, then your bot
Use now
Sapphire keyword messages

Already installed. It sends a set message when it sees a word. Enough for common questions.

If you need logic
Carl-bot TagScript, or YAGPDB

Both let you use variables and conditions without hosting anything. YAGPDB goes furthest but takes real effort to learn.

Later
Your bot

Anything that needs to read a balance has to live in your bot anyway. Do not build a general system for making triggers. Build the three specific triggers you actually want.

Credits, shop and rewardsyou build this
You build
Your API and bot

This is the point of the whole project and the part you have already built. No bot can do it, because no bot knows what a minute of watching your stream is worth, or how to send a real gift card.

Considered
UnbelievaBoat

It has a real public interface for reading and changing balances, so you could have used it instead of your own database and written only a connector. Not chosen, because you want full control, and its currency cannot properly represent something worth real money. Worth knowing it exists.

Minigamesyou build this, later
You build
Your bot, step 4

You asked for custom games, so nothing ready-made fits. These pay out in coins only, never credits. See rule 3 in section 7.

Free for now

Jockie's guess-the-song game comes with the music bot and costs nothing extra.

Support ticketsonly if you want them
Options
Ticket Tool, or Tickets

Sapphire has no ticket system, so this needs its own bot. Both are free at normal volume. I have not checked either against their own websites, so confirm the details before relying on them.

Or skip

You have a website with logins. Support requests could be a form there, saving into the same database, with no extra bot.

Scheduled eventsoptional
If useful
Sesh

Shows every event in each member's own time zone, understands times written normally, and collects who is coming. It overlaps with nothing else here.

Or native

Discord Scheduled Events are free and fine if everyone is in one time zone.

Section 10

Which bots not to install

In one line

These are good bots. They are wrong for you because their best features are the ones you are building.

BotWhy not for you
Maki
7 euro per month
You are replacing its levels, economy and statistics. You would pay seven euro a month for features you built yourself. Cancel this one.
Discortics
23 dollars per year
Its two strongest areas are economy and levels, which are yours. Keep it only if you want its application forms.
MEE6Charges per server, and levels is the feature you least need from a bot.
UnbelievaBoatA second currency competing with yours. Have one currency system, not two.
Arcane, Tatsu, AmariLevel bots. Any level system not connected to your credits is a second set of numbers you will regret.
Dank Memer, OwO, MudaeThey bring their own currency and produce very large numbers of messages. If you ever add one, lock it to a single channel and never connect it to your system.
Carl-bot and Sapphire togetherThey share 51 features. Two moderation bots means two sets of logs, and you will stop trusting both. Choose one.
Section 11

What it costs

In one line

Five dollars per month, or zero if you use bleed instead of Wick.

ItemCostNote
Discord AutoModFreeBuilt into Discord
SapphireFreeNo paid version exists
BeemoFreeRaid protection free permanently
Double CounterFreePaid tier optional
Jockie MusicFreeFour copies included
StatbotFreePaid version keeps history longer
Wick5.00 dollarsOr zero, if bleed does this job
Total for bots5.00 dollarsWas 14.52. Your hosting is separate.

Cancelling Maki and letting Discortics expire saves more than Wick costs.

Section 12

The order to build in

In one line

Step 0 takes two hours. Step 1 is the only thing that matters after that. Everything else waits.

These boxes remember what you tick, on this device.

Step 0. Install the bots

About two hours, once, then never again.

Step 1. One complete loop

Finished means: someone watches your stream and ends up holding a real voucher.

Steps 2 to 5do not start these yet

Step 2. Make it real

  • The website shows history and the shop using the same API
  • More rewards, stock counts, refunds
  • Automatic voucher sending, only if doing it by hand annoys you
  • Pay people for events from before they linked

Step 3. Second platform

  • A YouTube bridge for uploads and memberships
  • Reuse job 1 with no changes. This is the reward for building the identity table properly

Step 4. The fun parts

  • Coins, kept completely separate from credits
  • Custom minigames paying out in coins
  • Your own levels, replacing Statroles

Step 5. Minecraft

  • A server plugin sending sessions and milestones to the same events address
  • By this point it is a small job, because the hard parts were solved in step 1
Section 13

Ideas for later

In one line

Real ideas, wrong time. Written here so you can stop holding them in your head.

Bot builder or bot hostMinecraftYouTube bridgeMinigames CoinsAutomatic voucher sendingYour own statistics page Support ticketsMobile appReplacing Sapphire with your own moderation
The bot builder in particular

Building a tool that builds bots is a separate product. It stays interesting forever and finishes nothing. You need one bot, your own, and it is already half written.

Section 14

Where this came from

In one line

Some facts here were checked directly. Some were not. This section says which is which.

Checked on the maker's own website in August 2026

Sapphire, Carl-bot, Jockie Music, Statbot, Wick, Beemo, Double Counter, Maki, Discortics, bleed, ProBot, Dyno, VoiceMaster, Sesh, UnbelievaBoat.

Not checked, so treat with doubt

Ticket Tool, Tickets, Arcane, GiveawayBot, Craig, Zeppelin, Chip, Vexera. These come from memory, which is the method that produced an earlier mistake about Sapphire. Check them before depending on any detail.

A correction

An earlier version of this plan said Sapphire had levels, tickets, economy, music and voice features. It has none of those. It is a moderation bot. Any comparison table built on that earlier description is wrong.