Disappearing messages fix

- Fixes crash issue on groups
- Fixes (i) on group chats when disappearing messages is on
This commit is contained in:
Adhiraj Singh
2021-03-19 21:18:21 +05:30
parent afea6c249e
commit a8f4e14412
4 changed files with 31 additions and 12 deletions

View File

@@ -254,8 +254,6 @@ export class WAConnection extends Base {
if (chat.messages.upsert(message).length) {
const chatUpdate: Partial<WAChat> = { jid, messages: newMessagesDB([ message ]) }
this.emit ('chat-update', chatUpdate)
// emit deprecated
this.emit ('message-update', message)
}
} else {
this.logger.debug ({ unhandled: true }, 'received message update for non-present message from ' + jid)
@@ -578,6 +576,18 @@ export class WAConnection extends Base {
const emitGroupUpdate = (update: Partial<WAGroupMetadata>) => this.emitGroupUpdate(jid, update)
switch (message.messageStubType) {
case WA_MESSAGE_STUB_TYPE.CHANGE_EPHEMERAL_SETTING:
chatUpdate.eph_setting_ts = message.messageTimestamp.toString()
chatUpdate.ephemeral = message.messageStubParameters[0]
if (+chatUpdate.ephemeral) {
chat.eph_setting_ts = chatUpdate.eph_setting_ts
chat.ephemeral = chatUpdate.ephemeral
} else {
delete chat.eph_setting_ts
delete chat.ephemeral
}
break
case WA_MESSAGE_STUB_TYPE.GROUP_PARTICIPANT_LEAVE:
case WA_MESSAGE_STUB_TYPE.GROUP_PARTICIPANT_REMOVE:
participants = message.messageStubParameters.map (whatsappID)

View File

@@ -12,7 +12,7 @@ import {
WATextMessage,
WAMessageContent, WAMetric, WAFlag, WAMessage, BaileysError, WA_MESSAGE_STATUS_TYPE, WAMessageProto, MediaConnInfo, MessageTypeProto, URL_REGEX, WAUrlInfo, WA_DEFAULT_EPHEMERAL, WAMediaUpload
} from './Constants'
import { generateMessageID, extensionForMediaMessage, whatsappID, unixTimestampSeconds, getAudioDuration, newMessagesDB, encryptedStream, decryptMediaMessageBuffer, generateThumbnail } from './Utils'
import { isGroupID, generateMessageID, extensionForMediaMessage, whatsappID, unixTimestampSeconds, getAudioDuration, newMessagesDB, encryptedStream, decryptMediaMessageBuffer, generateThumbnail } from './Utils'
import { Mutex } from './Mutex'
import { Readable } from 'stream'
@@ -57,13 +57,23 @@ export class WAConnection extends Base {
* For the default see WA_DEFAULT_EPHEMERAL
*/
async toggleDisappearingMessages(jid: string, ephemeralExpiration?: number, opts: { waitForAck: boolean } = { waitForAck: true }) {
const message = this.prepareMessageFromContent(
jid,
this.prepareDisappearingMessageSettingContent(ephemeralExpiration),
{}
)
await this.relayWAMessage(message, opts)
return message
if(isGroupID(jid)) {
const tag = this.generateMessageTag(true)
await this.setQuery([
[
'group',
{ id: tag, jid, tyoe: 'prop', author: this.user.jid },
[ [ 'ephemeral', { value: ephemeralExpiration.toString() }, null ] ]
]
], [WAMetric.group, WAFlag.other], tag)
} else {
const message = this.prepareMessageFromContent(
jid,
this.prepareDisappearingMessageSettingContent(ephemeralExpiration),
{}
)
await this.relayWAMessage(message, opts)
}
}
/** Prepares the message content */
async prepareMessageContent (message: string | WATextMessage | WALocationMessage | WAContactMessage | WAContactsArrayMessage | WAMediaUpload, type: MessageType, options: MessageOptions) {

View File

@@ -317,8 +317,6 @@ export class WAConnection extends Base {
const chatUpdate: Partial<WAChat> = { jid: messageKey.remoteJid, messages: newMessagesDB([ message ]) }
this.emit ('chat-update', chatUpdate)
// emit deprecated
this.emit ('message-update', message)
}
}
return result

View File

@@ -273,6 +273,7 @@ export const STORIES_JID = 'status@broadcast'
export enum WAFlag {
available = 160,
other = 136, // don't know this one
ignore = 1 << 7,
acknowledge = 1 << 6,
unavailable = 1 << 4,