Skip to content

Commit

Permalink
load contact payload from room member data source (#1397)
Browse files Browse the repository at this point in the history
  • Loading branch information
huan committed Jun 29, 2018
1 parent 1180529 commit 2cd94d4
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 22 deletions.
56 changes: 43 additions & 13 deletions src/puppet-padchat/puppet-padchat.ts
Expand Up @@ -44,6 +44,8 @@ import {

FriendshipPayload,
FriendshipPayloadReceive,
ContactType,
ContactGender,
} from 'wechaty-puppet'

import {
Expand Down Expand Up @@ -693,24 +695,12 @@ export class PuppetPadchat extends Puppet {
if (!this.padchatManager) {
throw new Error('no padchat manager')
}
let rawPayload = await this.padchatManager.contactRawPayload(contactId)
const rawPayload = await this.padchatManager.contactRawPayload(contactId)

if (!rawPayload.user_name && contactId === this.id) {
return generateFakeSelfBot(contactId)
}

if (!rawPayload || Object.keys(rawPayload).length <= 0) {
const roomList = await this.contactRoomList(contactId)
if (roomList.length > 0) {
const roomMemberPayload = await this.roomMemberPayload(roomList[0], contactId)
rawPayload = {
big_head: roomMemberPayload.avatar,
nick_name: roomMemberPayload.name,
user_name: roomMemberPayload.id,
} as any as PadchatContactPayload
}
}

return rawPayload
}

Expand Down Expand Up @@ -751,6 +741,44 @@ export class PuppetPadchat extends Puppet {
return payload
}

/**
* Overwrite the Puppet.contactPayload()
*/
public async contactPayload(
contactId: string,
): Promise<ContactPayload> {

const rawPayload = await this.contactRawPayload(contactId)

/**
* Issue #1397
* https://github.com/Chatie/wechaty/issues/1397#issuecomment-400962638
*
* Try to use the contact information from the room
* when it is not available directly
*/
if (!rawPayload || Object.keys(rawPayload).length <= 0) {
const roomList = await this.contactRoomList(contactId)
if (roomList.length > 0) {
const roomId = roomList[0]
const roomMemberPayload = await this.roomMemberPayload(roomId, contactId)
if (roomMemberPayload) {
const payload: ContactPayload = {
avatar : roomMemberPayload.avatar,
name : roomMemberPayload.name,
id : roomMemberPayload.id,
gender : ContactGender.Unknown,
type : ContactType.Personal,
}
return payload
}
}
throw new Error('no raw payload')
}

return await this.contactRawPayloadParser(rawPayload)
}

/**
*
* Message
Expand Down Expand Up @@ -972,6 +1000,8 @@ export class PuppetPadchat extends Puppet {
id : rawPayload.user_name,
inviterId : rawPayload.invited_by,
roomAlias : rawPayload.chatroom_nick_name,
avatar : rawPayload.big_head,
name : rawPayload.nick_name,
}

return payload
Expand Down
10 changes: 8 additions & 2 deletions src/puppet-puppeteer/puppet-puppeteer.ts
Expand Up @@ -861,10 +861,14 @@ export class PuppetPuppeteer extends Puppet {
// // console.log(aliasDict)
// }

const memberIdList = rawPayload.MemberList
? rawPayload.MemberList.map(m => m.UserName)
: []

const roomPayload: RoomPayload = {
id,
topic: Misc.plainText(rawPayload.NickName || ''),
// memberIdList,
topic: Misc.plainText(rawPayload.NickName || ''),
memberIdList,
// aliasDict,
// nameMap,
// roomAliasMap,
Expand Down Expand Up @@ -1008,6 +1012,8 @@ export class PuppetPuppeteer extends Puppet {
const payload: RoomMemberPayload = {
id : rawPayload.UserName,
roomAlias : rawPayload.DisplayName,
name : rawPayload.NickName,
avatar : rawPayload.HeadImgUrl,
}
return payload
}
Expand Down
7 changes: 4 additions & 3 deletions src/puppet-puppeteer/web-schemas.ts
Expand Up @@ -279,9 +279,10 @@ export const enum WebMediaType {
}

export interface WebRoomRawMember {
UserName: string,
NickName: string,
DisplayName: string,
UserName : string,
NickName : string,
DisplayName : string,
HeadImgUrl : string,
}

export interface WebRoomRawPayload {
Expand Down
8 changes: 7 additions & 1 deletion src/puppet-wechat4u/puppet-wechat4u.ts
Expand Up @@ -650,10 +650,14 @@ export class PuppetWechat4u extends Puppet {
// })
// }

const memberIdList = rawPayload.MemberList
? rawPayload.MemberList.map(m => m.UserName)
: []

const roomPayload: RoomPayload = {
id,
topic: rawPayload.NickName || '',
// memberIdList,
memberIdList,
// aliasDict,
}
return roomPayload
Expand Down Expand Up @@ -780,6 +784,8 @@ export class PuppetWechat4u extends Puppet {
const payload: RoomMemberPayload = {
id : rawPayload.UserName,
roomAlias : rawPayload.DisplayName,
name : rawPayload.NickName,
avatar : rawPayload.HeadImgUrl,
}
return payload
}
Expand Down
7 changes: 4 additions & 3 deletions src/puppet-wechat4u/web-schemas.ts
Expand Up @@ -279,9 +279,10 @@ export const enum WebMediaType {
}

export interface WebRoomRawMember {
UserName: string,
NickName: string,
DisplayName: string,
UserName : string,
NickName : string,
DisplayName : string,
HeadImgUrl : string,
}

export interface WebRoomRawPayload {
Expand Down

0 comments on commit 2cd94d4

Please sign in to comment.