คู่มือเว็บไซต์เซิร์ฟ
AI Text
MCSV Guide

เว็บไซต์เซิร์ฟ

เขียนหน้าเว็บของเซิร์ฟเองด้วย HTML หรือ React พร้อมข้อมูลเซิร์ฟสด

ทุกเซิร์ฟมีหน้าเว็บสาธารณะของตัวเองที่ <ซับโดเมน>.mcsv.me — เขียนเองได้เต็มที่ทั้ง HTML/CSS/JS หรือ React (TSX) ทำได้หลายหน้า ตั้ง URL เอง และดึงข้อมูลสดของเซิร์ฟ (จำนวนผู้เล่น สถานะ ที่อยู่เข้าเกม) มาโชว์ได้เลย

เขียนโค้ดเองทั้งหน้า

HTML/CSS/JS ตรง ๆ หรือ React (TSX) ระบบคอมไพล์ให้ตอนบันทึก ไม่ต้องติดตั้งอะไรเอง

หลายหน้า ตั้ง URL เอง

/ หน้าแรก · /rules กติกา · /404 หน้าไม่พบ · แยกไฟล์ /style.css ใช้ร่วมกันได้

ข้อมูลเซิร์ฟสด

ใส่ {{ players }} หรือใช้ useServer() ใน React ระบบเติมค่าจริงให้ทุกครั้งที่มีคนเปิดหน้า

ย้อนกลับได้เสมอ

ทุกครั้งที่บันทึกทับ ระบบเก็บเวอร์ชันเก่าให้ (สูงสุด 200 เวอร์ชันต่อหน้า) กดย้อนได้ทุกอัน
ที่อยู่หน้าเว็บ
<ซับโดเมน>.mcsv.me — ต้องตั้งซับโดเมนที่เมนู โดเมน ก่อน ถึงจะมี URL ให้เปิด
เมนู
หน้าเซิร์ฟ → เว็บไซต์ (/server-detail/<id>/site) · ต้องมีสิทธิ์ settings_edit ถึงจะแก้ได้
ขีดจำกัด
50 หน้า/ไฟล์ ต่อเซิร์ฟ · โค้ดต่อหน้าไม่เกิน 512KB · path ซ้อนได้ไม่เกิน 6 ชั้น

เริ่มยังไง

1ตั้งซับโดเมน2เข้าเมนูเว็บไซต์3เลือกเทมเพลต4แก้โค้ด + พรีวิว5เปิดเว็บ
1

ตั้งซับโดเมนก่อน

เมนู โดเมน → ตั้งซับโดเมนใต้ mcsv.me เช่น myserverหน้าเว็บจะอยู่ที่ myserver.mcsv.me ทันที
2

เลือกเทมเพลตตั้งต้น

เซิร์ฟที่ยังไม่มีหน้าเลย เข้าเมนูเว็บไซต์จะเจอแกลเลอรีเทมเพลตก่อน เลือกแบบที่ชอบแล้วระบบสร้างหน้า/ ให้เลย ทุกเทมเพลตมีทั้งเวอร์ชัน HTML และ React สลับดูได้ก่อนใช้
3

แก้โค้ดในตัวแก้ไข

ช่องซ้าย = รายชื่อหน้า · ช่องกลาง = โค้ด · ช่องขวา = พรีวิวของจริง ลากเส้นคั่นปรับความกว้างได้ และระบบจำค่าที่ปรับไว้ให้
4

เพิ่มหน้า/ไฟล์ตามต้องการ

กดเพิ่มหน้าแล้วตั้ง path เอง — ชื่อที่มีนามสกุล (.css, .js) จะถูกเสิร์ฟเป็นไฟล์ ส่วนชื่อที่ไม่มีนามสกุลคือหน้าเว็บ
5

เปิดเว็บ

สลับสวิตช์ "หน้าเว็บ" ที่แถบบนเป็นเปิด แล้วดูให้ชัวร์ว่าหน้าที่อยากเผยแพร่ติดเครื่องหมายถูกอยู่ (หน้าที่ซ่อนไว้คนนอกเปิดไม่ได้)
กดปุ่ม คู่มือ ในหน้าเว็บไซต์ได้ตลอด — มีสรุปตัวแปร ไลบรารี และตัวอย่างโค้ดอยู่ในแอปเลย ไม่ต้องสลับมาหน้านี้

