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

Users Mapping Optimization #83

Merged
merged 8 commits into from
Jul 22, 2021
Merged
Show file tree
Hide file tree
Changes from 5 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
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.29",
"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
16 changes: 16 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 @@ -232,4 +234,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)
}

}
19 changes: 18 additions & 1 deletion 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 },
)
Comment on lines +268 to +274
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can also use the wechat image source url directly.


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
2 changes: 1 addition & 1 deletion src/wechaty-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,7 +270,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,
lprintf marked this conversation as resolved.
Show resolved Hide resolved
(message.to() || message.room())!.id,
message.age(),
(message as any).payload.timestamp,
)
Expand Down