Skip to content

進階運算式

自訂指令回覆支援安全版 $(eval ...)。它是功能受限的運算語法,不會執行任意 JavaScript,也不能連線到網站或呼叫 Twitch API。

線上測試

可以在這裡使用與 HannyaStudio 自訂指令相同的安全運算式引擎測試結果。Playground 只支援本頁列出的變數、運算子與函式。

SAFE EVAL PLAYGROUND

立即試算

安全模式

只會執行 HannyaStudio 支援的安全語法。

輸出結果尚無結果

基本用法

text
1 + 2 = $(eval 1 + 2)
text
$(eval {args} == "" ? "請輸入內容" : "你輸入了:" + {args})
text
今天的幸運數字是 $(eval randomInt(1, 100))
text
$(eval choose("大吉", "中吉", "小吉"))

一則回覆最多可以放 4 個運算式。任何一個運算式發生錯誤時,該次指令不會送出不完整的訊息。

可用變數

變數內容
{command}本次使用的指令名稱,包含 !
{args}指令後方的完整文字;沒有參數時是空字串。
{user}使用者的 Twitch 顯示名稱。
{user_id}使用者的 Twitch 數字 ID。
{login}使用者的 Twitch ID(login)。

變數會以資料形式交給運算式,不會被當成程式碼執行。例如使用者輸入引號、括號或分號,也只會是普通文字。

字串中的變數名稱不會展開:"{args}" 代表文字 {args};要讀取參數請直接寫 {args}

運算子

  • 數字:+-*/%
  • 比較:<<=>>===!=
  • 邏輯:!&&||
  • 條件:條件 ? 成立時的值 : 不成立時的值
  • 群組:(...)

==!= 會比較型別;文字 "1" 不等於數字 1。除了 + 可以串接文字,其餘數學與大小比較都需要數字。若參數是數字文字,請先使用 number({args})

text
$(eval number({args}) >= 100 ? "達標" : "尚未達標")

數字函式

函式說明
number(value)將數字或數字文字轉成有限數字。
min(a, ...) / max(a, ...)從 1~16 個數字找最小值或最大值。
abs(value)絕對值。
round(value)四捨五入到整數。
floor(value) / ceil(value)無條件捨去/進位到整數。
clamp(value, min, max)把數字限制在指定範圍內。
randomInt(min, max)產生包含上下限的隨機整數。

randomInt 的上下限必須是整數,最大範圍差為 1,000,000。

文字函式

函式說明
string(value)轉成文字;null 會變成空字串。
lower(value) / upper(value)轉成小寫/大寫。
trim(value)移除文字前後空白。
length(value)計算 Unicode 字元數,emoji 算一個字元。
contains(text, search)是否包含指定文字。
startsWith(text, search)是否以指定文字開頭。
endsWith(text, search)是否以指定文字結尾。

文字比較會區分大小寫。如需忽略大小寫,可以先使用 lowerupper

text
$(eval contains(lower({args}), "hello") ? "Hello!" : "找不到 hello")

隨機選擇

choose(value, ...) 可以從 1~16 個值中隨機挑選一個:

text
{user} 今天適合 $(eval choose("唱歌", "打遊戲", "早點睡"))

限制與不支援項目

  • 自訂指令回覆仍以 200 個 Unicode 字元為上限。
  • 每則回覆最多 4 個運算式,每個運算式最多 160 個字元。
  • 不支援屬性存取、陣列、物件、正規表示式、賦值、迴圈、自訂函式或非白名單函式。
  • 不支援 fetch、網路請求、檔案、環境變數或日期時間。
  • 不支援巢狀 $(eval ...)
  • 除以零、無效數字、未知變數/函式或超過資源限制時,本次訊息不會送出。
  • 運算結果仍會通過系統的封鎖字詞檢查與 Twitch 訊息長度限制。

這項功能只適用於「指令管理 → 自訂指令」的回覆內容;其他事件、模組、贊助與排程訊息不會解析 $(eval ...)

HannyaStudio 公開使用說明