Skip to content

mc-cloud-town/ChatBridgeE

Folders and files

NameName
Last commit message
Last commit date

Latest commit

226909f · Mar 2, 2024
Jan 29, 2024
Jul 22, 2023
Feb 10, 2024
Jul 22, 2023
Feb 7, 2024
Mar 2, 2024
Feb 19, 2024
Jul 31, 2023
May 24, 2023
Aug 4, 2022
Jan 28, 2024
May 28, 2023
Jul 30, 2023
Jun 3, 2023

Repository files navigation

chat-bridgee

開發想法來自 TISUnion/ChatBridge minecraft mcdr chat bridge 實現

Loading
flowchart LR
  subgraph Minecraft Host
    Survival[Minecraft Survival Server]
    Create[Minecraft Create Server]
    Mirror[Minecraft Mirror Server]
    server_else(...)
  end
  MCDR("mcdr-ChatBridgeE-plugin") <--> Survival & Create & Mirror & server_else

  subgraph server plugins
    plugin_discord(discord)
    else_plugin(...)
  end
  plugins <--> plugin_discord & else_plugin

  subgraph cli commands
    cli_reload(plugin reload)
    cli_add(plugin add)
    cli_remove(plugin remove)
    cli_list(plugin list) 
    cli_else(...)
  end
  cli --> cli_reload & cli_add & cli_remove & cli_list & cli_else

  server(ChatBridgeE Server)
  client <--> MCDR
  server <--> client & plugins & cli

⚠️ 警告

由於採用明文傳輸,請於防火牆中關閉 8081 或是您所設定的端口,在傳輸中可能會包含 RCON 密碼/端口 等私密信息,請做好安全防範。

事件說明

以下 用戶端 皆指 MCDR 端,事件名後的代號有以下說明

代號 代表
S 由伺服器發送
C 由用戶端發送
A 由伺服器向全部用戶端發送並排除事件原觸發者

轉發事件 [C-A]

由用戶端發送至伺服器,伺服器進行轉發並呼叫插件中註冊的事件

server_start -> server_start [C-A]

客戶端伺服器啟動中的事件

args: [ctx: Context]

server_startup -> server_startup [C-A]

客戶端伺服器啟動完成的事件

args: [ctx: Context]

server_stop -> server_stop [C-A]

客戶端伺服器關閉的事件

args: [ctx: Context]

player_chat -> player_chat [C-A]

於客戶端伺服器玩家發送的訊息事件

args: [ctx: Context, player_name: str, content: str]

player_joined -> player_joined [C-A]

於客戶端伺服器玩家加入的訊息事件

args: [ctx: Context, player_name: str]

player_left -> player_left [C-A]

於客戶端伺服器玩家退出的訊息事件

args: [ctx: Context, player_name: str]

file_sync -> file_sync [C-A]

檔案同步事件,需搭配 FileEncode 類別,將會把資料編譯成 bytes 以下為生成的數據範例:

offset bytes description
0 1 flag
1 2 path length (n)
3 n path
3+n 4 data length (m)
7+n m data
7+n+m 2 server name length (o)
9+n+m o server name

進行編碼時 -> FileEncode(...args).encode() 進行解碼時 -> FileEncode.decode(<bytes>)

FileEncode 類別分別於:

  • Client -> chatbridgee/utils.py (from chatbridgee.utils import FileEncode)
  • Server -> server/utils/utils.py (from server.utils import FileEncode)

args: [ctx: Context, data: FileEncode]

一對一事件 [S-C]|[C-S]

extra_command -> cmd_callback 額外指令 [S-C]

由伺服器發送至客戶端,客戶端會返回 cmd_callback 事件 目前包含以下事件

  • stats command
    • success

      code: 0

      stats_name: <請求的統計名>

      data: <請求的統計資料>

      total: <統計總計值>

    • unknown stats

      code: 1

    • no stats_helper

      code: 2

ping -> server_pong [C-S]

當有人向伺服器發起 ping 伺服器會向對方發送

error [S]

向用戶端發送錯誤訊息,ex: 登入失敗,重複登入

其它

new_connect [A]

當新的用戶與伺服器連接時呼叫

new_disconnect [A]

當有用戶與伺服器斷開連接時呼叫

gen

pip install mypy
stubgen -p plugins -p server -o types --include-private

參考

  1. discord.py cog load method
  2. carpet-scripts:format function