SNTalkBot

บอต TeamTalk สำหรับเล่นสื่อและจัดการเซิร์ฟเวอร์บน Linux/Docker

ดาวน์โหลดรุ่นปัจจุบัน

ตรวจสอบความถูกต้องของไฟล์ (ไม่จำเป็นสำหรับการติดตั้งทั่วไป)

SNTalkBot SHA-256: f672b0f22ff17c0353eb3936e44846c89f39059237652e08134581bbb695820b — ไฟล์ .sha256

TTUHelper SHA-256: 0a90ae8b1a9b30c73a3f1c2514a3872eb993698511da28e77e33f1dc0f4cb8b4 — ไฟล์ .sha256

Web Manager SHA-256: ddb3b3512d136f285275c092b3d1f22f8008b9d3a71d284ef3e2ea19b6498246 — ไฟล์ .sha256

รุ่นและขนาดไฟล์ดาวน์โหลด

ขนาด ZIP จริง; เก็บไฟล์ดาวน์โหลดไม่เกิน 2 รุ่นต่อโปรเจกต์ และคงประวัติการเปลี่ยนแปลงเดิม

Download size แต่ละเวอร์ชัน
โปรเจกต์และเวอร์ชันขนาดไฟล์
TTUHelper 1.5.10102,617 bytes (0.10 MiB)
SNTalkBot-Web-Manager 1.1.29185,123 bytes (0.18 MiB)
SNTalkBot-Web-Manager 1.1.26173,330 bytes (0.17 MiB)
SNTalkBot 5.1.44590,032 bytes (0.56 MiB)
SNTalkBot 5.1.43586,850 bytes (0.56 MiB)
SNTalkBot 5.1.41 (เก็บเฉพาะประวัติ)578,791 bytes (0.55 MiB)
SNTalkBot 5.1.40 (เก็บเฉพาะประวัติ)576,089 bytes (0.55 MiB)
SNTalkBot 5.1.39 (เก็บเฉพาะประวัติ)574,333 bytes (0.55 MiB)
SNTalkBot 5.1.38 (เก็บเฉพาะประวัติ)571,357 bytes (0.54 MiB)
SNTalkBot 5.1.37 (เก็บเฉพาะประวัติ)568,735 bytes (0.54 MiB)
SNTalkBot 5.1.36 (เก็บเฉพาะประวัติ)562,231 bytes (0.54 MiB)
SNTalkBot 5.1.35 (เก็บเฉพาะประวัติ)558,390 bytes (0.53 MiB)
SNTalkBot 5.1.34 (เก็บเฉพาะประวัติ)551,811 bytes (0.53 MiB)
SNTalkBot 5.1.31 (เก็บเฉพาะประวัติ)539,122 bytes (0.51 MiB)
SNTalkBot 5.1.28 (เก็บเฉพาะประวัติ)535,904 bytes (0.51 MiB)
SNTalkBot 5.1.27 (เก็บเฉพาะประวัติ)535,196 bytes (0.51 MiB)

โปรเจกต์สำหรับผู้ใช้

  1. SNTalkBot: ตัวบอตหลัก Full / Player / Server Manager พร้อมระบบเล่นสื่อ คิว คำสั่งจัดการ และ Realtime API ภายใน
  2. TTUHelper: ตัวช่วยติดตั้งและจัดการหลาย instance บน Linux/Docker รวม update, migration, cookies, resource limits และ delete พร้อม backup
  3. SNTalkBot Web Manager: เว็บ self-hosted สำหรับจัดการ SNTalkBot/TTUHelper ผ่านเบราว์เซอร์ พร้อมบัญชีผู้ใช้ ownership และ dashboard realtime

ติดตั้ง SNTalkBot + TTUHelper เป็นชุดหลัก และติดตั้ง Web Manager เพิ่มเมื่อคุณต้องการจัดการระบบผ่านเว็บ

ฟีเจอร์หลัก

คำสั่ง SNTalkBot — 121 คำสั่ง

แบ่งเป็น 3 กลุ่ม: Common 21 คำสั่ง, Player 51 คำสั่ง และ Server Manager 49 คำสั่ง

ถ้ามีคำสั่งย่อ จะแสดงข้างชื่อคำสั่งเพียงครั้งเดียว ป้าย [ผู้ดูแล] หมายถึงต้องมีสิทธิ์ผู้ดูแล

คู่มือผู้ใช้ SNTalkBot — กางดูวิธีพิมพ์คำสั่งและโหมด

พิมพ์คำสั่งอย่างไร

ทั้งข้อความส่วนตัวและ Channel/Broadcast พิมพ์ตรง ๆ เช่น h, p เพลง, ap on, rs ได้เหมือนกันโดยไม่ต้องใส่ /; รูปแบบ /h และ /p เพลง ยังรับได้เพื่อ compatibility

ic on|off|status (Manager/Full) เปิด/ปิดการดักข้อความจากผู้ใช้ในทุก Channel ของเซิร์ฟเวอร์ ส่วน ci off ปิดเฉพาะ command/TTS/Player/translation ที่ตอบสนองต่อ Channel แต่ moderation ที่เปิดด้วย filter on ยังตรวจข้อความที่บอตได้รับอยู่ และ cm off ปิดเฉพาะข้อความ Player ที่ประกาศลง Channel

ถ้าต้องการให้บอตเฝ้าคำหยาบทั่วเซิร์ฟเวอร์แต่ไม่ตอบคำสั่งปกติใน Channel ให้ใช้ ic on, filter on, ci off; คำสั่งชุดนี้พิมพ์รูปแบบเดียวกันได้ทั้ง Private และ Channel

คำสั่งย่อและ on/off

h = help
rs = restart
sd = shutdown
w = weather
wb = welcomebroadcast
ap = autoplay
ch = channel
pf = playfav
c = select (เช่น c 56)
ci = channelinput
ic = intercept

คำสั่งย่อรับค่าต่อท้ายเหมือนคำสั่งหลัก เช่น ap on, ap off, wb on, wb off

แต่ละโหมดเห็นคำสั่งอะไร

แยกหน้าที่จริง: Player Bot = Common + Player เท่านั้น, Server Manager = Common + Server Manager เท่านั้น และ Full Bot เท่านั้นที่รวมทั้งสองฝ่าย คำสั่งย่อก็ลงทะเบียนตาม role เดียวกัน

  • Common — 21 คำสั่ง: ใช้ได้ทุกโหมด
  • Player — 51 คำสั่ง: เครื่องเล่น เพลง คิว รายการโปรด การดาวน์โหลด และ Player TTS
  • Server Manager — 49 คำสั่ง: ผู้ใช้ ห้อง บัญชี การประกาศ การแปล TTS และงานดูแลเซิร์ฟเวอร์
  • Full Bot: รวม Common + Player + Server Manager จึงใช้คำสั่งหลักได้ครบ 121 คำสั่ง

h เป็นคำสั่งย่อของ help และใช้ได้เหมือนกันทั้ง Private และ Channel/Broadcast เมื่อ Channel Input เปิดอยู่ โดยจะแสดงเฉพาะคำสั่งที่มีจริงในโหมดของบอตนั้น ถ้าข้อความ Private ไม่ตรงกับคำสั่งหรือ workflow ที่รองรับ บอตจะตอบให้พิมพ์ h เพื่อดูวิธีใช้ ส่วนบทสนทนาธรรมดาใน Channel จะไม่โดน fallback นี้

