{ "remotes": [ { "type": "telegram", "id": "Telegram", // this endpoint is identified with "remote:Telegram" "enabled": true, // default: true, if set to false, this remote will be ignored "token": "================TOKEN================", "chat_id": 12345678 // repeat to and from this chat }, { "type": "psmb", // psmb is a special case, since it is not an endpoint "id": "mypsmb", // this stub endpoint is identified with "remote:mypsmb" "enabled": true, // but it creates zero or one or more than one sub "virtual" endpoints "host": "1.onesmp.org", "port": 3456, "subscribe_to": "chat_.+", // psmb subscription pattern // for example: if you have topic chat_1 and chat_2 // then they are identified with "remote:mypsmb:chat_1" and "remote:mypsmb:chat_2" // dispatching messages from "remote:mypsmb" to virtual endpoints // such as "remote:mypsmb:chat_1", is done by psmb stub endpoint "topics": [ // all topics this endpoint can actually "see" "chat_qq", // regexp in "subscribe_to" and action route "to" "chat_wechat" // will only match endpoints declared in this list ] }, { "type": "json-rpc", "id": "rpc", "enabled": true, "listen": ["127.0.0.1", 8008], "methods": { "get": "getMessage", "put": "sendMessage" } } ], "routing": [ // all rules are processed sequentially // a message may match multiple rules and thus may be duplicate in your case // if the message is dropped in an action in one rule, // (the action type is just "drop" and it does not have any argument) // all subsequent rules will NOT see this message { // inbound chat messages (remote -> all servers) "object": "chat_message", // match chat messages "from": "remote:.*", // regexp matching source, // only messages with matched source will be // processed by this rule, otherwise this rule is skipped "actions": [{ "type": "format", "color": "green" }, { // actions run sequentially "type": "route", // route this message to matched destinations "to": "server:.*" // regexp matching destination }] }, { // outbound messages (starting with '#', server -> all remotes) "object": "chat_message", "from": "server:.*", "actions": [{ "type": "filter", // filter the message using given regexp // if the message does not match given pattern, // it won't be passed into subsequent actions "pattern": "#.+" // match all messages starts with char '#' }, { "type": "replace", // replace the message, removing heading '#' "from": "^#(.*)", // capture all chars after the heading '#' "to": "$1" // and make them as the output }, { "type": "route", // send the message to all remotes "to": "remote:.*" }] }, { // cross-server messages (server -> all other servers) "object": "chat_message", "from": "server:.*", "actions": [{ "type": "route", "to": "server:.*", "backflow": false // do not repeat to sender, true by default // since the destination pattern will match the source, // we have to set backflow to false to prevent // players from seeing duplicate messages }] } ] }