gamedig:查询游戏服务器状态(查查你的好友是不是又在偷跑)

加了些显示更多调试信息的代码,刚发包 1.2.2
可以试试升级一下然后再用调试模式查询试试看

3 个赞

直接使用IP查询是正常的
域名查询,新版调试显示为


command options : {"type":"minecraft","debug":true}
game type paresed result : minecraft
server address paresed result : [{"host":"mc.cloudcraft.pro"}]
[minecraft mc.cloudcraft.pro] query error : Error: Failed all 1 attempts
    at QueryRunner.run (/koishi/node_modules/gamedig/lib/QueryRunner.js:96:21)
    at async Gamedig.query (/koishi/node_modules/gamedig/lib/index.js:11:16)
    at async Gamedig.query (/koishi/node_modules/gamedig/lib/index.js:19:16)
    at async Proxy.query (/koishi/node_modules/koishi-plugin-gamedig/lib/service.js:24:20)
    at async /koishi/node_modules/koishi-plugin-gamedig/lib/index.js:55:40
    at async Promise.all (index 0)
    at async _Command. (/koishi/node_modules/koishi-plugin-gamedig/lib/index.js:94:30)
    at async Array. (/koishi/node_modules/@koishijs/core/lib/index.cjs:1332:14)
    at async _Command.execute (/koishi/node_modules/@koishijs/core/lib/index.cjs:1347:22)
    at async /koishi/node_modules/@koishijs/core/lib/index.cjs:2182:22
Attempt #1 - Port=25565 Retry=0:
Error: getaddrinfo ENOTFOUND mc.cloudcraft.pro
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
Error : no any query success

指定端口后是这样的


command options : {"type":"minecraft","debug":true}
game type paresed result : minecraft
server address paresed result : [{"host":"mc.cloudcraft.pro","port":36653}]
[minecraft mc.cloudcraft.pro:36653] query error : Error: Failed all 1 attempts
    at QueryRunner.run (/koishi/node_modules/gamedig/lib/QueryRunner.js:96:21)
    at async Gamedig.query (/koishi/node_modules/gamedig/lib/index.js:11:16)
    at async Gamedig.query (/koishi/node_modules/gamedig/lib/index.js:19:16)
    at async Proxy.query (/koishi/node_modules/koishi-plugin-gamedig/lib/service.js:24:20)
    at async /koishi/node_modules/koishi-plugin-gamedig/lib/index.js:55:40
    at async Promise.all (index 0)
    at async _Command. (/koishi/node_modules/koishi-plugin-gamedig/lib/index.js:94:30)
    at async Array. (/koishi/node_modules/@koishijs/core/lib/index.cjs:1332:14)
    at async _Command.execute (/koishi/node_modules/@koishijs/core/lib/index.cjs:1347:22)
    at async /koishi/node_modules/@koishijs/core/lib/index.cjs:2182:22
Attempt #1 - Port=36653 Retry=0:
Error: getaddrinfo ENOTFOUND mc.cloudcraft.pro
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26)
Error : no any query success

2 个赞

看上去似乎就是 dns 解析的问题
mc 的查询用到的协议我还不太了解,我研究一下怎么进一步排查问题

3 个赞

可以尝试在服务器上运行以下命令查看 SRV记录 是否解析正常

dig SRV _minecraft._tcp.mc.cloudcraft.pro

如果正常的话应该会包含以下输出

...

;; ANSWER SECTION:
_minecraft._tcp.mc.cloudcraft.pro. 3600 IN SRV  0 0 36653 mc32.rhymc.com.

...

如果不一样的话需要更改一下dns服务器

3 个赞

除了3600显示的是3383以外都是一样的

2 个赞

一眼使用 Docker 导致的,你刚提问我就在猜测会不会是这个问题了

1 个赞

使用 Docker 导致的问题就搜 Docker 解决吧,Koishi 遇到 Docker 导致的这个问题已经不下 50 人了

1 个赞

怎么解决(

2 个赞

我还真没解决过,我遇到十几个人有这样的问题都是过了两天自己说好了,不知道怎么解决的

1 个赞

有可能在另一个插件 catch 到这个错误吗,我想处理一下(

4 个赞

过了一天没好,再等一天(

2 个赞

个人认为应该还是 docker 的 dns 问题。
要不尝试用以下命令检查宿主主机的docker dns配置是否正常

docker run -it --rm alpine nslookup -type=srv _minecraft._tcp.mc.cloudcraft.pro

应该会得到类似以下结果

tianzi@sh ~> docker run -it --rm alpine nslookup -type=srv _minecraft._tcp.mc.cloudcraft.pro 
Server:         183.60.83.19
Address:        183.60.83.19:53

Non-authoritative answer:
_minecraft._tcp.mc.cloudcraft.pro       service = 0 0 36653 mc32.rhymc.com
3 个赞

成疑案了,游戏和我的本地koishi都能正常访问这个域名,但任何dns都解析不了这个域名,nslookup也查不到,ping也ping不到,但这个域名在游戏里也能进,插件也能查询到,太怪了

2 个赞

mc.cloudcraft.pro 这个域名本来就没有任何 DNS 记录

MC客户端和 gamedig插件都是先解析 _minecraft._tcp.mc.cloudcraft.pro 这条 SRV 记录 得到真实的服务器地址 mc32.rhymc.com:36653,然后再连接到服务器(查询服务器数据)的

3 个赞

srv也查过了,没有

2 个赞

意思是 mc 客户端会自动在域名前面加 _minecraft._tcp. 组成 _minecraft._tcp.mc.cloudcraft.pro 这个域名然后解析它的 SRV记录

3 个赞

目前只有这一个域名会有问题,就算了罢(
提个建议,玩家那一项,join之前先把空白的名字去掉,不然获取不到名字的话就会变成这样


要是能设置玩家显示数量的上限就更好了(

3 个赞