ตั้งชื่อหน้าและไฟล์

  • / · หน้าแรก — คนเปิดโดเมนแล้วเจออันนี้
  • /rules · /shop/vip · หน้าอื่น ๆ ซ้อนโฟลเดอร์ได้ถึง 6 ชั้น
  • /404 · หน้าที่ขึ้นเมื่อหา URL ไม่เจอ — ทำเองได้ ถ้าไม่ทำระบบมีหน้า 404 มาตรฐานให้
  • /style.css · /script.js · มีนามสกุล = เสิร์ฟเป็นไฟล์ ใช้ร่วมกันหลายหน้าได้
  • กติกาชื่อ · ใช้ได้เฉพาะ a-z 0-9 - _ . และ /· ตัวพิมพ์ใหญ่ถูกแปลงเป็นเล็กให้ · ภาษาไทยใช้ไม่ได้ · path ที่ขึ้นต้นด้วย/_site /_preview /api/ สงวนไว้ให้ระบบ

แยก CSS/JS ออกเป็นไฟล์ — สร้างหน้า /style.css แล้วอ้างจากหน้า HTML:

<link rel="stylesheet" href="/style.css">
<script src="/script.js" defer></script>

ถ้าเขียน React ใส่ import './style.css' ได้เลย ระบบดึงออกมาแปลงเป็น<link> ให้เอง · อยากเขียนโมดูลแยกก็สร้างไฟล์ /util.js แบบ React แล้ว import { x } from '/util.js' จากหน้าอื่น

ใส่ข้อมูลสดของเซิร์ฟ

อย่าพิมพ์จำนวนผู้เล่นหรือไอพีเป็นค่าตายตัว ใช้ตัวแปรแทน ระบบเติมค่าจริงให้ทุกครั้งที่มีคนเปิดหน้า (ใช้ในไฟล์ CSS/JS ได้ด้วย) · ชื่อที่ระบบไม่รู้จักจะถูกทิ้งไว้ตามเดิม จะได้เห็นเองว่าพิมพ์ผิด

<p>ผู้เล่น {{ players }}/{{ max_players }} · ไอพี {{ address }}</p>
ตัวแปรค่าที่ได้
{{ name }}ชื่อเซิร์ฟ
{{ address }}ที่อยู่เข้าเกม (โฮสต์:พอร์ต)
{{ host }}โฮสต์
{{ port }}พอร์ต
{{ status }}running / offline
{{ online }}online / offline
{{ players }}จำนวนผู้เล่นตอนนี้
{{ max_players }}ผู้เล่นสูงสุด
{{ version }}เวอร์ชันเซิร์ฟ
{{ game }}เกม
{{ type }}ชนิดเซิร์ฟ เช่น paper
{{ motd }}MOTD
{{ icon }}URL ไอคอนเซิร์ฟ
ค่าพวกนี้อัปเดตตามจริง ไม่ต้องกดบันทึกใหม่ · ฝั่ง React ใช้ useServer()ซึ่งดึงค่าใหม่ให้เองเป็นระยะขณะเปิดหน้าค้างไว้ (หยุดเองเมื่อผู้ใช้สลับแท็บ)

เขียนแบบ React

เลือกชนิดหน้าเป็น React แล้วเขียน TSX ได้เลย ระบบคอมไพล์ตอนบันทึก · หน้า React ต้องมีexport default function เสมอ

import { useServer } from 'mcsv'
import styled from 'styled-components'

const Big = styled.h1`font-size: 3rem;`

export default function Page() {
  const { server } = useServer()
  return <Big>{server.players}/{server.max_players} กำลังเล่น</Big>
}

ไลบรารีที่ import ได้เลย (มีให้แล้ว ไม่ต้องติดตั้ง):

