diff options
Diffstat (limited to 'example/messaging.jsonc')
-rw-r--r-- | example/messaging.jsonc | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/example/messaging.jsonc b/example/messaging.jsonc new file mode 100644 index 0000000..649d7ee --- /dev/null +++ b/example/messaging.jsonc @@ -0,0 +1,89 @@ +{ + "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 + }] + } + ] +}
\ No newline at end of file |