Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1.13.2 #199

Merged
merged 24 commits into from
Jan 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
const rules = {
"no-shadow": "off"
}

module.exports = {
extends: '@chatie',
"ignorePatterns": ["src/init-agent-script.ts", "src/init-agent-script.js"],
rules,
}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -65,3 +65,4 @@ typings/
t/
t.*
cache/*
src/init-agent-script.js
2 changes: 1 addition & 1 deletion examples/ding-dong-bot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ function onScan (payload: PUPPET.payloads.EventScan) {
'https://wechaty.js.org/qrcode/',
encodeURIComponent(payload.qrcode),
].join('')
console.info('StarterBot', 'onScan: %s(%s) - %s', payload.status, qrcodeImageUrl)
console.info('onScan: %s(%s) - %s', payload.status, qrcodeImageUrl)

qrcodeTerminal.generate(payload.qrcode, { small: true }) // show qrcode on console
console.info(`[${payload.status}] ${payload.qrcode}\nScan QR Code above to log in: `)
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions examples/quick-start.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function onScan(qrcode: string, status: ScanStatus) {
'https://wechaty.js.org/qrcode/',
encodeURIComponent(qrcode),
].join('')
console.info('StarterBot', 'onScan: %s(%s) - %s', status, qrcodeImageUrl)
console.info('onScan: %s(%s) - %s', status, qrcodeImageUrl)

qrcodeTerminal.generate(qrcode, { small: true }) // show qrcode on console
console.info(`[${status}] ${qrcode}\nScan QR Code above to log in: `)
Expand All @@ -31,7 +31,7 @@ function onScan(qrcode: string, status: ScanStatus) {
}

async function onLogin(user: Contact) {
log.info('StarterBot', '%s login', user)
log.info('onLogin', '%s login', user)
const roomList = await bot.Room.findAll()
console.info('room count:', roomList.length)

Expand Down
93 changes: 74 additions & 19 deletions examples/raw-sidecar.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* eslint-disable no-console */

