koishi-plugin-mc-serverlist 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commands/mcs.d.ts +1 -2
- package/lib/index.js +42 -37
- package/package.json +1 -1
- package/readme.md +2 -3
package/lib/commands/mcs.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { Context } from "koishi";
|
|
2
2
|
import { Config } from '../index';
|
|
3
3
|
export declare function generateHtml(text: string, footer: any, config: Config): Promise<string>;
|
|
4
|
-
export declare function bodyHtml(
|
|
4
|
+
export declare function bodyHtml(serverIP: string, text: string, config: Config): Promise<string>;
|
|
5
5
|
export declare function getStatus(serverName: string, serverIP: string, config: Config): Promise<{
|
|
6
|
-
icon: string;
|
|
7
6
|
result: string;
|
|
8
7
|
}>;
|
|
9
8
|
export declare function mcs(ctx: Context, config: Config): Promise<void>;
|
package/lib/index.js
CHANGED
|
@@ -46,14 +46,9 @@ async function generateHtml(text, footer, config) {
|
|
|
46
46
|
background-color: ${dark[0]};
|
|
47
47
|
color: ${dark[1]};
|
|
48
48
|
}
|
|
49
|
-
.server-icon {
|
|
50
|
-
width: 64px;
|
|
51
|
-
height: 64px;
|
|
52
|
-
object-fit: contain;
|
|
53
|
-
}
|
|
54
49
|
</style>
|
|
55
50
|
</head>
|
|
56
|
-
<body style="width:
|
|
51
|
+
<body style="width: 550px">
|
|
57
52
|
${text}
|
|
58
53
|
<footer class="bg-[${dark[2]}] text-center py-2">
|
|
59
54
|
<p class="text-sm text-[${dark[1]}]">${footer}</p>
|
|
@@ -62,16 +57,19 @@ async function generateHtml(text, footer, config) {
|
|
|
62
57
|
</html>`;
|
|
63
58
|
}
|
|
64
59
|
__name(generateHtml, "generateHtml");
|
|
65
|
-
async function bodyHtml(
|
|
60
|
+
async function bodyHtml(serverIP, text, config) {
|
|
66
61
|
const dark = [config.color0, config.color1, config.color2];
|
|
67
62
|
return `
|
|
68
|
-
<div class="
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
63
|
+
<div class="py-4 px-6">
|
|
64
|
+
<!-- 关键:使用 grid 或 flex 分配空间 -->
|
|
65
|
+
<div class="flex items-center" style="gap: 0;">
|
|
66
|
+
<!-- 左侧固定空间,图标在其中居中 -->
|
|
67
|
+
<div style="width: 96px; display: flex; justify-content: center; flex-shrink: 0;">
|
|
68
|
+
<img src="https://api.mcsrvstat.us/icon/hypixel.net" width="72" height="72" />
|
|
69
|
+
</div>
|
|
70
|
+
<!-- 文字区域占据剩余空间 -->
|
|
71
|
+
<div class="flex-grow" style="padding-left: 24px;">
|
|
72
|
+
<div class="text-lg font-bold text-[#cdd6f4]">${text}</div>
|
|
75
73
|
</div>
|
|
76
74
|
</div>
|
|
77
75
|
</div>`;
|
|
@@ -94,48 +92,49 @@ async function getStatus(serverName, serverIP, config) {
|
|
|
94
92
|
mcdata = await response.json();
|
|
95
93
|
if (config.debug) {
|
|
96
94
|
try {
|
|
97
|
-
const { icon
|
|
95
|
+
const { icon, mods, ...debugData } = mcdata;
|
|
98
96
|
logger.info("查询服务器:", `${originalName}`, `(${originalIP})`);
|
|
99
97
|
logger.info("精简返回数据:", JSON.stringify(debugData, null, 2));
|
|
100
|
-
if (mcdata.icon) {
|
|
101
|
-
logger.info("服务器图标存在");
|
|
102
|
-
}
|
|
103
98
|
} catch (e) {
|
|
104
99
|
logger.info("调试信息时出错:", e);
|
|
105
100
|
}
|
|
106
101
|
}
|
|
107
102
|
const status = mcdata;
|
|
108
103
|
let result = "";
|
|
109
|
-
let icon = "";
|
|
110
104
|
if (mcdata.online) {
|
|
111
|
-
result += `<p>${originalName}
|
|
105
|
+
result += `<p>${originalName}`;
|
|
106
|
+
if (config.showIP) {
|
|
107
|
+
result += ` -- ${originalIP} </p>`;
|
|
108
|
+
} else {
|
|
109
|
+
result += `</p>`;
|
|
110
|
+
}
|
|
112
111
|
if (config.showMotd) {
|
|
113
112
|
result += `<p>${status.motd.html}</p>`;
|
|
114
113
|
}
|
|
115
|
-
if (config.showIP) {
|
|
116
|
-
result += `<p>IP: ${originalIP} </p>`;
|
|
117
|
-
}
|
|
118
114
|
result += `<p>版本: ${status.version}</p>`;
|
|
119
|
-
if (status.players.
|
|
120
|
-
|
|
121
|
-
|
|
115
|
+
if (status.players.online > 0) {
|
|
116
|
+
if (status.players.list && status.players.list.length > 0) {
|
|
117
|
+
const playerNames = status.players.list.map((player) => player.name).join(", ");
|
|
118
|
+
result += `<p>在线玩家(${status.players.online}/${status.players.max}): ${playerNames}</p>`;
|
|
119
|
+
} else {
|
|
120
|
+
result += `<p>在线玩家(${status.players.online}/${status.players.max}): 无法获取</p>`;
|
|
121
|
+
}
|
|
122
122
|
} else {
|
|
123
|
-
result += `<p>在线玩家(${status.players.online}/${status.players.max}):
|
|
123
|
+
result += `<p>在线玩家(${status.players.online}/${status.players.max}): 无人在线</p>`;
|
|
124
124
|
}
|
|
125
125
|
} else {
|
|
126
126
|
result += `<p>${originalName}</p>`;
|
|
127
127
|
if (config.showIP) {
|
|
128
|
-
result +=
|
|
128
|
+
result += ` -- ${originalIP} </p>`;
|
|
129
|
+
} else {
|
|
130
|
+
result += `</p>`;
|
|
129
131
|
}
|
|
130
132
|
result += "<p>查询失败,服务器离线或不存在</p>";
|
|
131
133
|
}
|
|
132
|
-
|
|
133
|
-
icon += status.icon;
|
|
134
|
-
}
|
|
135
|
-
return { icon, result };
|
|
134
|
+
return { result };
|
|
136
135
|
} catch (error) {
|
|
137
136
|
logger.error("获取服务器状态时出错:", error);
|
|
138
|
-
return {
|
|
137
|
+
return { result: "获取服务器状态失败" };
|
|
139
138
|
}
|
|
140
139
|
}
|
|
141
140
|
__name(getStatus, "getStatus");
|
|
@@ -145,21 +144,27 @@ async function mcs(ctx, config) {
|
|
|
145
144
|
if (server) {
|
|
146
145
|
let serverName = "Minecraft Server";
|
|
147
146
|
let serverIP = server;
|
|
148
|
-
let {
|
|
149
|
-
const text = await bodyHtml(
|
|
147
|
+
let { result } = await getStatus(serverName, serverIP, config);
|
|
148
|
+
const text = await bodyHtml(serverIP, result, config);
|
|
150
149
|
const footer = config.footer.replace(/\n/g, "</br>");
|
|
151
150
|
const html = await generateHtml(text, footer, config);
|
|
152
151
|
const image = await ctx.puppeteer.render(html);
|
|
152
|
+
if (config.debug) {
|
|
153
|
+
logger.info("生成的 HTML:", html);
|
|
154
|
+
}
|
|
153
155
|
return image;
|
|
154
156
|
} else {
|
|
155
157
|
let text = "";
|
|
156
158
|
for (const server2 of config.servers) {
|
|
157
|
-
const {
|
|
158
|
-
text += await bodyHtml(
|
|
159
|
+
const { result } = await getStatus(server2.name, server2.ip, config);
|
|
160
|
+
text += await bodyHtml(server2.ip, result, config);
|
|
159
161
|
}
|
|
160
162
|
const footer = config.footer.replace(/\n/g, "</br>");
|
|
161
163
|
const html = await generateHtml(text, footer, config);
|
|
162
164
|
const image = await ctx.puppeteer.render(html);
|
|
165
|
+
if (config.debug) {
|
|
166
|
+
logger.info("生成的 HTML:", html);
|
|
167
|
+
}
|
|
163
168
|
return image;
|
|
164
169
|
}
|
|
165
170
|
} catch (e) {
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
# koishi-plugin-mc-serverlist
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/koishi-plugin-mc-serverlist)
|
|
6
4
|
|
|
5
|
+
自用Minecraft java 版服务器查询插件,以图片方式输出。支持查询多个服务器。
|
|
7
6
|
支持修改图片背景及文字颜色。
|
|
8
7
|
|
|
9
8
|
由 [koishi-plugin-mc-server-status](https://github.com/Kokoro-js/koishi-plugin-mc-server-status) 插件修改实现。
|