Skip to content

Commit

Permalink
Users Mapping Optimization (#83)
Browse files Browse the repository at this point in the history
* Introduce the dotenv module;
update package.json;

* 0.8.29

* avoid "TypeError: Cannot read property 'id' of null"

* can show profile of bot now!

* upload avatar

* avoid inviting self

* join room automatically

* 0.8.30
  • Loading branch information
lprintf authored Jul 22, 2021
1 parent 64a145f commit 0bc2cb5
Show file tree
Hide file tree
Showing 6 changed files with 55 additions and 6 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,4 @@ t/

.DS_Store
.idea
config.yaml
2 changes: 2 additions & 0 deletions bin/matrix-appservice-wechaty.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ import {
log,
VERSION,
} from '../src/'
import dotenv from 'dotenv'

dotenv.config()
async function main () {
if (process.env.LOG_LEVEL) {
log.level(process.env.LOG_LEVEL as any)
Expand Down
9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "matrix-appservice-wechaty",
"version": "0.8.28",
"version": "0.8.30",
"description": "Matrix Application Services Bridge for Wechat",
"main": "dist/src/index.js",
"typings": "dist/src/index.d.ts",
Expand All @@ -13,6 +13,8 @@
"lint:es": "eslint --ignore-pattern tests/fixtures/ '{bin,src,tests}/**/*.ts' ",
"lint:ts": "tsc --noEmit",
"dev": "LOG_LEVEL=silly ts-node bin/matrix-appservice-wechaty.ts",
"dev:genarate-registration": "ts-node bin/matrix-appservice-wechaty.ts --config config.yaml --url http://localhost:8788 --generate-registration",
"dev:service": "ts-node bin/matrix-appservice-wechaty.ts --config config.yaml --file wechaty-registration.yaml",
"dev:watch": "LOG_LEVEL=silly npx nodemon --watch '{bin,src,tests}/**/*.ts' --exec './node_modules/.bin/ts-node' bin/matrix-appservice-wechaty.ts",
"pack": "npm pack",
"sloc": "sloc bin scripts src tests --details --format cli-table --keys total,source,comment && sloc bin scripts src tests",
Expand Down Expand Up @@ -40,10 +42,11 @@
"homepage": "https://github.com/huan/matrix-appservice-wechaty#readme",
"dependencies": {
"cuid": "^2.1.8",
"matrix-appservice-bridge": "^2.4.1",
"dotenv": "^10.0.0",
"matrix-appservice-bridge": "^2.7.0",
"read-pkg-up": "^7.0.1",
"update-notifier": "^5.1.0",
"wechaty": "^0.62.2"
"wechaty": "^0.62.3"
},
"devDependencies": {
"@chatie/eslint-config": "^0.12.3",
Expand Down
19 changes: 19 additions & 0 deletions src/appservice-manager.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import cuid from 'cuid'
import { ReadStream } from 'fs'

import {
Bridge,
Expand All @@ -7,6 +8,7 @@ import {
UserBridgeStore,
MatrixRoom,
AppServiceRegistration,
FileUploadOpts,
} from 'matrix-appservice-bridge'

import {
Expand Down Expand Up @@ -210,6 +212,9 @@ export class AppserviceManager extends Manager {
})

const matrixRoom = new MatrixRoom(roomInfo.room_id)
for await (const userId of userIdList.slice(1)) {
await this.bridge.getIntent(userId).join(matrixRoom.getId())
}
return matrixRoom
}

Expand All @@ -232,4 +237,18 @@ export class AppserviceManager extends Manager {
return Object.keys(result.joined)
}

public async setProfile (userId: string, avataUrl: string, displayName: string): Promise<void> {
const intent = this.bridge.getIntent(userId)
await intent.setAvatarUrl(avataUrl)
await intent.setDisplayName(displayName)
}

public async uploadContent (
content: string | Buffer | ReadStream,
userId?: string,
opts?: FileUploadOpts | undefined
): Promise<string> {
return this.bridge.getIntent(userId).uploadContent(content, opts)
}

}
22 changes: 20 additions & 2 deletions src/middle-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -264,12 +264,29 @@ export class MiddleManager extends Manager {
)

const matrixUserId = this.appserviceManager.generateVirtualUserId()
const matrixUser = new MatrixUser(matrixUserId)

const avatarFile = await wechatyUser.avatar()
const avatarBuffer = await avatarFile.toBuffer()
const avatarUrl = await this.appserviceManager.uploadContent(
avatarBuffer,
matrixUserId,
{ type: avatarFile.mimeType },
)

const matrixUser = new MatrixUser(matrixUserId, {
avatarUrl,
displayName: wechatyUser.name(),
})

// userData.name = wechatyUser.name() + APPSERVICE_NAME_POSTFIX

matrixUser.set(WECHATY_USER_DATA_KEY, userData)
await this.appserviceManager.userStore.setMatrixUser(matrixUser)
void this.appserviceManager.setProfile(
matrixUserId,
avatarUrl,
wechatyUser.name()
)

return matrixUser
}
Expand Down Expand Up @@ -300,7 +317,8 @@ export class MiddleManager extends Manager {
roomName = await wechatyRoomOrUser.topic()
for await (const member of wechatyRoomOrUser) {
const matrixUser = await this.matrixUser(member)
inviteeIdList.push(matrixUser.getId())
this.wechatyManager.ifSelfWechaty(member.id)
|| inviteeIdList.push(matrixUser.getId())
}
} else if (wechatyRoomOrUser instanceof WechatyUser) {
// User: direct message
Expand Down
8 changes: 7 additions & 1 deletion src/wechaty-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export class WechatyManager extends Manager {

protected matrixWechatyDict: Map<string, Wechaty>
protected wechatyMatrixDict: WeakMap<Wechaty, string>
protected selfWechaty: Wechaty | undefined

public appserviceManager!: AppserviceManager
public middleManager!: MiddleManager
Expand Down Expand Up @@ -237,6 +238,7 @@ export class WechatyManager extends Manager {
wechatyContact: Contact,
): Promise<void> {
log.verbose('WechatyManager', 'onLogin(%s)', wechatyContact)
this.selfWechaty = wechatyContact.wechaty

const text = 'You are now logged in to Wechat. Your user name is: ' + wechatyContact.name()

Expand Down Expand Up @@ -270,7 +272,7 @@ export class WechatyManager extends Manager {
log.verbose('WechatyManager', 'onMessage("%s") from "%s" to "%s" with age "%s" (timestamp: "%s")',
message,
message.from()!.id,
message.to()!.id,
(message.to() || message.room())!.id,
message.age(),
(message as any).payload.timestamp,
)
Expand Down Expand Up @@ -350,4 +352,8 @@ export class WechatyManager extends Manager {
// )
}

public ifSelfWechaty (wechatyId:string):boolean {
return this.selfWechaty!.puppet.selfId() === wechatyId
}

}

0 comments on commit 0bc2cb5

Please sign in to comment.