รายงานปัญหา

dr <ข้อความ> ใช้แจ้งบั๊ก รายงานปัญหา ขอฟีเจอร์ หรือเสนอแนะฟีเจอร์โดยตรงถึงผู้พัฒนา SNTalkBot ส่วน report <ข้อความ> ใช้ได้ทุกโหมดสำหรับส่งข้อความหาแอดมิน TeamTalk ที่ออนไลน์

Moderation และคำหยาบภาษาไทย

filter on|off|status เป็น master switch ของตัวกรองคำทุกภาษา โดย blacklist.txt รวมภาษาอังกฤษ อาหรับ ไทย และรายการเดิมไว้ฝ่ายเดียวกันแล้ว; OFF ปิดทั้งข้อความ ชื่อผู้ใช้ และชื่อ/หัวข้อ Channel พร้อมกัน และ ON เปิดกลับทั้งหมด พร้อม matcher ลด false positive ของคำสั้น

ข้อมูลผู้พัฒนา

about หรือคำสั่งย่อ a แสดงเวอร์ชัน ประเภทบอต และข้อมูลติดต่อผู้พัฒนา nuttawat จาก SN Family พร้อมบอกให้ใช้ dr <ข้อความของคุณ> สำหรับแจ้งบั๊ก/ขอฟีเจอร์ โดยไม่พาไปหน้า support URL ที่ไม่มีแบบฟอร์ม

สถานะของบอต

สถานะเริ่มต้นระบุประเภท Player / Server Manager / Full และบอกสั้นว่า พิมพ์ h เพื่อดูวิธีใช้ ถ้าตั้งข้อความเองด้วย cs <ข้อความ> จะใช้ข้อความนั้น และ cs auto ใช้กลับสู่สถานะตามประเภทบอต

