rykit-v3
Version:
A powerful Node.js utility library for Minecraft server status, color manipulation, encryption, file operations, and more
107 lines (96 loc) • 3.14 kB
JavaScript
class MinecraftUtils {
constructor() {
this.API_BASE = "https://web-lab.xyz/api";
}
// Sunucu durumunu çekme
async getServerStatus(ip, type = "java") {
try {
const url =
type.toLowerCase() === "bedrock"
? `${this.API_BASE}/status/${ip}?bedrock=true`
: `${this.API_BASE}/status/${ip}`;
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
// API yanıtını standartlaştır
return {
online: true, // API her zaman online sunucuları döndürüyor
players: {
online: data.players?.online || 0,
max: data.players?.max || 0,
},
version: data.version?.name || data.version || "Unknown",
motd: data.motd?.clean || data.motd || "",
ping: data.ping || 0,
};
} catch (error) {
throw new Error(`Failed to get server status: ${error.message}`);
}
}
// Sunucu ikonunu çekme
async getServerIcon(ip) {
try {
const url = `${this.API_BASE}/icon/dynamic?address=${ip}`;
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// Buffer olarak döndür
return await response.arrayBuffer();
} catch (error) {
throw new Error(`Failed to get server icon: ${error.message}`);
}
}
// MOTD banner'ını çekme
async getServerBanner(ip) {
try {
const url = `${this.API_BASE}/banner/${ip}`;
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
// Buffer olarak döndür
return await response.arrayBuffer();
} catch (error) {
throw new Error(`Failed to get server banner: ${error.message}`);
}
}
// Sunucu bilgilerini tam olarak çekme
async getServerInfo(ip, type = "java") {
try {
const [status, iconBuffer, bannerBuffer] = await Promise.all([
this.getServerStatus(ip, type),
this.getServerIcon(ip).catch(() => null),
this.getServerBanner(ip).catch(() => null),
]);
// Buffer'ları base64'e çevir
const icon = iconBuffer ? this.arrayBufferToBase64(iconBuffer) : null;
const banner = bannerBuffer
? this.arrayBufferToBase64(bannerBuffer)
: null;
return {
status,
icon,
banner,
type,
timestamp: new Date().toISOString(),
};
} catch (error) {
throw new Error(`Failed to get server info: ${error.message}`);
}
}
// ArrayBuffer'ı base64'e çevirme
arrayBufferToBase64(buffer) {
const bytes = new Uint8Array(buffer);
const binary = bytes.reduce(
(acc, byte) => acc + String.fromCharCode(byte),
""
);
return `data:image/png;base64,${Buffer.from(binary, "binary").toString(
"base64"
)}`;
}
}
export default MinecraftUtils;