Просмотр исходного кода

fix(silent): 更完善的 silent 检测机制

dzp 2 лет назад
Родитель
Сommit
dce964fa4e
1 измененных файлов с 49 добавлено и 6 удалено
  1. 49 6
      plugins/silent.tin

+ 49 - 6
plugins/silent.tin

@@ -25,19 +25,23 @@
 
 #alias {^%*{|ID=paotin/silent}$} {
     #local cmd {%0};
-    #replace {cmd} {%S %*} {&1};
 
-    #if {  {$silent-WhiteList[$cmd]} == {true}
-        || {$cmd} == {{[a-z]{1,10}}} && {%0} == {{[a-z0-9 -]*}} } {
+    #if { {$cmd} === {} } {
+        #return;
+    };
+
+    #local ok {@silent.Check{$cmd}};
+    #if { $ok } {
         #var silent-LastCmd {};
-        #send {%0};
+        #send {$cmd};
         #return;
     };
 
     #echo {<169>命令「<139>$cmd<169>」不是一个合法的 MUD 命令,如果确认是,请更新白名单。<099>};
-    #if { {%0} != {$silent-LastCmd} } {
+
+    #if { {$cmd} != {$silent-LastCmd} } {
         #echo {<169>本次命令<119>已被抑制<169>。如果你着急输入,可以重复一次本命令,将临时通过一次。<099>};
-        #var silent-LastCmd {%0};
+        #var silent-LastCmd {$cmd};
     };
     #else {
         #var silent-LastCmd {};
@@ -45,6 +49,45 @@
     };
 } {9.999};
 
+#func {silent.Check} {
+    #local cmd {%0};
+
+    #replace {cmd} {^%S{| (.*)}$} {
+        {cmd}{&1}
+        {args}{&3}
+    };
+
+    #local cmd {$cmd};
+
+    #nop 这个是 chat;
+    #if { {$cmd[cmd]} == {'%*} } {
+        #return 1;
+    };
+
+    #nop 白名单通行;
+    #if { {$silent-WhiteList[$cmd[cmd]]} == {true} } {
+        #return 1;
+    };
+
+    #nop 否则只接受指定格式的命令;
+    #if { {$cmd[cmd]} != {{[a-z0-9_]{1,10}}} } {
+        #return 0;
+    };
+
+    #nop 参数不允许有特殊字符;
+    #var silent-check-retcode {};
+    #regex {$cmd[args]} {{*UTF8}{^([a-z0-9. -]|\p{Han})*$}} {
+        #var silent-check-retcode {1};
+    } {
+        #var silent-check-retcode {0};
+    };
+
+    #local retcode {$silent-check-retcode};
+    #unvar silent-check-retcode;
+
+    #return $retcode;
+};
+
 #alias {silent.Init} {
     #local list {$silent-WhiteList};
     #local cmd {};