Common — 21 คำสั่ง
about ย่อ: a
แสดงเวอร์ชัน ประเภทบอต สภาพแวดล้อม ข้อมูลติดต่อ และวิธีใช้ dr สำหรับแจ้งบั๊ก/ขอฟีเจอร์
admins ย่อ: ad
ดูรายชื่อผู้ดูแลที่ออนไลน์อยู่
channelinput on|off|status ย่อ: ci
เฉพาะผู้ดูแล: เปิด ปิด หรือดูการตอบสนองปกติต่อข้อความ Channel; เมื่อปิด คำสั่ง/TTS/Player/translation จาก Channel หยุด แต่ moderation/กรองคำหยาบยังทำงาน
dr <message>
แจ้งบั๊ก รายงานปัญหา ขอฟีเจอร์เพิ่มเติม หรือเสนอแนะฟีเจอร์โดยตรงถึงผู้พัฒนา SNTalkBot
gcid [channel path] ย่อ: cid
แสดง Channel ID ของ TeamTalk สำหรับห้องปัจจุบันหรือพาธห้องที่ระบุ
help [command] ย่อ: h
แสดงรายการคำสั่ง โดยส่งหนึ่งคำสั่งต่อหนึ่งข้อความ TeamTalk ใช้: help หรือ help คำสั่ง
myinfo ย่อ: mi
แสดงข้อมูลบัญชี/เซสชัน TeamTalk ของคุณ
restart ย่อ: rs
เฉพาะผู้ดูแล: รีสตาร์ตบอทผ่านลูปตัวเรียกหลักโดยไม่ต้องเปิดโปรแกรมใหม่ด้วยตนเอง
search ย่อ: sr
ค้นหา Wikipedia และรับบทสรุป วิธีใช้: search <คำค้นหา>
status
แสดงแดชบอร์ดสถานะตามประเภทบอตในคำสั่งเดียว: จำนวนผู้ใช้/กิจกรรม TeamTalk; Player แสดงเพลง คิว M1-M3 Autoplay และแหล่ง Cookies; ผู้ดูแล Manager/Full เห็น filter/ci/ic/lock/welcome เพิ่มเติม
report <message> ย่อ: rep
ส่งคำขอความช่วยเหลือหรือรายงานปัญหาไปยังผู้ดูแลที่ออนไลน์
shutdown ย่อ: sd
เฉพาะผู้ดูแล: ปิดบอทอย่างถูกต้องและปลอดภัย
lock
สำหรับผู้ดูแลเท่านั้น: สลับการล็อกคำสั่งให้เฉพาะผู้ดูแลใช้ได้
blockcmd [+|-]<command> ย่อ: bc
สำหรับผู้ดูแลเท่านั้น: บล็อกหรือยกเลิกการบล็อกคำสั่งสำหรับผู้ใช้ทั่วไป หากไม่ระบุคำสั่งจะแสดงรายการคำสั่งที่ถูกบล็อก
language <code> ย่อ: lg
สำหรับผู้ดูแลเท่านั้น: บันทึกรหัสภาษาของบอต แล้วรีสตาร์ตบอตเพื่อโหลดทุกโมดูลด้วยภาษาใหม่
clearlog ย่อ: cl
เฉพาะผู้ดูแล: ล้างไฟล์ข้อผิดพลาด/บันทึกของบอท
cn <new name>
สำหรับผู้ดูแลเท่านั้น: เปลี่ยนชื่อของบอท
cs <status>
สำหรับผู้ดูแลเท่านั้น: เปลี่ยนข้อความสถานะ; ใช้ cs auto เพื่อกลับสู่สถานะตามประเภทบอต
cg mode
สำหรับผู้ดูแลเท่านั้น: เปลี่ยนเพศของบอท โหมดที่ใช้ได้: m สำหรับชาย, f สำหรับหญิง, n สำหรับเพศกลาง
save ย่อ: sc
สำหรับผู้ดูแลเท่านั้น: บันทึกการตั้งค่าในกรณีที่คุณเปลี่ยนชื่อบอทและต้องการบันทึก
voicetx on|off ย่อ: vt
สำหรับผู้ดูแลเท่านั้น: เปิดหรือปิดการส่งเสียงของ TeamTalk ด้วยตนเอง
Player — 51 คำสั่ง
+ ย่อ: sf
เดินหน้า 10 วินาที
, [queue_position]
โหมดปกติใช้ `,` เพื่อเลื่อนไปผลค้นหาก่อนหน้า; Queue Mode ใช้ `,` กับรายการค้นหาล่าสุด หรือระบุคิว เช่น `, 34` เพื่อเปลี่ยนผลค้นหาของคิว 34 โดยไม่กระทบคิวค้นหาของคนอื่น
- ย่อ: sb
ย้อนกลับ 10 วินาที
. [queue_position]
โหมดปกติใช้ `.` เพื่อเลื่อนไปผลค้นหาถัดไป; Queue Mode ใช้ `.` กับรายการค้นหาล่าสุด หรือระบุคิว เช่น `. 34` เพื่อเปลี่ยนผลค้นหาของคิว 34 โดยไม่กระทบคิวค้นหาของคนอื่น
3d on|off
เปิดหรือปิดฟิลเตอร์ขยายมิติสเตอริโอ/3D ชุดที่ 1
3d2 on|off
เปิดหรือปิดฟิลเตอร์ Extra Stereo เพิ่มมิติสเตอริโอชุดที่ 2
autoplay on|off ย่อ: ap
โหมดปกติให้เล่นเพลง Related Radio ต่ออัตโนมัติ; Playlist/Channel/Favorites ที่เปิดโดยตรงยังเล่นตามลำดับเดิม
b
โหมดคิว ย้อนกลับเพลงที่เพิ่งเล่นจากประวัติคิว; โหมดปกติ ย้อนกลับในประวัติ Related Radio
bass on|off
เปิดหรือปิดการเพิ่มเสียงเบสสำหรับการเล่นเพลง
cc
เฉพาะผู้ดูแล: ล้างไฟล์ดาวน์โหลด/แคชสื่อ
channel ย่อ: ch
ขณะเล่นวิดีโอ ให้โหลดช่องของวิดีโอปัจจุบันและเล่นวิดีโอแรกของช่อง
cm [on|off|status]
เฉพาะผู้ดูแล: เปิด ปิด หรือดูสถานะข้อความของ Player ที่ส่งไปใน Channel เช่น ใครเปิดเพลงหรือเพิ่มอะไรเข้าคิว; ไม่ใส่ค่าเพื่อสลับสถานะ
cq
ล้างคิวทั้งหมด
csize ย่อ: cz
เฉพาะผู้ดูแล: แสดงขนาดแคชสื่อ
d
แสดงเวลาทั้งหมด เวลาที่เล่นไป และเวลาที่เหลือของเพลงปัจจุบัน
delfav ย่อ: df
ล้างรายการโปรด
dl <link>
ดาวน์โหลดเสียงด้วย yt-dlp แล้วอัปโหลดไปยังห้อง TeamTalk ปัจจุบัน
dq <index|ชื่อเพลง>
ลบเพียง 1 รายการออกจากคิวตามลำดับหรือชื่อเพลง
f
เปิดหรือปิดเอฟเฟกต์เฟดของเครื่องเล่น
fav
บันทึกเพลงปัจจุบันลงรายการโปรด
favorites ย่อ: fl
แสดงเพลงโปรดที่บันทึกไว้ โดยส่งหนึ่งเพลงต่อหนึ่งข้อความ
hide
เปิดหรือปิดการซ่อนชื่อเพลงที่กำลังเล่นจากสถานะของบอท
l ย่อ: gl
ดู URL ของเพลงที่กำลังเล่น
m
แสดงโหมด TT Player ที่ใช้อยู่ในขณะนี้
m1
ตั้งโหมด M1 Single: หยุดหลังรายการปัจจุบันเมื่อไม่ได้เล่นจากคิว
m2
ตั้งโหมด M2 Auto/Next: เล่นรายการถัดไปโดยอัตโนมัติ
m3
ตั้งโหมด M3 Repeat: เล่นเพลงปัจจุบันซ้ำเมื่อไม่ได้เล่นจากคิว
n
โหมดคิว เล่นรายการถัดไปในคิว; โหมดปกติ เล่นเพลง Related Radio ถัดไปที่ใกล้เคียงจาก YouTube/YouTube Music
p <query>
ค้นหาและเล่นหรือเพิ่มสื่อจาก YouTube เข้าคิว
pg
แสดงข้อมูลและความคืบหน้าของเพลงปัจจุบัน
playfav ย่อ: pf
เล่นหรือเพิ่มเพลงโปรดทั้งหมดเข้าคิว
pm <query>
ค้นหาและเล่นหรือเพิ่มเพลงจาก YouTube Music เข้าคิว
pp <playlist_link>
ต่อ YouTube/YouTube Music playlist ชุดที่ 2, 3, ... โดยไม่หยุดเพลงปัจจุบัน; Queue Mode จะเพิ่มทั้ง playlist ต่อท้าย FIFO
ptts [on|off|status]
สำหรับผู้ดูแล: เปิด/ปิดหรือดูสถานะ TTS ประกาศเพลงและคิวของ Player; ใช้ tracks หรือ queue เพื่อแยกควบคุมได้
pttsmode microsoft|google ย่อ: ptm
สำหรับผู้ดูแล: เลือกเสียง Microsoft หรือ Google สำหรับเสียงประกาศ Player
pttsrate <-100..100> ย่อ: ptr
สำหรับผู้ดูแล: ตั้งอัตราความเร็วเสียงประกาศ Player เมื่อใช้ Microsoft
pttsspeed <0.25..4.0> ย่อ: pts
สำหรับผู้ดูแล: ตั้งความเร็วเสียงประกาศ Player ในโหมด Google
pvoice <voice_or_language> ย่อ: pvo
สำหรับผู้ดูแล: เลือกเสียงหรือภาษาของเสียงประกาศ Player
pvoices [langcode] ย่อ: pvl
แสดงรายการเสียงหรือภาษาที่เลือกใช้ได้สำหรับ Player
q on|off
เปิดหรือปิดระบบคิว
qc
ตรวจสอบตำแหน่งปัจจุบันในคิว
ql [page]
แสดงคิวแบบแบ่งหน้าละ 50 รายการเพื่อไม่ให้ TeamTalk/โปรแกรมอ่านหน้าจอค้าง; ไม่ใส่เลขเพื่อเปิดหน้าที่มีคิวปัจจุบัน และจำนวนคิวจริงไม่มีเพดานระดับแอป
r
แสดงเพลงที่เล่นล่าสุด
s
หยุดการเล่นเท่านั้น โดยเก็บคิว เพลย์ลิสต์ และรายการปัจจุบันไว้; ใช้ p เปล่าเพื่อเริ่มรายการเดิมใหม่จากต้น และใช้ cq เมื่อต้องการล้างคิว
select <index> ย่อ: c
เล่นรายการลำดับที่ระบุจาก Queue หรือ playlist/session เช่น c 10; Queue จะข้ามข้อก่อนหน้าและเล่นต่อข้อ 11 ส่วนผลค้นหาใช้ . และ ,
shuffle ย่อ: sh
สุ่มเฉพาะเพลงในคิวที่ยังไม่ได้เล่น
sp <speed>
ตั้งค่าความเร็วในการเล่นเพลง
t <time>
เลื่อนไปยังเวลาที่ระบุ เช่น 1:30
u <link>
เล่นหรือเพิ่มสื่อจาก URL เข้าคิว
v <volume>
ตั้งระดับเสียงเครื่องเล่นได้ไม่เกินค่าสูงสุดที่กำหนดไว้
x
พักหรือเล่นต่อ
Server Manager — 49 คำสั่ง
account ย่อ: ac
เริ่มขั้นตอนขอสร้างบัญชีผ่านข้อความส่วนตัว
accounts on|off ย่อ: acs
สำหรับผู้ดูแลเท่านั้น: เปิดหรือปิดระบบขอสร้างบัญชี
bm message
สำหรับผู้ดูแลเท่านั้น: ส่งข้อความประกาศไปยังเซิร์ฟเวอร์
clear argument
สำหรับผู้ดูแลเท่านั้น: ล้างการแบนหรือเตะตามระยะเวลาสำหรับผู้ใช้ที่ระบุ หากส่งโดยไม่มีอาร์กิวเมนต์: จะล้างการแบนและเตะตามระยะเวลาทั้งหมด
db name duration
สำหรับผู้ดูแลเท่านั้น: แบนใครบางคนด้วยที่อยู่ IP ตามระยะเวลาที่กำหนด
dk name duration
สำหรับผู้ดูแลเท่านั้น: เตะใครบางคนตามระยะเวลาที่กำหนด
events [1-25]
เฉพาะผู้ดูแล Manager/Full: แสดง Event ล่าสุดจาก TeamTalk และการใช้คำสั่งผู้ดูแลจากวงแหวนบันทึกในหน่วยความจำ โดยไม่เก็บ argument รหัสผ่าน token หรือข้อความลับ
exec
สำหรับผู้ดูแลเท่านั้น. รันคำสั่งบนเซิร์ฟเวอร์ผ่าน SSH (ต้องได้รับอนุญาต) วิธีใช้: exec [คำสั่ง]
filter on|off|status ย่อ: ft
เฉพาะผู้ดูแล: master switch เปิด ปิด หรือดูการกรองคำจาก blacklist.txt ชุดเดียวทุกภาษา; ทำงานก่อน ci
get_voices langcode ย่อ: gv
แสดงรายการเสียงหรือภาษาที่เลือกใช้ได้ตามโหมด TTS
globalbroadcast on|off|status|interval <minutes>|tts on|off ย่อ: gb
เฉพาะ Manager/Full: ควบคุม Global Broadcast ส่วนกลาง ตั้งช่วง 1-10080 นาที หรือเปิด/ปิด TTS ของข้อความชุดเดียวกัน เช่น `gb interval 30`, `gb tts on`; ค่าเริ่มต้นปิด
intercept on|off|status ย่อ: ic
เฉพาะผู้ดูแล Manager/Full: เปิด ปิด หรือดูสถานะการดักข้อความจากผู้ใช้ในทุก Channel ของเซิร์ฟเวอร์ เพื่อ moderation ห้องที่บอตไม่ได้อยู่
jail <name>
สำหรับผู้ดูแลหรือผู้ได้รับอนุญาต: เพิ่ม username ในรายชื่อห้องขังและย้ายผู้ใช้นั้นไปห้องขัง โดยใช้ username ไม่ใช่ nickname
jails
สำหรับผู้ดูแลเท่านั้น: ดูรายชื่อผู้ใช้ที่อยู่ในห้องขัง
join <channel> ย่อ: j
เฉพาะผู้ดูแล: ย้ายบอทไปยังห้องที่ระบุ
k <nickname>
เฉพาะผู้ดูแล: เตะผู้ใช้ออกจากห้องปัจจุบัน
ks <nickname>
เฉพาะผู้ดูแล: เตะผู้ใช้ออกจากเซิร์ฟเวอร์
ld
เปิดหรือปิดการตรวจจับภาษา
messages ย่อ: msgs
แสดงข้อความออฟไลน์ที่คุณส่งไว้และยังรอส่งถึงผู้รับ
moveall <channel> ย่อ: ma
เฉพาะผู้ดูแล: ย้ายผู้ใช้ไปยังห้องที่ระบุ
msg <username> <message>
ส่งข้อความส่วนตัวถึงผู้ใช้
new <username> <password> [rights]
เฉพาะผู้ดูแล: สร้างบัญชีผู้ใช้ TeamTalk
noname ย่อ: nn
เฉพาะผู้ดูแล: เปิดหรือปิดการจัดการผู้ใช้ที่ใช้ชื่อ NoName โดยอัตโนมัติ
notify <nickname> <telegram_chat_id> ย่อ: nt
ส่งการแจ้งเตือนทาง Telegram เมื่อชื่อเล่นที่ระบุเข้าสู่ระบบ
pitch value
ตั้ง Pitch ของเสียง (เฉพาะโหมด Microsoft) ค่า -100 ถึง 100
private <name> ย่อ: prv
ย้ายคุณกับผู้ใช้อีกคนไปยังห้องส่วนตัวที่ซ่อนและจำกัด 2 คน ห้องจะถูกลบเมื่อผู้ใช้ทั้งสองออกจากเซิร์ฟเวอร์
pt
เปิดหรือปิดโหมดแปลส่วนตัว วิธีใช้: pt <ภาษาต้นทาง> <ภาษาเป้าหมาย>
rate value
ตั้งอัตราความเร็วเสียง (เฉพาะโหมด Microsoft) ค่า -100 ถึง 100
reboot ย่อ: rbt
สำหรับผู้ดูแลเท่านั้น. รีบูตเซิร์ฟเวอร์ (ต้องได้รับอนุญาต)
say
ให้บอทพูดข้อความที่กำหนด วิธีใช้: say <ข้อความ>
speed value
ตั้งความเร็วเสียง (เฉพาะโหมด Google TTS) ค่า 0.25 ถึง 4.0
st
สำหรับผู้ดูแลเท่านั้น: หยุดเสียงพูดที่กำลังเล่น
tr
เปิดหรือปิดการแปลข้อความในห้องอัตโนมัติ วิธีใช้: tr <source_lang> <target_lang>
tts on|off
สำหรับผู้ดูแลเท่านั้น: เปิดหรือปิด TTS สำหรับทุกคน
ttsmode microsoft|google ย่อ: tm
เลือกเสียง TTS ระหว่าง Microsoft หรือ Google
udb name duration
สำหรับผู้ดูแลเท่านั้น: แบนชื่อผู้ใช้ตามระยะเวลาที่กำหนด
udk <username> <duration>
เฉพาะผู้ดูแล: เตะชื่อผู้ใช้ TeamTalk ออกตามระยะเวลาที่กำหนด
unjail <name>
สำหรับผู้ดูแลเท่านั้น. สำหรับผู้ใช้ที่ได้รับอนุญาต ลบใครบางคนออกจากรายชื่อห้องขังและย้ายพวกเขากลับไปยังช่องหลัก
unotify <username> <telegram_chat_id> ย่อ: unt
ส่งการแจ้งเตือนทาง Telegram เมื่อชื่อผู้ใช้ที่ระบุเข้าสู่ระบบ
users ย่อ: us
แสดงผู้ใช้ที่เชื่อมต่ออยู่ พร้อมประเภทบัญชี ตำแหน่งโดยประมาณ และสถานะ
voice voiceOrLanguage ย่อ: vc
เลือกเสียงหรือภาษาที่ใช้กับ TTS
volume value
ตั้งระดับเสียงพูด (เฉพาะโหมด Microsoft) ค่า 0.1 ถึง 1.0
vpn
เฉพาะผู้ดูแล: เปิดหรือปิดการตรวจจับ VPN/พร็อกซี
weather ย่อ: w
รับสภาพอากาศปัจจุบันสำหรับตำแหน่งของคุณหรือผู้ใช้ที่ระบุ วิธีใช้: weather [ชื่อเล่น (ไม่บังคับ)]
welcome ย่อ: wc
เฉพาะผู้ดูแล: เปิดหรือปิดข้อความต้อนรับแบบคงที่เมื่อผู้ใช้เข้าห้องของบอต
welcomebroadcast [on|off|status] ย่อ: wb
เฉพาะผู้ดูแล: เปิด ปิด หรือดูสถานะประกาศต้อนรับแบบสุ่มเมื่อผู้ใช้เข้าสู่ระบบ ค่าจะถูกบันทึกลง config.ini; ถ้าไม่ใส่อาร์กิวเมนต์จะสลับสถานะทันที
who
แสดงจำนวนผู้ใช้ที่ตรวจพบว่ามาจากประเทศเดียวกับคุณ
whoall ย่อ: wa
แสดงจำนวนผู้ใช้ในเซิร์ฟเวอร์แยกตามประเทศจากข้อมูลที่ตรวจพบ
wt <source_lang> <target_lang>
เปิดโหมดแปลแบบกระซิบ: แปลข้อความในห้อง/ข้อความประกาศ แล้วส่งคำแปลมาให้คุณทางข้อความส่วนตัว