reactuseState, useEffect, ...
react-dom/clientcreateRoot
mcsvuseServer, getServer, fetchServer — ข้อมูลเซิร์ฟสด
styled-componentsstyled, createGlobalStyle, keyframes
framer-motionอนิเมชัน motion.div, AnimatePresence
axiosเรียก API ภายนอก
lodashฟังก์ชันช่วยทั่วไป
clsxรวม class แบบมีเงื่อนไข
dayjsวันที่/เวลา นับถอยหลัง
canvas-confettiเอฟเฟกต์กระดาษโปรย
markedแปลง Markdown เป็น HTML
  • Tailwind · เปิดสวิตช์ Tailwind ที่แถบบนของหน้านั้น แล้วใช้ class ได้เลย (เปิดแยกเป็นรายหน้า)
  • CSS reset · ระบบใส่ให้แล้ว ไม่ต้องเขียนเอง หน้าจึงไม่มีขอบขาวรอบ ๆ
  • ไม่มี npm · import ได้เฉพาะรายชื่อข้างบน · คอมไพล์ไม่ผ่านก็ยังบันทึกได้ ระบบโชว์ error ไว้ให้แก้ แต่ระหว่างนั้นคนที่เปิดหน้าจะเห็นหน้าแจ้ง error แทนเนื้อหา — ถ้ายังแก้ไม่เสร็จให้กดซ่อนหน้านั้นไว้ก่อน

ตัวช่วย

เทมเพลต

6 แบบ มีทั้ง HTML และ React ใช้แล้วสร้างไฟล์ให้ครบชุด (หน้า + CSS + JS) ของเดิมถูกเก็บเป็นเวอร์ชันไว้

ให้ AI ช่วย

บอกว่าอยากได้หน้าแบบไหน AI เขียน/แก้ไฟล์ให้จริง หน้าจอตัวแก้ไขรีเฟรชเอง ของที่ยังไม่บันทึกจะไม่ถูกทับ

คลังรูป

อัปโหลดรูปเก็บไว้แล้วกดคัดลอก URL ไปใช้ในโค้ดได้เลย

พรีวิวของจริง

ช่องขวาคือผลจริงก่อนเผยแพร่ · ไฟล์ .css/.js พรีวิวผ่านหน้าที่เรียกใช้มัน

กันพลาด

  • ประวัติเวอร์ชัน · ทุกครั้งที่หน้าถูกเขียนทับ (รวมตอน AI แก้หรือใช้เทมเพลต) ระบบเก็บของเดิมไว้ให้ สูงสุด 200 เวอร์ชันต่อหน้า กดปุ่มรูปนาฬิกาเพื่อดูโค้ดเก่าและกดใช้เวอร์ชันนั้น · ย้อนแล้วย้อนกลับได้อีก เพราะระบบเก็บของปัจจุบันไว้ก่อนเสมอ
  • ซ่อนหน้าไว้ก่อน · ปุ่มติ๊กถูกข้างชื่อหน้า = เผยแพร่/ซ่อน · เขียนหน้าใหม่ค้างไว้โดยไม่ให้คนนอกเห็นได้
  • ปิดทั้งเว็บ · สลับสวิตช์ "หน้าเว็บ" เป็นปิด ผู้เยี่ยมชมจะเห็น 404 ทันที เหมาะตอนกำลังรื้อใหญ่
  • ลบหน้า · ต้องกดยืนยันทุกครั้ง และของที่ลบยังตามกลับมาจากประวัติเวอร์ชันได้
เนื้อหาบนหน้าเว็บเป็นความรับผิดชอบของเจ้าของเซิร์ฟ · ระบบมีการตรวจอัตโนมัติเพื่อความปลอดภัยของผู้เล่น ห้ามใช้หลอกเอาข้อมูล/รหัสผ่านของคนอื่น หรือแอบอ้างเป็นบริการอื่น

คำถามที่พบบ่อย

อยากให้คนหาเซิร์ฟเจอด้วย เปิดหน้าเซิร์ฟสาธารณะเพิ่มได้ที่ รายชื่อเซิร์ฟสาธารณะ · ตั้งซับโดเมนที่ โดเมน