-
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Closed as not planned
Description
In wechaty post mixin:
wechaty/src/user-modules/post.ts
Lines 304 to 313 in 8bec2d5
if (PUPPET.payloads.isPostServer(this.payload)) { | |
for (const messageId of this.payload.sayableList) { | |
const message = await this.wechaty.Message.find({ id: messageId }) | |
if (message) { | |
const sayable = await message.toSayable() | |
if (sayable) { | |
yield sayable | |
} | |
} | |
} |
We get server post sayable by loading messages from the sayable id. This works for mixed messages (messages containing many sayables), however for moment and moment replies, it doesn't make no scence to convert them to messages.
So I say we create puppet method to get sayables with id, it should be somehting like this:
wechaty-puppet
// get a sayable from server post (which comes with Id)
abstract postPayloadSayable (postId: string, sayableId: string): Promise<SayablePayload>
wechaty:
async * [Symbol.asyncIterator] (): AsyncIterableIterator<Sayable> {
log.verbose('Post', '[Symbol.asyncIterator]()')
const payloadToSayable = payloadToSayableWechaty(this.wechaty)
if (PUPPET.payloads.isPostServer(this.payload)) {
for (const sayableId of this.payload.sayableList) {
const sayable = await this.getSayableWithId(sayableId)
if (sayable) {
yield sayable
}
}
} else { // client
for (const sayablePayload of this.payload.sayableList) {
const sayable = await payloadToSayable(sayablePayload)
if (sayable) {
yield sayable
}
}
}
}
async getSayableWithIndex (sayableIndex: number) {
log.verbose('Post', 'getSayableWithIndex(%s)', sayableIndex)
const payloadToSayable = payloadToSayableWechaty(this.wechaty)
if (PUPPET.payloads.isPostServer(this.payload)) {
const sayablePayload = await this.wechaty.puppet.postPayloadSayable(this.id!, this.payload.sayableList[sayableIndex]!)
const sayable = await payloadToSayable(sayablePayload)
return sayable
} else {
const sayablePayload = this.payload.sayableList[sayableIndex]
if (sayablePayload) {
const sayable = await payloadToSayable(sayablePayload)
return sayable
} else {
throw new Error(`post has no sayable with index ${sayableIndex}`)
}
}
}
async getSayableWithId (id: string) {
log.verbose('Post', 'getSayableWithId(%s)', id)
if (PUPPET.payloads.isPostServer(this.payload)) {
const payloadToSayable = payloadToSayableWechaty(this.wechaty)
const sayablePayload = await this.wechaty.puppet.postPayloadSayable(this.id!, id)
const sayable = await payloadToSayable(sayablePayload)
return sayable
} else {
throw new Error('client post sayable has no Id')
}
}
Metadata
Metadata
Assignees
Labels
No labels