add onebot doc

This commit is contained in:
yincong
2026-01-20 10:32:57 +08:00
parent c57b01c578
commit 2157ef8203
3 changed files with 70 additions and 15 deletions
+22 -14
View File
@@ -189,16 +189,31 @@ func loadJs() {
if p, ok := msg["payload"]; ok {
if pMap, ok := p.(map[string]interface{}); ok {
if t, ok := pMap["type"]; ok {
if t.(string) == "send" {
switch t.(string) {
case "send":
go SendHttpReq(msg)
} else if t.(string) == "finish" {
case "finish":
finishChan <- struct{}{}
} else if t.(string) == "upload" {
case "upload":
if selfId, ok := pMap["self_id"]; ok && myWechatId == "" {
fmt.Printf("✅ 检测到微信登录,当前账号: %s\n", selfId.(string))
myWechatId = selfId.(string)
}
case "upload_finish":
m := &SendMsg{
Type: "send_image",
}
if targetIdInter, ok := pMap["target_id"]; ok {
targetIdStr := targetIdInter.(string)
if strings.Contains(targetIdStr, "wxid_") {
m.UserId = targetIdStr
} else {
m.GroupID = targetIdStr
}
}
msgChan <- m
}
}
}
}
@@ -286,7 +301,7 @@ func SendWechatMsg(m *SendMsg) {
currTaskId := atomic.AddInt64(&taskId, 1)
log.Printf("📩 收到任务: %d\n", currTaskId)
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
targetId := m.UserId
@@ -307,16 +322,9 @@ func SendWechatMsg(m *SendMsg) {
result := fridaScript.ExportsCall("triggerUploadImg", targetId, md5Str, targetPath)
log.Printf("📩 上传图片任务执行结果%s, 参数:targetId: %s, md5Str: %s, targetPath: %s\n", result, targetId, md5Str, targetPath)
select {
case <-ctx.Done():
log.Printf("上传图片任务 %d 执行超时!\n", currTaskId)
case <-finishChan:
log.Printf("收到上传图片完成信号,任务 %d 完成\n", currTaskId)
}
result = fridaScript.ExportsCall("triggerSendImgMessage", currTaskId, myWechatId, targetId)
log.Printf("📩 发送图片任务执行%s, 参数:currTaskId: %d, myWechatId: %s, targetId: %s\n", result, currTaskId, myWechatId, targetId)
case "send_image":
result := fridaScript.ExportsCall("triggerSendImgMessage", currTaskId, myWechatId, targetId)
log.Printf("📩 发送图片任务执行结果%s, 参数:currTaskId: %d, myWechatId: %s, targetId: %s\n", result, currTaskId, myWechatId, targetId)
}
select {
+38
View File
@@ -0,0 +1,38 @@
## 如何使用onebot的http接口
### 使用方式和脚本基本一致:
1. 编译main.go或者直接下载编译好的onebot二进制文件
2. 如果不想关闭SIP直接使用,需要找到自己的图片位置:./onebot -type=gadget -image_path='/Users/xx/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files/wxid_xxx/temp/xxx/2026-01/Img/'
3. 发送一张图片,如果失败证明已经patch成功,可以正常使用。
4. 启动onebot服务,默认监听127.0.0.1:58080,可以通过http接口发送消息。
5. 会把收到的消息通过 http://127.0.0.1:36060/onebot 其他参数可用./onebot -h查看
### 接口信息
私聊是send_private_msg
群聊是send_group_msg
```
curl -i -X POST \
-H "Content-Type:application/json" \
-d \
'{
"message" : [{
"data" : {
"text" : "🚀successfully delete!"
},
"type" : "text"
},{
"data" : {
"file" : "base64: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"
},
"type" : "image"
} ],
"user_id" : "wxid_xxx"
}' \
'http://127.0.0.1:58080/send_private_msg'
返回结果:
{"status":"ok"}
```
+10 -1
View File
@@ -1046,11 +1046,20 @@ function patchCdnOnComplete() {
globalImageCdnKey = x2.add(0x60).readPointer().readUtf8String();
globalAesKey1 = x2.add(0x78).readPointer().readUtf8String();
globalMd5Key = x2.add(0x90).readPointer().readUtf8String();
const targetId = x2.add(0x40).readUtf8String();
console.log("[+] globalImageCdnKey: " + globalImageCdnKey + " globalAesKey1: " + globalAesKey1 +
" globalAesKey2: " + globalMd5Key);
" globalMd5Key: " + globalMd5Key);
send({
type: "finish",
})
if (globalImageCdnKey !== "" && globalImageCdnKey != null && globalAesKey1 !== "" && globalAesKey1 != null &&
globalMd5Key !== "" && globalMd5Key != null) {
send({
type: "upload_finish",
target_id: targetId,
})
}
} catch (e) {
console.log("[-] Memory access error at onEnter: " + e);
}