ติดตั้งด้วย TTUHelper (แนะนำ)

เลือกได้ทั้งดาวน์โหลด ZIP จากหน้านี้หรือ clone source จาก GitHub แล้วแต่สะดวก ทั้งสองวิธีติดตั้งคำสั่ง ttuhelper เหมือนกัน

วิธี A — ดาวน์โหลด ZIP จากหน้า Download
sudo apt-get update
sudo apt-get install -y curl unzip
sudo mkdir -p /opt/ttuhelper
sudo curl -fL https://ttdl.nuttawat.ddnsfree.com/downloads/TTUHelper-latest.zip -o /tmp/TTUHelper.zip
sudo unzip -o /tmp/TTUHelper.zip -d /opt/ttuhelper
cd /opt/ttuhelper
sudo chmod +x install.sh ttuhelper.sh
sudo ./install.sh
sudo ttuhelper doctor
วิธี B — Clone TTUHelper จาก GitHub
sudo apt-get update
sudo apt-get install -y git
cd /opt
sudo git clone https://github.com/nuttawat-arch/ttuhelper.git
cd /opt/ttuhelper
sudo chmod +x install.sh ttuhelper.sh
sudo ./install.sh
sudo ttuhelper doctor

ถ้า clone ไว้แล้วและต้องการอัปเดต source ของ helper:

cd /opt/ttuhelper
sudo git pull --ff-only
sudo ./install.sh
sudo ttuhelper doctor

git pull คืออัปเดต TTUHelper source ส่วน ttuhelper update คืออัปเดต SNTalkBot Docker image/instance

ถ้า git pull แจ้งว่ามี local changes

สำรอง source/diff ก่อน แล้ว reset เฉพาะ /opt/ttuhelper ให้ตรง origin/main; ขั้นตอนนี้ไม่ลบ /etc/default/ttuhelper หรือ instance ใต้ /opt/sntalkbot-bots

cd /opt/ttuhelper
sudo git status --short
sudo git diff -- install.sh ttuhelper.sh | sudo tee /root/ttuhelper-local-before-reset.diff >/dev/null
sudo cp -a /opt/ttuhelper /root/ttuhelper-source-backup-$(date +%Y%m%d-%H%M%S)
sudo git fetch origin
sudo git reset --hard origin/main
sudo ./install.sh
sudo ttuhelper doctor

สร้างบอตหลังติดตั้ง

sudo ttuhelper new
sudo ttuhelper run <ชื่อบอต>

อัปเดต SNTalkBot

sudo ttuhelper update

อัปเดตเฉพาะ instance ที่กำลังรัน และเก็บ config/data เดิมไว้

ใช้ Docker โดยตรง

ใช้วิธีนี้เมื่อไม่ต้องการ TTUHelper

docker pull nuttawat0295/sntalkbot:latest
sudo mkdir -p /opt/sntalkbot-bots/mybot
sudo docker run --rm --entrypoint cat nuttawat0295/sntalkbot:latest /app/config_default.ini | sudo tee /opt/sntalkbot-bots/mybot/config.ini >/dev/null
sudo chown -R 10001:10001 /opt/sntalkbot-bots/mybot
sudo nano /opt/sntalkbot-bots/mybot/config.ini

docker run -d \
  --name sntalkbot-mybot \
  --network host \
  --restart unless-stopped \
  -v /opt/sntalkbot-bots/mybot:/app/data \
  -e TTUTIL_CONFIG=/app/data/config.ini \
  -e TTUTIL_DATA_DIR=/app/data \
  -e TTUTIL_PULSE_SINK=ttu_mybot \
  -e TTUTIL_MPV_AO=pulse \
  nuttawat0295/sntalkbot:latest

ถ้าสร้างหลาย container ให้ใช้ชื่อ container, data directory และ TTUTIL_PULSE_SINK คนละชื่อ

TTUHelper

เครื่องมือจัดการ SNTalkBot หลาย instance บน Linux/Docker มีทั้งหมด 22 คำสั่ง

คู่มือ TTUHelper — กางดูวิธีใช้งาน

สร้างและเริ่มบอต

sudo ttuhelper new
sudo ttuhelper run <ชื่อบอต>

new ใช้สร้าง instance และเลือก Full / Player / Server Manager ส่วน run ใช้เปิดบอตจาก config/data เดิมของ instance นั้น

ดูสถานะและบันทึก

sudo ttuhelper ls
sudo ttuhelper ps
sudo ttuhelper logs <ชื่อบอต>

ls ใช้ดู instance ทั้งหมด, ps ใช้ดู container ที่กำลังถูกจัดการ และ logs ใช้ดู log แบบสด กด Ctrl+C เพื่อออกจากหน้าดู log

แก้ตั้งค่าและรีสตาร์ต

sudo ttuhelper edit <ชื่อบอต>
sudo ttuhelper restart <ชื่อบอต>

ข้อมูลแต่ละ instance เก็บแยกกันใต้ /opt/sntalkbot-bots/<ชื่อบอต>/ การ restart หรือ update จะไม่ลบ config/data ถาวร

อัปเดตบอตที่กำลังรัน

sudo ttuhelper update

คำสั่งนี้ pull image ใหม่และสร้างใหม่เฉพาะ instance ที่กำลังรัน โดยใช้ข้อมูลเดิมต่อไป

ติดตั้ง/ตรวจ YouTube cookies

sudo ttuhelper cks <ชื่อบอต> /root/cookies.txt
sudo ttuhelper cks-check <ชื่อบอต>
sudo ttuhelper restart <ชื่อบอต>

ใช้กับ Player/Full ที่ต้องเข้าถึงเนื้อหาซึ่งต้องล็อกอิน ตัว helper ตรวจรูปแบบโดยไม่แสดงค่า secret ดูขั้นตอนเต็มได้ที่หัวข้อ “YouTube / YouTube Music Cookies”

ย้ายจาก TTMediaBot เก่า

ใช้ ttuhelper migrate-ttmediabot เฉพาะ TTMediaBot Docker Helper ที่มี config.json v1 ขั้นตอนพร้อมตัวอย่างอยู่ในหัวข้อ “ย้ายจาก TTMediaBot Docker Helper เก่า” บนหน้านี้

