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.
@@ -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(icon: string, text: string, config: Config): Promise<string>;
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: 750px">
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(icon, text, config) {
60
+ async function bodyHtml(serverIP, text, config) {
66
61
  const dark = [config.color0, config.color1, config.color2];
67
62
  return `
68
- <div class="container mx-auto pl-20 pr-8 py-4">
69
- <div class="px-6 flex items-center gap-10">
70
- ${icon ? `<div class="flex-shrink-0">
71
- <img src="${icon}" alt="server icon" class="server-icon rounded-lg" />
72
- </div>` : ""}
73
- <div class="flex-grow pl-25">
74
- <div class="text-lg font-bold text-[${dark[1]}]">${text}</div>
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: icon2, mods, ...debugData } = mcdata;
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}</p>`;
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.list && status.players.list.length > 0) {
120
- const playerNames = status.players.list.map((player) => player.name).join(", ");
121
- result += `<p>在线玩家(${status.players.online}/${status.players.max}): ${playerNames}</p>`;
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}): 无法获取</p>`;
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 += `<p>IP: ${originalIP} </p>`;
128
+ result += ` -- ${originalIP} </p>`;
129
+ } else {
130
+ result += `</p>`;
129
131
  }
130
132
  result += "<p>查询失败,服务器离线或不存在</p>";
131
133
  }
132
- if (status.icon && status.icon.startsWith("data:image")) {
133
- icon += status.icon;
134
- }
135
- return { icon, result };
134
+ return { result };
136
135
  } catch (error) {
137
136
  logger.error("获取服务器状态时出错:", error);
138
- return { icon: "", result: "获取服务器状态失败" };
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 { icon, result } = await getStatus(serverName, serverIP, config);
149
- const text = await bodyHtml(icon, result, config);
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 { icon, result } = await getStatus(server2.name, server2.ip, config);
158
- text += await bodyHtml(icon, result, config);
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-mc-serverlist",
3
3
  "description": "查询Minecraft JAVA 版服务器状态的插件, 并生成图片。支持同时查询多个服务器。",
4
- "version": "1.0.0",
4
+ "version": "1.0.1",
5
5
  "main": "lib/index.js",
6
6
  "typings": "lib/index.d.ts",
7
7
  "files": [
package/readme.md CHANGED
@@ -1,9 +1,8 @@
1
1
  # koishi-plugin-mc-serverlist
2
2
 
3
- [![npm](https://img.shields.io/npm/v/@0tytyt0/koishi-plugin-mc-server?style=flat-square)](https://www.npmjs.com/package/@0tytyt0/koishi-plugin-mc-server)
4
-
5
- 自用 Minecraft java 版服务器查询插件,以图片方式输出。支持查询多个服务器。
3
+ [![npm](https://img.shields.io/npm/v/koishi-plugin-mc-serverlist?style=flat-square)](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) 插件修改实现。