
Security News
Inside Lodash’s Security Reset and Maintenance Reboot
Lodash 4.17.23 marks a security reset, with maintainers rebuilding governance and infrastructure to support long-term, sustainable maintenance.
json-hook-trigger
Advanced tools
一個分析 json 內容符不符合條件,符合的話就呼叫對應 function 的 hook
if source json match aims_object , cell hook function
對! 我原本想要叫 json-hook, 結果有人先搶一步了 Orz...
I originally wanted to call json-hook, but somebody got the first step. Orz...
npm i -g json-hook-trigger
打開 gs 編輯頁面
-> "資源"
-> "程式庫"
-> 將 1lfFZa5p7bjHeYIQ0iFwKaE5HnS3ypK2vRVuZaonnXTQLzc0dZBcgeepO 貼上輸入框
-> "新增"
-> 選擇最後版本(記得阿 不然儲存不了)
-> "儲存"~
Open Script Editor.
-> Resource
-> Library
-> Paste Script ID 1lfFZa5p7bjHeYIQ0iFwKaE5HnS3ypK2vRVuZaonnXTQLzc0dZBcgeepO to box
-> Add library
-> select lastest version and save
const json_hook = require('json-hook-trigger');
var hook = new json_hook.json_hook()
import {json_hook} from 'json-hook-trigger'
var hook = new json_hook()
var hook = new jsonhook.json_hook()
// 'jsonhook' is follow "Identifier"
var source = {
"update_id": 910469164,
"message": {
"message_id": 64609,
"from": {
"id": 207014603,
"is_bot": false,
"first_name": "永格天",
"last_name": "(則天)",
"username": "we684123",
"language_code": "zh-hant"
},
"chat": {
"id": 207014603,
"first_name": "永格天",
"last_name": "(則天)",
"username": "we684123",
"type": "private"
},
"date": 1594795274,
"text": "ping"
}
}
var aims = {
"and": [{
'targer': ["message", 'text'],
'value': 'ping',
'only_exist': false,
'use_re': true
}]
}
function ping(incoming) {
console.log("get ping time = " + incoming.message.date);
}
hook.addHook(aims, ping)
var incoming = source
hook.macth_run(source,incoming,false) // get ping time = 1594795274
用來綁定 '觸發條件' 與 '要被執行的 function'
| Parameters | type | Required | Description |
|---|---|---|---|
| hook_aims | aims_object | Yes | 描述比對方式的json,其格式看 aims_object |
| hook_function | function or async function | Yes | 如果比對成功會執行這個 function |
| Return | void |
|---|
列出當前綁定的 '觸發條件' 跟 '綁定的function'
| Return | void |
|---|
用來綁定 '觸發條件' 與 '要被執行的 function'
| Parameters | type | Required | Description |
|---|---|---|---|
| source | object | Yes | 被 hook_aims 比較的 object |
| incoming | any | Optional | 要被丟進綁定函數的東西 |
| strict_equality | boolean | Optional | 預設 false , 如果 false 則執行相等於比較(=\=), true 則進行全等於比較(=\=\=) |
| Return | void |
|---|
⚠️這個只能在 google apps script 上執行⚠️
⚠️This can only be used on google apps script⚠️
能夠自動執行符合 Regex 規則的 function,用來自動載入 plugin。
Able to automatically execute functions that comply with Regex rules
Used to automatically load plugin
| Parameters | type | Required | Description |
|---|---|---|---|
| this | object | Yes | 只能是 this, 不能更改 |
| hook | object | Yes | hook 本體 |
| hook_name | string | Yes | hook 的名稱,一定要一樣 |
| Return | void |
|---|
function main() {
var hook = new jsonhook.json_hook()
// 'jsonhook' is follow "Identifier"
var source = {
"update_id": 910469164,
"message": {
"date": 1594795274,
"text": "ping"
}
}
// load_plugins
// hook.plugin_re_str = '^plugins' // <- Optional, RegExp text
hook.load_gas_plugin(this, hook, "hook")
var incoming = source
hook.macth_run(source, incoming, false) // get ping time = 1594795274
}
function plugin_ping(hook){
var aims = {
"and": [{
'targer': ["message", 'text'],
'value': 'ping',
'only_exist': false,
'use_re': true
}]
}
function ping(incoming) {
console.log("get ping time = " + incoming.message.date);
}
hook.addHook(aims, ping)
}
⚠️這個只能在 NodeJs 上執行⚠️
⚠️This can only be used on NodeJs⚠️
使用後會自動載入 ./plugins 資料夾,並將模組引入。
After use, it will automatically load the "./plugins" folder and import the module
| Parameters | type | Required | Description |
|---|---|---|---|
| hook | object | Yes | hook 本體 |
| hook_name | string | Yes | hook 的名稱,一定要一樣 |
| Return | void |
|---|
function main() {
const json_hook = require('./hook');
var hook = new json_hook.json_hook()
var source = {
"update_id": 910469164,
"message": {
"date": 1594795274,
"text": "ping"
}
}
// load_plugins
hook.load_nodejs_plugin(hook,"hook")
var incoming = source
hook.macth_run(source, incoming, false) // get ping time = 1594795274
}
function plugin_ping(hook){
var aims = {
"and": [{
'targer': ["message", 'text'],
'value': 'ping',
'only_exist': false,
'use_re': true
}]
}
function ping(incoming) {
console.log("get ping time = " + incoming.message.date);
}
hook.addHook(aims, ping)
}
plugin_re_str 型別是 string
用來當作 RegExp 的字串
配合 load_gas_plugin() 使用
預設是 "^plugin"
this type is string
set RegExp text (for match function)
Use with load_gas_plugin()
The default is "^plugin"
plugins_folder 型別是 string
用來表示 plugins 的資料夾位置
配合 load_nodejs_plugin() 使用
預設是 "./plugins"
plugins_folder type is string Used to indicate the folder location of plugins Use with load_nodejs_plugin() The default is'./plugins'
aims_object 只是一個特定格式的 object。 其內包含 and、or、not 三個條件
顧名思義,and 內列的條件皆須遵守,or 則只要有一個遵守就好 not 則是會把結果反過來,所以 aims['not']['and'] 是皆須不符合 aims['not']['or'] 則是任一不符合
| 參數 parameter | Required | 說明 description |
|---|---|---|
| aims | Yes | 比對模板json |
| aims['and'] | 如果沒有 aims['or'],則 Yes | 在這個array下的條件 皆須符合 才可以 |
| aims['or'] | 如果沒有 aims['and'],則 Yes | 在這個array下的條件者要 一項符合 就可以 |
| aims['not'] | Optional | 在這個模式下的的 and 跟 or 會 反轉最終結果 |
| aims['not']['and'] | Optional | 在這個array下的條件 皆須不符合 才可以 |
| aims['not']['or'] | Optional | 在這個array下的條件者要 一項不符合 就可以 |
amis = {
// source['message']['forward_from'] 必須存在
"and": [{
'targer': ["message", "forward_from"],
'value': '',
'only_exist': true,
'use_re': false
}],
// 當 source['message']['chat']['id'] 為 207014603 或 -1001097080770 都可以接受
"or": [{
'targer': ["message", "chat", "id"],
'value': '207014603',
'only_exist': false,
'use_re': false
}, {
'targer': ["message", "chat", "id"],
'value': '-1001097080770',
'only_exist': false,
'use_re': false
}],
// 不接受當 source['message']['caption'] 等於 '不處理k' 的時候
"not": {
"and": [{
'targer': ["message", "caption"],
'value': '不處理k',
'only_exist': false,
'use_re': false
}],
"or": []
}
}
{
'targer': ["message", "caption"],
'value': '不處理',
'only_exist': false,
'use_re': false
}
| 參數 parameter | type | Required | 說明 description |
|---|---|---|---|
| targer | String Array | Yes | 字串陣列,用來尋找指定目標 |
| value | any | Yes | 比對指定目標的值 |
| only_exist | boolean | Yes | 是否只要指定目標存在就好(!= undefined) |
| use_re | boolean | Yes | 是否啟用 Regex 比對模式 |
如果你的執行環境不是 google Apps Script 或是 NodeJs 那麼可以考慮使用 assemble.py 將 plugins 直接整合到一個檔案 用法如下:
python .\assemble.py --help
Usage: assemble.py [OPTIONS]
Options:
-i, --input TEXT 程式本體(main.js),預設 "./main.js"
-p, --plugins_folder TEXT plugins 資料夾的位置,預設 "./plugins"
-a, --annotation TEXT 註解的名稱,預設是 "// load_plugins"
-n, --new_name TEXT 新檔案的名稱,預設是 "main.ass.js"
--help Show this message and exit.
詳細可以下載這個專案後,直接執行 ./assemble/assemble.py 看看
ps' 我有順便用 win x64 的版本,有需要可以使用。
2020/10/17 - (v1.2.0)
2020/10/15 - (v1.1.0)
2020/10/08 - (v1.0.0)
FAQs
一個分析 json 內容符不符合條件,符合的話就呼叫對應 function 的 hook
The npm package json-hook-trigger receives a total of 4 weekly downloads. As such, json-hook-trigger popularity was classified as not popular.
We found that json-hook-trigger demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Lodash 4.17.23 marks a security reset, with maintainers rebuilding governance and infrastructure to support long-term, sustainable maintenance.

Security News
n8n led JavaScript Rising Stars 2025 by a wide margin, with workflow platforms seeing the largest growth across categories.

Security News
The U.S. government is rolling back software supply chain mandates, shifting from mandatory SBOMs and attestations to a risk-based approach.