/**
* Wechaty - https://github.com/wechaty/wechaty
*
Expand All @@ -21,10 +23,14 @@ import {
detach,
} from 'sidecar'

import { WeChatSidecar } from '../src/wechat-sidecar.js'
import {
WeChatSidecar,
// XpSidecar
} from '../src/wechat-sidecar.js'

async function main() {
console.info('WeChat Sidecar starting...')
// new XpSidecar({ wechatVersion: '3.9.2.23' })

const sidecar = new WeChatSidecar()
await attach(sidecar)
Expand All @@ -36,39 +42,84 @@ async function main() {
const isSupported = await sidecar.checkSupported()
console.info(`\nWeChat Version: ${ver} -> ${verStr} , Supported: ${isSupported}\n`)

const isLoggedIn = await sidecar.isLoggedIn()
console.info(`has Logged In: ${isLoggedIn}`)
const isLoggedIn = false
const myselfInfo = await sidecar.getMyselfInfo()
console.info(`myInfo: ${myselfInfo}`)

sidecar.on('hook', ({ method, args }) => {

console.info(`当前登陆账号信息: ${myselfInfo}`)

const loginUrl = await sidecar.getLoginUrl()
console.info(`登陆二维码地址loginUrl: ${loginUrl}`)

// const contact = await sidecar.getChatroomMemberInfo()
// //console.log(contact)
// for (const item of JSON.parse(contact)) {
// for(const wxid of item.roomMember){
// //console.log(wxid)
// if(wxid === 'tyutluyc'){
// const nick = await sidecar.getChatroomMemberNickInfo(wxid,item.roomid)
// console.log('wxid:====',wxid,"==nick:===",nick)
// }
// }

// }

sidecar.on('hook', async ({ method, args }) => {
// console.log(`onhook事件消息:${new Date().toLocaleString()}\n`, method, JSON.stringify(args))
console.log(`onhook事件消息:${new Date().toLocaleString()}`, method)
switch (method) {
case 'recvMsg':
void onRecvMsg(args)
break
case 'checkQRLogin':
onScan(args)
break
case 'loginEvent':
onLogin()
case 'loginEvent':{
if(!isLoggedIn){
const loginRes = await sidecar.isLoggedIn()
if(loginRes){
onLogin()
}
}
break
}
case 'agentReady':
console.log('agentReady...')
break
case 'logoutEvent':
onLogout(args[0] as number)
break

default:
console.info('onHook', method, JSON.stringify(args))
console.info('onHook没有匹配到处理方法:', method, JSON.stringify(args))
break
}

})

const onLogin = () => {
console.info('You are logged in.')
const onLogin = async () => {
console.info('登陆事件触发')
console.info(`登陆状态: ${isLoggedIn}`)
// await sidecar.sendMsg('filehelper', 'Sidecar is ready!')
const contacts = await sidecar.getContact()
// console.log(`contacts: ${contacts}`)
const contactsJSON = JSON.parse(contacts)
console.log('contacts列表:', contactsJSON.length)

for (const contact of contactsJSON) {
if(!contact.name) {
console.info('好友:', JSON.stringify(contact))
}
}

const roomList = await sidecar.getChatroomMemberInfo()
// console.log(`roomList: ${roomList}`)
const roomListJSON = JSON.parse(roomList)
console.log('roomList列表:', roomListJSON.length)
// for (const room of roomListJSON) {
// console.info('room:', room)
// }
}

const onLogout = (bySrv: number) => {
console.info('登出事件触发:', bySrv)
console.info(`You are logged out${bySrv ? ' because you were kicked by server.' : ''}.`)
}

Expand Down Expand Up @@ -97,22 +148,24 @@ async function main() {
}

const onRecvMsg = async (args: any) => {
console.info('recvMsg:', args)
console.info('onRecvMsg事件触发:', JSON.stringify(args))

if (args instanceof Error) {
console.error(args)
console.error('onRecvMsg: 参数错误 Error', args)
return
}

const toId = String(args[1])
const text = String(args[2])
const talkerId = String(args[3])

console.info('recvMsg: talkerId =', talkerId)
console.info('recvMsg: text =', text)
// const nickname = await sidecar.GetContactOrChatRoomNickname(talkerId)
// console.log('发言人昵称:', nickname)

const talker = await sidecar.getChatroomMemberNickInfo(talkerId,toId)
console.log('发言人:', talker)
if (talkerId && text === 'ding') {
console.info('recvMsg: ding found, reply dong')
console.info('叮咚测试: ding found, reply dong')
await sidecar.sendMsg(toId, 'dong')
// await sidecar.sendAtMsg(toId, 'dong',talkerId)
}
Expand All @@ -128,4 +181,6 @@ async function main() {
}

main()
.catch(console.error)
.catch(e=>{
console.error('主函数运行失败:', e)
})
47 changes: 31 additions & 16 deletions examples/ripe-wechaty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,37 +14,48 @@ import { FileBox } from 'file-box'

import { PuppetXp } from '../src/puppet-xp.js'
import qrcodeTerminal from 'qrcode-terminal'
import fs from 'fs'
import * as fs from 'fs'

function onScan (qrcode: string, status: ScanStatus) {
if (qrcode) {
const qrcodeImageUrl = [
'https://wechaty.js.org/qrcode/',
encodeURIComponent(qrcode),
].join('')
console.info('StarterBot', 'onScan: %s(%s) - %s', status, qrcodeImageUrl)
log.info('onScan', '%s(%s) - %s', status, qrcodeImageUrl)

qrcodeTerminal.generate(qrcode, { small: true }) // show qrcode on console
console.info(`[${status}] ${qrcode}\nScan QR Code above to log in: `)
log.info(`[${status}] ${qrcode}\nScan QR Code above to log in: `)
} else {
console.info(`[${status}]`)
log.info(`[${status}]`)
}
}

async function onLogin (user: Contact) {
log.info('StarterBot', '%s login', user)
log.info('onLogin', '%s login', user)
const roomList = await bot.Room.findAll()
console.info(roomList.length)
log.info('群数量:', roomList.length)
const contactList = await bot.Contact.findAll()
console.info(contactList.length)
log.info('联系人数量:', contactList.length)
const friends = contactList.filter(c => c.friend())
log.info('好友数量:', friends.length)
}

function onLogout (user: Contact) {
log.info('StarterBot', '%s logout', user)
log.info('onLogout', '%s logout', user)
}

async function onMessage (msg: Message) {
log.info('StarterBot', msg.toString())
// log.info('onMessage', msg.toString())
log.info('接收到消息:', JSON.stringify(msg))
const contact = msg.talker()
log.info('当前联系人信息:', JSON.stringify(contact))
const room = msg.room()
if(room){
log.info('当前群信息:', await room.topic())
log.info('当前群群主:', JSON.stringify(room.owner()))
}

if (msg.text() === 'ding') {
await msg.say('dong')
}
Expand Down Expand Up @@ -96,21 +107,25 @@ async function onMessage (msg: Message) {
// Log other non-text messages
const logData = {
date: new Date(),
from: msg.talker().name(),
talker: msg.talker(),
listener: msg.listener(),
room:await msg.room(),
text: msg.text(),
type: msg.type(),
}
const logPath = 'examples/log/message.log'

const logPath = 'examples/file/message.log'
fs.appendFileSync(logPath, JSON.stringify(logData, null, 2) + '\n')
log.info(`Logged message data to ${logPath}`)

log.info(`日志查看路径: ${logPath}`)
}
} catch (e) {
console.error(`Error handling message: ${e}`)
log.error(`Error handling message: ${e}`)
}

}

const puppet = new PuppetXp()
const puppet = new PuppetXp({wechatVersion:'0.0.0.0'})
const bot = WechatyBuilder.build({
name: 'ding-dong-bot',
puppet,
Expand All @@ -137,12 +152,12 @@ bot.on('room-invite', async roomInvitation => {
log.info('received room-invite event.')
await roomInvitation.accept()
} catch (e) {
console.error(e)
log.error('处理进群申请信息错误:', e)
}
})

bot.start()
.then(() => {
return log.info('StarterBot', 'Starter Bot Started.')
})
.catch(console.error)
.catch(log.error)
22 changes: 14 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "wechaty-puppet-xp",
"version": "1.13.1",
"version": "1.13.2",
"description": "Puppet XP for Wechaty",
"type": "module",
"exports": {
Expand All @@ -17,28 +17,31 @@
"scripts": {
"clean": "shx rm -fr dist/*",
"dist": "npm-run-all clean build dist:copy dist:commonjs",
"build:agent": "tsc src/init-agent-script.ts --outFile src/init-agent-script.js",
"build": "tsc && tsc -p tsconfig.cjs.json",
"build:agent": "tsc src/init-agent-script.ts --outFile src/init-agent-script.js",
"dist:commonjs": "jq -n \"{ type: \\\"commonjs\\\" }\" > dist/cjs/package.json",
"dist:copy": "npm-run-all copy:esm copy:cjs",
"copy:esm": "shx cp -R commonjs/ dist/esm/ && shx cp src/init-agent-script.js dist/esm/src",
"copy:cjs": "shx cp -R commonjs/ dist/cjs/ && shx cp src/init-agent-script.js dist/cjs/src",
"start": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ding-dong-bot.ts",
"quick-start": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/quick-start.ts",
"start:raw": "cross-env BROLOG_LEVEL=silly NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/raw-sidecar.ts",
"start:raw:info": "npm run build:agent && cross-env BROLOG_LEVEL=info NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/raw-sidecar.ts",
"start:ripe": "cross-env WECHATY_LOG=verbose NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ripe-wechaty.ts",
"start:ripe:info": "cross-env WECHATY_LOG=info NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ripe-wechaty.ts",
"start:ripe:info": "npm run build:agent && cross-env WECHATY_LOG=info NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" node examples/ripe-wechaty.ts",
"lint": "npm run lint:es && npm run lint:ts && npm run lint:md",
"lint:md": "markdownlint README.md",
"lint:ts": "tsc --isolatedModules --noEmit",
"lint:es": "eslint \"src/**/*.ts\" \"tests/**/*.spec.ts\" --ignore-pattern tests/fixtures/",
"lint-fix": "eslint --fix \"src/**/*.ts\" \"tests/**/*.spec.ts\"",
"lint:fix": "eslint --fix \"src/**/*.ts\" \"tests/**/*.spec.ts\"",
"test": "npm run lint && npm run test:unit",
"test:pack": "bash -x scripts/npm-pack-testing.sh",
"test:unit": "cross-env NODE_OPTIONS=\"--no-warnings --loader=ts-node/esm\" tap \"src/**/*.spec.ts\" \"tests/**/*.spec.ts\""
},
"repository": {
"type": "git",
"url": "git+https://github.com/wechaty/wechaty-puppet-mock.git"
"url": "git+https://github.com/wechaty/puppet-xp.git"
},
"keywords": [
"chatie",
Expand All @@ -53,23 +56,26 @@
"author": "Huan LI <[email protected]>",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/wechaty/wechaty-puppet-mock/issues"
"url": "https://github.com/wechaty/puppet-xp/issues"
},
"homepage": "https://github.com/wechaty/wechaty-puppet-mock#readme",
"homepage": "https://github.com/wechaty/puppet-xp#readme",
"devDependencies": {
"@chatie/eslint-config": "^1.0.4",
"@chatie/git-scripts": "^0.7.7",
"@chatie/semver": "^0.4.7",
"@chatie/tsconfig": "^4.5.3",
"@types/cuid": "^2.0.1",
"@types/faker": "^5.5.9",
"@types/qrcode-terminal": "^0.12.0",
"@types/frida-gum": "^18.5.1",
"@types/node": "^20.10.5",
"@types/qrcode-terminal": "^0.12.2",
"@types/xml2js": "^0.4.9",
"frida-compile": "^16.4.1",
"husky": "^7.0.4",
"qrcode-terminal": "^0.12.0",
"tstest": "^1.0.1",
"typed-emitter": "^1.4.0",
"wechaty": "^1.7.21"
"wechaty": "^1.20.2"
},
"peerDependencies": {
"wechaty-puppet": "^1.10.2"
Expand Down
2 changes: 1 addition & 1 deletion src/agents/agent-script-3.3.0.115.js
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ const getTestInfoFunction = (() => {

})

// 002 get global data
// 002 get global dataf
const isLoggedInFunction = (() => {
loggedIn = moduleBaseAddress.add(offset.is_logged_in_offset).readU32()
return !!loggedIn
Expand Down
Loading
Loading