คำสั่ง TTUHelper — 22 คำสั่ง
คำสั่งใช้ทำอะไร
ttuhelper newสร้าง instance ใหม่และเลือกโหมด Full / Player / Server Manager
ttuhelper run <name>เริ่มบอตจาก config/data ของ instance นั้น
ttuhelper stop <name>หยุดและลบ container แต่เก็บ config/data ไว้
ttuhelper restart <name>รีสตาร์ตบอตหนึ่งตัวโดยสร้าง container ใหม่
ttuhelper delete <name>ลบ instance หลังยืนยันชื่อ โดยสำรอง config/data ก่อนลบ
ttuhelper logs <name>ดูบันทึกการทำงานแบบสด; กด Ctrl+C เพื่อออก
ttuhelper lsดูรายชื่อ instance ทั้งหมดพร้อมสถานะ running/stopped
ttuhelper psดู container ที่ TTUHelper จัดการ พร้อมสถานะและ image
ttuhelper start-allเริ่มทุก instance ที่มี config.ini
ttuhelper stop-allหยุด container ทุกตัวที่ TTUHelper จัดการ โดยไม่ลบข้อมูลถาวร
ttuhelper pullดาวน์โหลด Docker image/tag ที่ตั้งไว้
ttuhelper updatepull image ใหม่ แล้วอัปเดตเฉพาะ instance ที่กำลังรัน โดยรักษาข้อมูลเดิม
ttuhelper migrate-ttmediabot [path] (หรือ import-ttmediabot)ย้ายเฉพาะ TTMediaBot Docker Helper config.json v1 ไป SNTalkBot ใหม่; เลือกโหมดทั้งชุดหรือทีละบอตได้
ttuhelper cks <name> [file]แทนที่ cookies.txt ของ Player/Full instance หนึ่งตัวจากไฟล์หรือ paste
ttuhelper cks-all [file]ใส่ cookies ชุดเดียวให้ Player/Full ทุก instance และข้าม Server Manager อัตโนมัติ
ttuhelper cks-check <name>ตรวจ Netscape format/จำนวน cookie ของ Player/Full โดยไม่แสดงค่า secret
ttuhelper limit <name>ตั้งข้อจำกัด CPU/RAM ของ instance มีผลหลัง restart
ttuhelper edit <name>เปิด config.ini ของ instance ค่าเริ่มต้นใช้ nano
ttuhelper path <name>แสดงตำแหน่งโฟลเดอร์ config/data ของ instance
ttuhelper doctorตรวจ Docker daemon, image, data root และค่าหลักของ helper
ttuhelper versionแสดงเวอร์ชัน TTUHelper
ttuhelper helpแสดงคำอธิบายคำสั่งทั้งหมด

YouTube / YouTube Music Cookies

สำหรับ Player Bot และ Full Bot เท่านั้น ใช้เมื่อต้องเล่นเนื้อหาที่ YouTube ต้องให้บัญชีเข้าใช้งาน เช่นวิดีโอจำกัดอายุหรือ playlist ส่วนตัวที่บัญชีนั้นมีสิทธิ์ดู

SNTalkBot มี default YouTube cookies จากโปรเจกต์เดิม อยู่ใน image และจะ bootstrap เป็น /app/data/cookies.txt เฉพาะเมื่อ instance ยังไม่มีไฟล์ จึงเริ่มใช้งานได้โดยไม่ต้องตั้ง cookie ก่อน

ถ้าคุณแทนด้วย cookie ของบัญชีตัวเอง: ไฟล์นั้นเป็น session credential แม้ไม่มีรหัสผ่านแบบอ่านข้อความได้ ให้ติดตั้งด้วย TTUHelper ลง persistent data เท่านั้น ระบบจะไม่ overwrite ไฟล์ที่คุณแทนไว้เมื่ออัปเดต image

อัปเดต cookies.txt — Export Cookies บน Windows แบบเต็ม

1. หา Browser Profile ที่ใช้งานจริง

ในชุด SNTalkBot มีสคริปต์ Windows ที่ค้นหา profile และแสดง BrowserSpec ให้โดยไม่ต้องเดาชื่อโฟลเดอร์:

powershell -ExecutionPolicy Bypass -File .\tools\export_youtube_cookies.ps1 -BrowserSpec chrome -ListProfiles
powershell -ExecutionPolicy Bypass -File .\tools\export_youtube_cookies.ps1 -BrowserSpec firefox -ListProfiles

Firefox สามารถดู Root Directory ของ profile ได้จาก about:profiles ด้วย

2. Export จาก profile ที่เลือก

powershell -ExecutionPolicy Bypass -File .\tools\export_youtube_cookies.ps1 -BrowserSpec "chrome:Profile 2"

ปิดแท็บ/หน้าต่างที่กำลังล็อก cookie database ถ้าสคริปต์แจ้งว่าอ่าน profile ไม่ได้ และใช้ profile ของบัญชี YouTube ที่มีสิทธิ์เข้าถึงเนื้อหาที่ต้องการจริง

ส่งไฟล์ขึ้น Linux → ติดตั้ง → ตรวจสอบ → ลบไฟล์ชั่วคราว

1. ส่งไฟล์จาก Windows ไปยังเครื่อง Linux

scp .\sntalkbot-youtube-cookies.txt root@YOUR_SERVER:/root/sntalkbot-youtube-cookies.txt

2. ติดตั้งให้ Player/Full Bot ที่ต้องการ

sudo ttuhelper cks <ชื่อ Player/Full Bot> /root/sntalkbot-youtube-cookies.txt
sudo ttuhelper cks-check <ชื่อ Player/Full Bot>
sudo ttuhelper restart <ชื่อ Player/Full Bot>

cks-check ตรวจ Netscape format และจำนวน record โดยไม่พิมพ์ค่า cookie ออกหน้าจอ ส่วน cks-all ใช้ติดตั้งให้ Player/Full หลายตัวและจะข้าม Server Manager อัตโนมัติ

3. ลบไฟล์ชั่วคราวจาก /root เมื่อเสร็จ

rm -f /root/sntalkbot-youtube-cookies.txt

ไฟล์ที่ TTUHelper ติดตั้งลง persistent instance ยังอยู่และมี permission จำกัดตามระบบ ไม่ต้องเก็บสำเนา plaintext ไว้ใน /root ต่อ

Cookies ช่วยยืนยันตัวตน แต่ YouTube มีการเปลี่ยนข้อกำหนดการเล่นเป็นระยะ บางกรณีอาจยังต้องใช้ PO Token/วิธีที่ yt-dlp รองรับเพิ่มเติม จึงไม่ควรถือว่า cookie เพียงอย่างเดียวรับประกันวิดีโอทุกตัว

ย้ายจาก TTMediaBot Docker Helper เก่า

รองรับเฉพาะ TTMediaBot Docker Helper ที่แต่ละบอตมี config.json แบบ config_version: 1 ไม่ใช่ตัวนำเข้าสำหรับโปรเจกต์บอตเก่าทุกแบบ

TTUHelper จะค้นหาบอตในโฟลเดอร์ต้นทาง แปลงเป็น config.ini รุ่นใหม่ คัดลอก cookies.txt ถ้ามี และให้เลือกว่าจะย้ายเป็น Player, Server Manager หรือ Full Bot

ดูขั้นตอนย้ายแบบเต็ม พร้อมตัวอย่าง

1. ระบุโฟลเดอร์ต้นทาง

ตัวอย่างนี้สมมติว่า TTMediaBot เก่าอยู่ที่ /opt/ttmediabot-docker-helper และมีหลายบอตอยู่ข้างใน:

