[{"data":1,"prerenderedAt":1080},["ShallowReactive",2],{"navigation_docs_zh_tw":3,"-zh-tw-pml-2-plugin-triggers":75,"-zh-tw-pml-2-plugin-triggers-surround":1075},[4,26],{"title":5,"path":6,"stem":7,"children":8,"page":25},"PML 2 外掛開發指南","\u002Fzh_tw\u002Fpml-2-plugin","zh_tw\u002Fpml-2-plugin",[9,13,17,21],{"title":10,"path":11,"stem":12},"外掛開發綜述","\u002Fzh_tw\u002Fpml-2-plugin\u002Fintro","zh_tw\u002Fpml-2-plugin\u002F01.intro",{"title":14,"path":15,"stem":16},"外掛系統觸發點說明","\u002Fzh_tw\u002Fpml-2-plugin\u002Ftriggers","zh_tw\u002Fpml-2-plugin\u002F02.triggers",{"title":18,"path":19,"stem":20},"外掛系統運算子說明","\u002Fzh_tw\u002Fpml-2-plugin\u002Foperators","zh_tw\u002Fpml-2-plugin\u002F03.operators",{"title":22,"path":23,"stem":24},"內建函式","\u002Fzh_tw\u002Fpml-2-plugin\u002Ffunctions","zh_tw\u002Fpml-2-plugin\u002F04.functions",false,{"title":27,"path":28,"stem":29,"children":30,"page":25},"PML 2","\u002Fzh_tw\u002Fpml-2","zh_tw\u002Fpml-2",[31,35,39,43,47,51,55,59,63,67,71],{"title":32,"path":33,"stem":34},"介紹 & 下載","\u002Fzh_tw\u002Fpml-2\u002Fintro","zh_tw\u002Fpml-2\u002F01.intro",{"title":36,"path":37,"stem":38},"安裝","\u002Fzh_tw\u002Fpml-2\u002Finstall","zh_tw\u002Fpml-2\u002F02.install",{"title":40,"path":41,"stem":42},"使用者指南","\u002Fzh_tw\u002Fpml-2\u002Fuser_guide","zh_tw\u002Fpml-2\u002F03.user_guide",{"title":44,"path":45,"stem":46},"故障排查","\u002Fzh_tw\u002Fpml-2\u002Ftroubleshooting","zh_tw\u002Fpml-2\u002F04.troubleshooting",{"title":48,"path":49,"stem":50},"設定檔","\u002Fzh_tw\u002Fpml-2\u002Fconfig","zh_tw\u002Fpml-2\u002F05.config",{"title":52,"path":53,"stem":54},"主題","\u002Fzh_tw\u002Fpml-2\u002Fthemes","zh_tw\u002Fpml-2\u002F06.themes",{"title":56,"path":57,"stem":58},"Plugin","\u002Fzh_tw\u002Fpml-2\u002Fplugin","zh_tw\u002Fpml-2\u002F07.plugin",{"title":60,"path":61,"stem":62},"PML 2 隱私權政策","\u002Fzh_tw\u002Fpml-2\u002Fpolicy","zh_tw\u002Fpml-2\u002F08.policy",{"title":64,"path":65,"stem":66},"PML 2 使用者條款","\u002Fzh_tw\u002Fpml-2\u002Fuser_agreement","zh_tw\u002Fpml-2\u002F09.user_agreement",{"title":68,"path":69,"stem":70},"DNS 供應商","\u002Fzh_tw\u002Fpml-2\u002Fdns_providers","zh_tw\u002Fpml-2\u002F10.dns_providers",{"title":72,"path":73,"stem":74},"遙測","\u002Fzh_tw\u002Fpml-2\u002Ftelemetry","zh_tw\u002Fpml-2\u002F11.telemetry",{"id":76,"title":14,"body":77,"description":1069,"extension":1070,"links":1071,"meta":1072,"navigation":734,"path":15,"seo":1073,"stem":16,"__hash__":1074},"docs_zh_tw\u002Fzh_tw\u002Fpml-2-plugin\u002F02.triggers.md",{"type":78,"value":79,"toc":1059},"minimark",[80,85,98,102,408,411,416,425,474,477,480,510,514,547,555,559,591,594,633,637,643,647,654,888,892,1026,1029,1036,1055],[81,82,84],"h2",{"id":83},"一外掛事件觸發點-trigger","一、外掛事件觸發點 (Trigger)",[86,87,88,89,93,94,97],"p",{},"外掛透過 YAML 中的 ",[90,91,92],"code",{},"triggers.on"," 訂閱下列事件。事件攜帶的資料可透過樣板\n",[90,95,96],{},"{{ctx.data.欄位名}}"," 在動作參數中引用。",[99,100,101],"h3",{"id":101},"事件總覽",[103,104,105,127],"table",{},[106,107,108],"thead",{},[109,110,111,115,118,121,124],"tr",{},[112,113,114],"th",{},"事件名",[112,116,117],{},"觸發時機",[112,119,120],{},"觸發位置",[112,122,123],{},"攜帶資料",[112,125,126],{},"執行方式",[128,129,130,158,181,206,231,252,277,300,322,344,368,388],"tbody",{},[109,131,132,138,141,146,155],{},[133,134,135],"td",{},[90,136,137],{},"app.startup",[133,139,140],{},"主視窗初始化完成、應用程式啟動時",[133,142,143],{},[90,144,145],{},"MainWindow.axaml.cs",[133,147,148,151,152],{},[90,149,150],{},"version",", ",[90,153,154],{},"os",[133,156,157],{},"await",[109,159,160,165,168,173,179],{},[133,161,162],{},[90,163,164],{},"app.exit",[133,166,167],{},"應用程式結束時 (日誌釋放前)",[133,169,170],{},[90,171,172],{},"App.axaml.cs",[133,174,175,151,177],{},[90,176,150],{},[90,178,154],{},[133,180,157],{},[109,182,183,188,191,195,203],{},[133,184,185],{},[90,186,187],{},"app.update.available",[133,189,190],{},"偵測到有新版本時",[133,192,193],{},[90,194,145],{},[133,196,197,151,200],{},[90,198,199],{},"currentVersion",[90,201,202],{},"latestVersion",[133,204,205],{},"fire-and-forget",[109,207,208,213,216,221,229],{},[133,209,210],{},[90,211,212],{},"user.login",[133,214,215],{},"使用者登入成功時",[133,217,218],{},[90,219,220],{},"LoginPage.axaml.cs",[133,222,223,151,226],{},[90,224,225],{},"username",[90,227,228],{},"group",[133,230,205],{},[109,232,233,238,241,246,250],{},[133,234,235],{},[90,236,237],{},"user.logout",[133,239,240],{},"使用者確認登出後、應用程式重新啟動前",[133,242,243],{},[90,244,245],{},"UserCenterPage.axaml.cs",[133,247,248],{},[90,249,225],{},[133,251,157],{},[109,253,254,259,262,267,275],{},[133,255,256],{},[90,257,258],{},"proxy.start",[133,260,261],{},"啟動隧道 (建立帶有 mefrpc 指令的終端機分頁) 時",[133,263,264],{},[90,265,266],{},"TerminalPage.axaml.cs",[133,268,269,151,272],{},[90,270,271],{},"proxyName",[90,273,274],{},"command",[133,276,205],{},[109,278,279,284,290,294,298],{},[133,280,281],{},[90,282,283],{},"proxy.stop",[133,285,286,287,289],{},"關閉終端機分頁 (與 ",[90,288,258],{}," 配對) 時",[133,291,292],{},[90,293,266],{},[133,295,296],{},[90,297,271],{},[133,299,205],{},[109,301,302,307,310,315,320],{},[133,303,304],{},[90,305,306],{},"page.navigate",[133,308,309],{},"切換主介面頁面時",[133,311,312],{},[90,313,314],{},"MainPageFrameViewModel.cs",[133,316,317],{},[90,318,319],{},"page",[133,321,205],{},[109,323,324,329,332,337,342],{},[133,325,326],{},[90,327,328],{},"plugin.install",[133,330,331],{},"外掛檔案安裝成功時",[133,333,334],{},[90,335,336],{},"PluginService.cs",[133,338,339],{},[90,340,341],{},"file",[133,343,205],{},[109,345,346,351,354,358,366],{},[133,347,348],{},[90,349,350],{},"plugin.uninstall",[133,352,353],{},"外掛解除安裝成功時",[133,355,356],{},[90,357,336],{},[133,359,360,151,363],{},[90,361,362],{},"pluginId",[90,364,365],{},"pluginName",[133,367,205],{},[109,369,370,375,378,382,386],{},[133,371,372],{},[90,373,374],{},"plugin.enable",[133,376,377],{},"外掛啟用時",[133,379,380],{},[90,381,336],{},[133,383,384],{},[90,385,362],{},[133,387,205],{},[109,389,390,395,398,402,406],{},[133,391,392],{},[90,393,394],{},"plugin.disable",[133,396,397],{},"外掛停用時",[133,399,400],{},[90,401,336],{},[133,403,404],{},[90,405,362],{},[133,407,205],{},[99,409,410],{"id":410},"事件詳情",[412,413,415],"h4",{"id":414},"appstartup-appexit","app.startup \u002F app.exit",[86,417,418,419,421,422,424],{},"應用程式生命週期事件。",[90,420,137],{}," 在主視窗載入、隱私權政策檢查完成後觸發;\n",[90,423,164],{}," 在處理程序結束前觸發, 會等待外掛動作執行完畢才釋放日誌資源。",[103,426,427,440],{},[106,428,429],{},[109,430,431,434,437],{},[112,432,433],{},"資料欄位",[112,435,436],{},"說明",[112,438,439],{},"範例",[128,441,442,456],{},[109,443,444,448,451],{},[133,445,446],{},[90,447,150],{},[133,449,450],{},"應用程式版本號",[133,452,453],{},[90,454,455],{},"26.2.0",[109,457,458,462,465],{},[133,459,460],{},[90,461,154],{},[133,463,464],{},"作業系統平台",[133,466,467,470,471],{},[90,468,469],{},"Win32NT"," \u002F ",[90,472,473],{},"Unix",[412,475,187],{"id":476},"appupdateavailable",[86,478,479],{},"啟動後首次偵測到新版本時觸發 (每次執行只觸發一次) 。",[103,481,482,490],{},[106,483,484],{},[109,485,486,488],{},[112,487,433],{},[112,489,436],{},[128,491,492,501],{},[109,493,494,498],{},[133,495,496],{},[90,497,199],{},[133,499,500],{},"目前版本",[109,502,503,507],{},[133,504,505],{},[90,506,202],{},[133,508,509],{},"偵測到的最新版本",[412,511,513],{"id":512},"userlogin-userlogout","user.login \u002F user.logout",[103,515,516,524],{},[106,517,518],{},[109,519,520,522],{},[112,521,433],{},[112,523,436],{},[128,525,526,535],{},[109,527,528,532],{},[133,529,530],{},[90,531,225],{},[133,533,534],{},"登入\u002F登出的使用者名稱",[109,536,537,541],{},[133,538,539],{},[90,540,228],{},[133,542,543,544,546],{},"使用者群組 (僅 ",[90,545,212],{},")",[548,549,550],"blockquote",{},[86,551,552,554],{},[90,553,237],{}," 之後應用程式會立即重新啟動，因此採用 await 方式執行，\n保證外掛動作 (如通知、上報) 能完整執行。",[412,556,558],{"id":557},"proxystart-proxystop","proxy.start \u002F proxy.stop",[103,560,561,569],{},[106,562,563],{},[109,564,565,567],{},[112,566,433],{},[112,568,436],{},[128,570,571,580],{},[109,572,573,577],{},[133,574,575],{},[90,576,271],{},[133,578,579],{},"隧道\u002F終端機分頁名稱",[109,581,582,586],{},[133,583,584],{},[90,585,274],{},[133,587,588,589,546],{},"啟動指令 (僅 ",[90,590,258],{},[412,592,306],{"id":593},"pagenavigate",[86,595,596,598,599,602,603,602,606,602,609,602,612,615,616,602,619,602,622,602,625,602,628,602,631],{},[90,597,319],{}," 欄位取值:\n",[90,600,601],{},"Home","、",[90,604,605],{},"CreateProxy",[90,607,608],{},"ManageProxy",[90,610,611],{},"NodesMonitoring",[90,613,614],{},"UserCenter","、\n",[90,617,618],{},"Settings",[90,620,621],{},"About",[90,623,624],{},"Terminal",[90,626,627],{},"Update",[90,629,630],{},"Theme",[90,632,56],{},[412,634,636],{"id":635},"plugininstall-pluginuninstall-pluginenable-plugindisable","plugin.install \u002F plugin.uninstall \u002F plugin.enable \u002F plugin.disable",[86,638,639,640,642],{},"外掛自身的生命週期事件。注意: 外掛可以訂閱這些事件實現連動，\n但訂閱 ",[90,641,350],{}," 的外掛在自身被解除安裝後不會再收到後續事件。",[81,644,646],{"id":645},"二外掛-yaml-寫法","二、外掛 YAML 寫法",[86,648,649,650,653],{},"外掛檔案位於 ",[90,651,652],{},"Config\u002FPlugins\u002F*.yaml","，支援熱重載 (檔案變更後 1 秒內自動重新載入) 。",[655,656,661],"pre",{"className":657,"code":658,"language":659,"meta":660,"style":660},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","id: my-plugin\nname: 範例外掛\ndescription: 隧道啟動時傳送通知\nauthor: 作者名\nversion: \"1.0\"\n\ntriggers:\n  - on: proxy.start                          # 訂閱的事件名\n    condition: \"ctx.data.proxyName != ''\"    # 選填，條件表達式\n    actions:\n      - name: notify\n        params:\n          msg: \"隧道 {{ctx.data.proxyName}} 已啟動\"\n\nfunctions:\n  my_func:                                   # 可重複使用的函式，用 call_function 呼叫\n    - name: log\n      params:\n        msg: \"hello\"\n","yaml","",[90,662,663,680,691,702,713,729,736,745,764,783,791,805,813,828,833,841,852,865,873],{"__ignoreMap":660},[664,665,668,672,676],"span",{"class":666,"line":667},"line",1,[664,669,671],{"class":670},"swJcz","id",[664,673,675],{"class":674},"sMK4o",":",[664,677,679],{"class":678},"sfazB"," my-plugin\n",[664,681,683,686,688],{"class":666,"line":682},2,[664,684,685],{"class":670},"name",[664,687,675],{"class":674},[664,689,690],{"class":678}," 範例外掛\n",[664,692,694,697,699],{"class":666,"line":693},3,[664,695,696],{"class":670},"description",[664,698,675],{"class":674},[664,700,701],{"class":678}," 隧道啟動時傳送通知\n",[664,703,705,708,710],{"class":666,"line":704},4,[664,706,707],{"class":670},"author",[664,709,675],{"class":674},[664,711,712],{"class":678}," 作者名\n",[664,714,716,718,720,723,726],{"class":666,"line":715},5,[664,717,150],{"class":670},[664,719,675],{"class":674},[664,721,722],{"class":674}," \"",[664,724,725],{"class":678},"1.0",[664,727,728],{"class":674},"\"\n",[664,730,732],{"class":666,"line":731},6,[664,733,735],{"emptyLinePlaceholder":734},true,"\n",[664,737,739,742],{"class":666,"line":738},7,[664,740,741],{"class":670},"triggers",[664,743,744],{"class":674},":\n",[664,746,748,751,755,757,760],{"class":666,"line":747},8,[664,749,750],{"class":674},"  -",[664,752,754],{"class":753},"sfNiH"," on",[664,756,675],{"class":674},[664,758,759],{"class":678}," proxy.start",[664,761,763],{"class":762},"sHwdD","                          # 訂閱的事件名\n",[664,765,767,770,772,774,777,780],{"class":666,"line":766},9,[664,768,769],{"class":670},"    condition",[664,771,675],{"class":674},[664,773,722],{"class":674},[664,775,776],{"class":678},"ctx.data.proxyName != ''",[664,778,779],{"class":674},"\"",[664,781,782],{"class":762},"    # 選填，條件表達式\n",[664,784,786,789],{"class":666,"line":785},10,[664,787,788],{"class":670},"    actions",[664,790,744],{"class":674},[664,792,794,797,800,802],{"class":666,"line":793},11,[664,795,796],{"class":674},"      -",[664,798,799],{"class":670}," name",[664,801,675],{"class":674},[664,803,804],{"class":678}," notify\n",[664,806,808,811],{"class":666,"line":807},12,[664,809,810],{"class":670},"        params",[664,812,744],{"class":674},[664,814,816,819,821,823,826],{"class":666,"line":815},13,[664,817,818],{"class":670},"          msg",[664,820,675],{"class":674},[664,822,722],{"class":674},[664,824,825],{"class":678},"隧道 {{ctx.data.proxyName}} 已啟動",[664,827,728],{"class":674},[664,829,831],{"class":666,"line":830},14,[664,832,735],{"emptyLinePlaceholder":734},[664,834,836,839],{"class":666,"line":835},15,[664,837,838],{"class":670},"functions",[664,840,744],{"class":674},[664,842,844,847,849],{"class":666,"line":843},16,[664,845,846],{"class":670},"  my_func",[664,848,675],{"class":674},[664,850,851],{"class":762},"                                   # 可重複使用的函式，用 call_function 呼叫\n",[664,853,855,858,860,862],{"class":666,"line":854},17,[664,856,857],{"class":674},"    -",[664,859,799],{"class":670},[664,861,675],{"class":674},[664,863,864],{"class":678}," log\n",[664,866,868,871],{"class":666,"line":867},18,[664,869,870],{"class":670},"      params",[664,872,744],{"class":674},[664,874,876,879,881,883,886],{"class":666,"line":875},19,[664,877,878],{"class":670},"        msg",[664,880,675],{"class":674},[664,882,722],{"class":674},[664,884,885],{"class":678},"hello",[664,887,728],{"class":674},[99,889,891],{"id":890},"內建指令-actions","內建指令 (actions)",[103,893,894,906],{},[106,895,896],{},[109,897,898,901,904],{},[112,899,900],{},"指令",[112,902,903],{},"參數",[112,905,436],{},[128,907,908,923,940,965,987,1008],{},[109,909,910,915,920],{},[133,911,912],{},[90,913,914],{},"log",[133,916,917],{},[90,918,919],{},"msg",[133,921,922],{},"寫入日誌 (主控台 + 應用程式日誌檔，模組為「外掛」)",[109,924,925,930,934],{},[133,926,927],{},[90,928,929],{},"notify",[133,931,932],{},[90,933,919],{},[133,935,936,937,546],{},"傳送系統通知 (標題為 ",[90,938,939],{},"外掛ID | PML 2",[109,941,942,947,959],{},[133,943,944],{},[90,945,946],{},"http_request",[133,948,949,151,952,955,956],{},[90,950,951],{},"url",[90,953,954],{},"method","(預設 GET), ",[90,957,958],{},"body",[133,960,961,962],{},"發出 HTTP 請求，回應主體寫入 ",[90,963,964],{},"ctx.variables.http_response",[109,966,967,972,980],{},[133,968,969],{},[90,970,971],{},"python_run",[133,973,974,151,977],{},[90,975,976],{},"script",[90,978,979],{},"input",[133,981,982,983,986],{},"呼叫 Python 指令碼 (需 PATH 中有 ",[90,984,985],{},"python3",") ，傳回的 JSON 合併進變數",[109,988,989,994,1002],{},[133,990,991],{},[90,992,993],{},"call_function",[133,995,996,151,999],{},[90,997,998],{},"func",[90,1000,1001],{},"args",[133,1003,1004,1005,1007],{},"呼叫 ",[90,1006,838],{}," 中定義的函式",[109,1009,1010,1015,1023],{},[133,1011,1012],{},[90,1013,1014],{},"conditional",[133,1016,1017,151,1020],{},[90,1018,1019],{},"condition",[90,1021,1022],{},"if_true",[133,1024,1025],{},"條件執行一組動作",[99,1027,1028],{"id":1028},"樣板變數",[86,1030,1031,1032,1035],{},"參數中的 ",[90,1033,1034],{},"{{...}}"," 會在執行前替換:",[1037,1038,1039,1046],"ul",{},[1040,1041,1042,1045],"li",{},[90,1043,1044],{},"{{ctx.data.xxx}}"," —— 事件攜帶的資料",[1040,1047,1048,1051,1052,546],{},[90,1049,1050],{},"{{ctx.variables.xxx}}"," —— 執行過程中產生的變數 (如 ",[90,1053,1054],{},"http_response",[1056,1057,1058],"style",{},"html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":660,"searchDepth":682,"depth":682,"links":1060},[1061,1065],{"id":83,"depth":682,"text":84,"children":1062},[1063,1064],{"id":101,"depth":693,"text":101},{"id":410,"depth":693,"text":410},{"id":645,"depth":682,"text":646,"children":1066},[1067,1068],{"id":890,"depth":693,"text":891},{"id":1028,"depth":693,"text":1028},"本文件介紹 PML 2 外掛系統的所有觸發點。","md",null,{},{"title":14,"description":1069},"4lCAhbvdB23O4-rK6w42m6QzmIohEXrN0IPf5HoebIU",[1076,1078],{"title":10,"path":11,"stem":12,"description":1077,"children":-1},"本文將概略介紹 PML 2 的外掛系統。",{"title":18,"path":19,"stem":20,"description":1079,"children":-1},"本文件介紹 PML 2 外掛系統的運算子。",1791004266455]