πŸ”€Message Routing

Control where and how each event type sends messages to Discord

The Message Routes page on your RagnaSync dashboard lets you control exactly where each event type goes and how it looks in Discord. Think of routes as rules: "When this event happens, send it to this channel in this format."

You'll find it under Discord > Message Routes in your dashboard navigation.


How It Works

Every event type (item drops, monster kills, refine logs, etc.) gets its own section on the Message Routes page. Each section can have one or more routes that tell RagnaSync where to send that event.

A route has four parts:

Part
What It Does

Format

How the message looks (Log, Embed, Narrate, or Custom)

Channel

Which Discord channel receives the message

Conditions

Optional filters to control which events match

Active/Inactive

Toggle the route on or off without deleting it

circle-info

For most event types, a route is created automatically the first time your game server sends that event. Player Login and Player Logout are the exception β€” since they fire on every connection, you need to add routes manually if you want Discord notifications.


Message Formats

Each route can use a different format. Here's what they look like:

Log Format

Clean, compact monospace lines β€” great for high-volume events.

Rich Embed

Colorful Discord embed cards with structured fields and timestamps. These are easier to scan and look more polished.

Narrate

A natural-language sentence that reads like a story.

Custom Message

Build your own format with {{placeholder}} syntax. When you select Custom Message, a violet template chip appears on the route β€” click it to open the template editor.

The editor gives you:

  • Clickable placeholder chips β€” just click a field name and it gets inserted at your cursor

  • Live preview β€” see how your message will look with sample data as you type

Example template:

Result in Discord:

You can use emoji shortcodes like :gem:, :trophy:, or :warning: β€” they'll automatically convert to real emoji.

circle-info

Each event type has its own set of placeholders. The editor shows all available placeholders for that event type, so you don't need to memorize them.


Multi-Channel Routing

You can send the same event to multiple Discord channels by adding more routes. For example, you might want:

  • Item Drops β†’ #rare-drops channel in Rich Embed format

  • Item Drops β†’ #drop-log channel in Log Format for a compact log

Just click Add Route on the event type and pick a different channel.


Condition Filters

Conditions let you narrow down which events trigger a route. Click the funnel icon on any route to set up filters.

How Conditions Work

Each condition has three parts: a field, an operator, and a value.

Operator
Meaning
Example

=

Equals

mob_name = Poring

!=

Not equals

item_name != Apple

>

Greater than

rate_raw > 500

<

Less than

rate_raw < 100

>=

At least

refine_to >= 10

<=

At most

refine_from <= 3

contains

Contains text

player_name contains Admin

in

In list

mob_id in 1511,1647,1785

Condition Groups (AND/OR Logic)

  • Conditions within the same group use AND logic β€” all must match

  • Separate groups use OR logic β€” any group can match

Example: "Only card drops from MVPs"

  • Group 1: item_name contains Card AND rate_raw <= 100

Example: "Poring OR Drops card"

  • Group 1: mob_name = Poring

  • Group 2: item_name contains Card

circle-info

The available filter fields depend on the event type. The condition editor only shows fields relevant to that event.


Available Filter Fields

Here's what you can filter on for each event type:

Item Drops (Mob, Homunculus, Mercenary)

Field
Description

player_name

Player who got the drop

mob_name

Monster name

mob_id

Monster ID

item_name

Dropped item name

item_id

Dropped item ID

rate_raw

Drop rate as raw value (100 = 1%)

Monster Kills

Field
Description

player_name

Player who got the kill

mob_name

Monster name

mob_id

Monster ID

Command Logs

Field
Description

player_name

Player who used the command

command

The @command used

Refine Logs

Field
Description

player_name

Player who refined

item_name

Item being refined

item_id

Item ID

refine_from

Starting refine level

refine_to

Target refine level

result

Outcome (success/failure)

zeny_cost

Zeny spent

Shop Transactions

Field
Description

player_name

Player involved

type

Transaction type (buy/sell)

Vending Logs

Field
Description

buyer_name

Buyer name

seller_name

Seller name

Container Logs

Field
Description

player_name

Player who opened the container

container_name

Container name

container_id

Container ID

item_name

Item received

item_id

Item ID

amount

Quantity received

Player Login & Logout

Field
Description

player_name

Player name

Population Stats

Field
Description

total

Total players online

active

Active players

vending

Vending players

autotrade

Autotrade players

buyingstore

Buying store players

gm

GMs online

Vending Items

Field
Description

player_name

Seller name

pos

Map location


Example Setups

MVP-Only Drop Channel

Send only MVP card drops to a special announcement channel:

  1. Add a route for Item Drops β†’ #mvp-drops

  2. Set format to Custom Message

  3. Set template: :trophy: {{player_name}} got **{{item_name}}** from {{mob_name}}!

  4. Add condition: rate_raw <= 100

Separate Channels for Success/Failure Refines

Route successful refines to one channel and failures to another:

  1. Route 1: Refine Logs β†’ #refine-success, condition: result = success

  2. Route 2: Refine Logs β†’ #refine-rip, condition: result = failure

High-Value Vending Alerts

Only log transactions from specific sellers:

  1. Route for Vending Logs β†’ #vending-alerts

  2. Add condition: seller_name = YourMerchant

Login/Logout Notifications

Send player connection notifications to a dedicated channel:

  1. Add a route for Player Login β†’ #player-activity

  2. Set format to Custom Message

  3. Set template: :green_circle: {{player_name}} has logged in!

  4. Repeat for Player Logout with: :red_circle: {{player_name}} has logged out.

Last updated