/opt/ttmediabot-docker-helper/
  MusicRoom/
    config.json
    cookies.txt
  RadioBot/
    config.json
    cookies.txt
  LoungePlayer/
    config.json

ชื่อ MusicRoom, RadioBot และ LoungePlayer เป็นเพียงตัวอย่าง ผู้ใช้ใช้ชื่อโฟลเดอร์เดิมของตนเองได้

2. ทดลองตรวจจับก่อน โดยยังไม่เปลี่ยนไฟล์

sudo ttuhelper migrate-ttmediabot /opt/ttmediabot-docker-helper --dry-run

ตรวจว่ารายชื่อบอตที่พบตรงกับของจริงก่อน ถ้าเก็บ TTMediaBot ไว้ที่อื่น ให้เปลี่ยนเฉพาะ path เช่น:

sudo ttuhelper migrate-ttmediabot /srv/legacy-media-bots --dry-run

3. เริ่มย้ายจริง

sudo ttuhelper migrate-ttmediabot /opt/ttmediabot-docker-helper

หรือถ้าใช้ตำแหน่งค่าเริ่มต้น สามารถพิมพ์:

sudo ttuhelper migrate-ttmediabot

แล้วกรอก path เมื่อโปรแกรมถาม

4. เลือกประเภทของบอต

1) Player Bot ทุกตัว
2) Server Manager ทุกตัว
3) Full Bot ทุกตัว
4) เลือกประเภททีละตัว

ถ้าบอตเก่าทั้งหมดเป็นบอตเพลง ให้เลือก 1 ได้เลย ถ้ามีหน้าที่ต่างกัน ให้เลือก 4 แล้ว TTUHelper จะถามทีละตัว เช่น:

MusicRoom ทำงานประเภทไหน?
1) Player Bot
2) Server Manager
3) Full Bot

5. สิ่งที่ระบบย้ายให้

  • ข้อมูลเซิร์ฟเวอร์ พอร์ต ชื่อบอต บัญชี TeamTalk ห้อง และค่าที่รองรับจาก config.json
  • ระดับเสียง ค่า seek ผู้ดูแล และค่าทั่วไปที่ใช้ร่วมกับ SNTalkBot ใหม่ได้
  • cookies.txt เดิม ถ้ามี
  • สร้าง config.ini จาก template ปัจจุบันของ SNTalkBot ก่อน แล้วนำเข้าเฉพาะค่า TTMediaBot ที่มีความหมายตรงกับ field ที่ SNTalkBot รองรับจริง
  • ค่า legacy ที่ระบบใหม่ไม่มี หรือค่าที่ชนิด/ช่วงไม่ถูกต้อง จะถูกตัดทิ้ง; field ที่ SNTalkBot ต้องมีแต่ config เก่าไม่มีจะใช้ค่า default ของรุ่นปัจจุบันอัตโนมัติ
  • Sound device ID แบบเก่าจะไม่ถูกยกมาใช้ตรง ๆ; ระบบใหม่ใช้ audio bridge ของ Docker

6. ตัวอย่างตำแหน่งหลังย้าย

/opt/sntalkbot-bots/
  MusicRoom/
    config.ini
    cookies.txt
  RadioBot/
    config.ini
    cookies.txt
  LoungePlayer/
    config.ini

โฟลเดอร์ TTMediaBot ต้นทางจะไม่ถูกลบ จึงเป็น backup ของ raw config.json อยู่แล้ว ระบบไม่คัดลอก raw legacy config เข้า runtime instance ใหม่ ถ้ามี SNTalkBot ชื่อเดียวกันอยู่แล้ว TTUHelper จะถามก่อนแทนที่และสำรองของเดิมไว้ก่อน

TTUHelper 1.5.4+ จะตรวจ instance ที่เคย migrate แล้วตอนติดตั้ง/อัปเดต helper และก่อน start/restart ด้วย หาก config มี key ขาด ค่า boolean/ตัวเลขผิดชนิด หรือมี key legacy ค้าง ระบบจะ backup config เดิมแล้วซ่อมให้ตรง template ปัจจุบันอัตโนมัติ; ค่าที่ซ่อมไม่ได้จะกลับไปใช้ default ที่ปลอดภัยโดยไม่เขียนรหัสผ่านลง report

7. เปิดบอตหลังย้าย

เมื่อแปลงครบ TTUHelper จะถามว่าจะเริ่ม/รีสตาร์ตบอตที่นำเข้าด้วย image ล่าสุดหรือไม่ หลังจากนั้นตรวจสถานะได้ด้วย:

sudo ttuhelper ls
sudo ttuhelper ps
sudo ttuhelper logs MusicRoom

เปลี่ยน MusicRoom เป็นชื่อบอตจริงที่ต้องการดู log

SNTalkBot Web Manager — จัดการทุกอย่างผ่านเว็บ

Web Manager เป็นโปรเจกต์เสริมที่ผู้ใช้โฮสต์เองได้บนเครื่องเดียวกับ SNTalkBot/TTUHelper ใช้หรือไม่ใช้ก็ได้ หากใช้ Reverse Proxy ให้ส่ง upstream ไปที่ http://127.0.0.1:28765; ผู้ใช้ทั่วไปไม่จำเป็นต้องตั้งค่าหรือรู้รายละเอียดบริการภายในอื่น

ติดตั้ง Web Manager แบบคำสั่งเดียวจาก Download Site

เหมาะกับ Ubuntu/Debian เครื่องใหม่ สคริปต์จะตรวจ bootstrap tools ก่อน ติดตั้งเฉพาะสิ่งที่ขาด ดาวน์โหลดไฟล์ latest และตรวจ SHA-256 ก่อนแตก/ติดตั้ง:

curl -fsSL https://ttdl.nuttawat.ddnsfree.com/install_web_manager.sh | sudo bash

ถ้าเครื่องมี wget แต่ไม่มี curl:

wget -qO- https://ttdl.nuttawat.ddnsfree.com/install_web_manager.sh | sudo bash

ถ้าต้องการตรวจสคริปต์ก่อนรัน:

curl -fL https://ttdl.nuttawat.ddnsfree.com/install_web_manager.sh -o /tmp/install_web_manager.sh
less /tmp/install_web_manager.sh
sudo bash /tmp/install_web_manager.sh

หลังติดตั้ง Web Manager รับงานภายในเครื่องที่ http://127.0.0.1:28765 ถ้าใช้งานผ่านโดเมนให้ Reverse Proxy/HTTPS มาที่ address นี้

ติดตั้ง Web Manager จาก ZIP — ขั้นตอนเต็ม
sudo mkdir -p /opt/sntalkbot-web-manager
sudo unzip -o SNTalkBot-Web-Manager-1.1.29.zip -d /opt/sntalkbot-web-manager
cd /opt/sntalkbot-web-manager
sudo chmod +x install.sh install_remote.sh
sudo ./install.sh
sudo systemctl status sntalkbot-web-manager --no-pager
curl -fsS http://127.0.0.1:28765/healthz

ตัวติดตั้งตรวจ Python, Git, Curl, venv, CA certificates และ Docker ก่อน ติดตั้งเฉพาะสิ่งที่ขาด จากนั้นสร้าง system user sntalkweb, virtualenv, systemd service, session secret และ privileged allowlist bridge

เปิดเว็บครั้งแรกแล้วสร้าง Super Admin คนแรก จากนั้น Super Admin ใช้เมนูบัญชีผู้ใช้สร้างบัญชีลูกค้าได้

ติดตั้ง Web Manager จาก GitHub
cd /opt
sudo git clone https://github.com/nuttawat-arch/sntalkbot-web-manager.git
cd /opt/sntalkbot-web-manager
sudo chmod +x install.sh install_remote.sh
sudo ./install.sh

ถ้าติดตั้งอยู่แล้ว ให้ใช้ updater แบบ staged/backup/rollback ซึ่งไม่ติด local changes:

sudo bash /opt/sntalkbot-web-manager/install_remote.sh

ตัว updater clone รุ่นใหม่ให้สำเร็จก่อนแตะ live source, สำรอง source เดิมทั้งโฟลเดอร์ และ restore รุ่นเดิมถ้า installer ล้ม

หมายเหตุ GitHub: วิธี Git clone, ปุ่ม Self-update และ Release Automation -SyncWebManager ต้องมี repository https://github.com/nuttawat-arch/sntalkbot-web-manager.git ก่อน แต่การติดตั้งด้วย ZIP/Download Site ไม่ต้องมี repository นี้

Standalone ผ่าน IP:port — ไม่ใช้ Reverse Proxy

ค่า default ปลอดภัยคือ localhost เท่านั้น ถ้าต้องการเปิดด้วย IP โดยตรงต้องเลือก bind ทุก interface เอง:

cd /opt/sntalkbot-web-manager
sudo env SNWEB_BIND=0.0.0.0 SNWEB_PORT=28765 ./install.sh

จากนั้นเปิด http://SERVER_IP:28765/ ถ้ามี Firewall ควรอนุญาตพอร์ตนี้เฉพาะ IP ผู้ดูแลเท่านั้น และอย่าเปิดพอร์ต API ภายในของบอตสู่ Internet

sudo ss -ltnp | grep ':28765 '
curl -fsS http://127.0.0.1:28765/healthz

Standalone HTTP ใช้ SNWEB_COOKIE_SECURE=false; ถ้าเปิดผ่าน Internet แนะนำ Reverse Proxy + HTTPS

ตั้งค่า Reverse Proxy — CloudPanel (แนะนำ)
  1. ชี้ DNS ของโดเมน เช่น botmgr.example.com มาที่ IP Server
  2. CloudPanel → Sites → Add Site → Create a Reverse Proxy
  3. Domain Name = ใส่เฉพาะ hostname เช่น botmgr.example.com — ห้ามใส่ https://, path หรือ :28765
  4. Reverse Proxy URL = http://127.0.0.1:28765 (ตรงนี้จึงค่อยใส่ scheme และ port)
  5. สร้างไซต์และติดตั้ง SSL/TLS Certificate
  6. ใน Vhost Editor ตรวจ location ที่ proxy ให้มีค่า SSE ด้านล่าง
proxy_pass http://127.0.0.1:28765;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;

proxy_buffering off สำคัญกับสถานะ/Job แบบ realtime SSE เมื่อ HTTPS ใช้งานแล้วให้:

sudo sed -i 's/^SNWEB_COOKIE_SECURE=.*/SNWEB_COOKIE_SECURE="true"/' /etc/default/sntalkbot-web-manager
sudo systemctl restart sntalkbot-web-manager

CloudPanel CLI ก็สร้าง Reverse Proxy ได้:

sudo clpctl site:add:reverse-proxy   --domainName=botmgr.example.com   --reverseProxyUrl='http://127.0.0.1:28765'   --siteUser=botmgr   --siteUserPassword='CHANGE_THIS_PASSWORD'
NGINX ปกติ — ตัวอย่างพร้อม Realtime SSE
server {
    listen 80;
    server_name botmgr.example.com;
    location / {
        proxy_pass http://127.0.0.1:28765;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
    }
}
sudo nginx -t
sudo systemctl reload nginx

หลังเปิด HTTPS ให้ตั้ง SNWEB_COOKIE_SECURE=true แล้ว restart Web Manager

Caddy Reverse Proxy
botmgr.example.com {
    reverse_proxy 127.0.0.1:28765
}
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy

เมื่อโดเมนใช้ HTTPS แล้วให้ตั้ง SNWEB_COOKIE_SECURE=true

Apache HTTP Server 2.4 Reverse Proxy
sudo a2enmod proxy proxy_http headers
<VirtualHost *:80>
    ServerName botmgr.example.com
    ProxyRequests Off
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:28765/ timeout=3600
    ProxyPassReverse / http://127.0.0.1:28765/
    RequestHeader set X-Forwarded-Proto "http"
</VirtualHost>
sudo apachectl configtest
sudo systemctl reload apache2

VirtualHost HTTPS ให้ส่ง X-Forwarded-Proto "https" และเปิด Secure Cookie

Reverse Proxy / Control Panel อื่น ๆ — หลักที่ต้องตั้งให้ครบ

ถ้าใช้แผงหรือบริการอื่น ให้ตั้ง Backend/Upstream เป็น http://127.0.0.1:28765 เมื่อ proxy อยู่เครื่องเดียวกับ Web Manager, preserve Host และส่ง X-Forwarded-For/X-Forwarded-Proto

สำหรับ realtime SSE ให้ปิด response buffering/cache และตั้ง read timeout ยาว เช่น 3600 วินาที เมื่อเปิด HTTPS แล้วให้ตั้ง SNWEB_COOKIE_SECURE=true

Upstream: http://127.0.0.1:28765
Host: preserve original host
X-Forwarded-For: client/proxy chain
X-Forwarded-Proto: https
Response buffering: off
Proxy cache: off
Read timeout: 3600 seconds

ห้าม Reverse Proxy หรือ port-forward พอร์ต API ภายในของบอต ถ้า proxy รันอยู่ใน container ให้จำไว้ว่า 127.0.0.1 หมายถึง container นั้น ไม่ใช่ host; ต้องตั้ง host-gateway/network route ให้ถูกต้อง

พอร์ตที่ผู้ใช้ Web Manager ต้องรู้

สำหรับการติดตั้งมาตรฐาน ให้ Reverse Proxy ไปที่ http://127.0.0.1:28765 เท่านั้น ผู้ใช้ทั่วไปไม่ต้องตั้งค่าพอร์ตบริการภายในอื่น

ตรวจปัญหา Web Manager / Reverse Proxy
sudo systemctl status sntalkbot-web-manager --no-pager
sudo ss -ltnp | grep ':28765 '
curl -v http://127.0.0.1:28765/healthz
sudo journalctl -u sntalkbot-web-manager -n 100 --no-pager

ถ้า localhost ใช้ได้แต่โดเมนไม่ได้ ให้ตรวจ DNS/SSL/Reverse Proxy ถ้า Job แสดงผลทีเดียวตอนจบ ให้ตรวจ proxy_buffering off

ขั้นตอน Web Manager และ Reverse Proxy ที่ผู้ใช้ต้องใช้จริงแสดงอยู่ในหัวข้อยุบ/ขยายด้านบนครบแล้ว ไม่ต้องเปิดไฟล์อ้างอิงแยก

ลิงก์ทางการ