fix: return poll vote reactions (#3694)
* wip: return poll vote reactions * wip: add module * wip: return poll vote reactions * wip: return poll vote reactions * Update Client.js * Update PollVote.js * wip: use async getMessagesById * Update Client.js * style: clean shit * style: reformat code --------- Co-authored-by: tuyuribr <45042245+tuyuribr@users.noreply.github.com>
This commit is contained in:
parent
6d3078fd77
commit
2ac982ee1c
4 changed files with 63 additions and 27 deletions
|
|
@ -706,14 +706,15 @@ class Client extends EventEmitter {
|
||||||
this.emit(Events.MESSAGE_CIPHERTEXT, new Message(this, msg));
|
this.emit(Events.MESSAGE_CIPHERTEXT, new Message(this, msg));
|
||||||
});
|
});
|
||||||
|
|
||||||
await exposeFunctionIfAbsent(this.pupPage, 'onPollVoteEvent', (vote) => {
|
await exposeFunctionIfAbsent(this.pupPage, 'onPollVoteEvent', (votes) => {
|
||||||
const _vote = new PollVote(this, vote);
|
for (const vote of votes) {
|
||||||
/**
|
/**
|
||||||
* Emitted when some poll option is selected or deselected,
|
* Emitted when some poll option is selected or deselected,
|
||||||
* shows a user's current selected option(s) on the poll
|
* shows a user's current selected option(s) on the poll
|
||||||
* @event Client#vote_update
|
* @event Client#vote_update
|
||||||
*/
|
*/
|
||||||
this.emit(Events.VOTE_UPDATE, _vote);
|
this.emit(Events.VOTE_UPDATE, new PollVote(this, vote));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.pupPage.evaluate(() => {
|
await this.pupPage.evaluate(() => {
|
||||||
|
|
@ -740,10 +741,6 @@ class Client extends EventEmitter {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
window.Store.Chat.on('change:unreadCount', (chat) => {window.onChatUnreadCountEvent(chat);});
|
window.Store.Chat.on('change:unreadCount', (chat) => {window.onChatUnreadCountEvent(chat);});
|
||||||
window.Store.PollVote.on('add', async (vote) => {
|
|
||||||
const pollVoteModel = await window.WWebJS.getPollVoteModel(vote);
|
|
||||||
pollVoteModel && window.onPollVoteEvent(pollVoteModel);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (window.compareWwebVersions(window.Debug.VERSION, '>=', '2.3000.1014111620')) {
|
if (window.compareWwebVersions(window.Debug.VERSION, '>=', '2.3000.1014111620')) {
|
||||||
const module = window.Store.AddonReactionTable;
|
const module = window.Store.AddonReactionTable;
|
||||||
|
|
@ -761,6 +758,39 @@ class Client extends EventEmitter {
|
||||||
|
|
||||||
return ogMethod(...args);
|
return ogMethod(...args);
|
||||||
}).bind(module);
|
}).bind(module);
|
||||||
|
|
||||||
|
const pollVoteModule = window.Store.AddonPollVoteTable;
|
||||||
|
const ogPollVoteMethod = pollVoteModule.bulkUpsert;
|
||||||
|
|
||||||
|
pollVoteModule.bulkUpsert = (async (...args) => {
|
||||||
|
const votes = await Promise.all(args[0].map(async vote => {
|
||||||
|
const msgKey = vote.id;
|
||||||
|
const parentMsgKey = vote.pollUpdateParentKey;
|
||||||
|
const timestamp = vote.t / 1000;
|
||||||
|
const sender = vote.author ?? vote.from;
|
||||||
|
const senderUserJid = sender._serialized;
|
||||||
|
|
||||||
|
let parentMessage = window.Store.Msg.get(parentMsgKey._serialized);
|
||||||
|
if (!parentMessage) {
|
||||||
|
const fetched = await window.Store.Msg.getMessagesById([parentMsgKey._serialized]);
|
||||||
|
parentMessage = fetched?.messages?.[0] || null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
...vote,
|
||||||
|
msgKey,
|
||||||
|
sender,
|
||||||
|
parentMsgKey,
|
||||||
|
senderUserJid,
|
||||||
|
timestamp,
|
||||||
|
parentMessage
|
||||||
|
};
|
||||||
|
}));
|
||||||
|
|
||||||
|
window.onPollVoteEvent(votes);
|
||||||
|
|
||||||
|
return ogPollVoteMethod.apply(pollVoteModule, args);
|
||||||
|
}).bind(pollVoteModule);
|
||||||
} else {
|
} else {
|
||||||
const module = window.Store.createOrUpdateReactionsModule;
|
const module = window.Store.createOrUpdateReactionsModule;
|
||||||
const ogMethod = module.createOrUpdateReactions;
|
const ogMethod = module.createOrUpdateReactions;
|
||||||
|
|
|
||||||
|
|
@ -34,13 +34,21 @@ class PollVote extends Base {
|
||||||
* may occur when they deselected all poll options
|
* may occur when they deselected all poll options
|
||||||
* @type {SelectedPollOption[]}
|
* @type {SelectedPollOption[]}
|
||||||
*/
|
*/
|
||||||
this.selectedOptions =
|
if (data.selectedOptionLocalIds.length > 0) {
|
||||||
data.selectedOptionLocalIds.length > 0
|
if(data.parentMessage) { // temporary failsafe
|
||||||
? data.selectedOptionLocalIds.map((e) => ({
|
this.selectedOptions = data.selectedOptionLocalIds.map((e) => ({
|
||||||
name: data.parentMessage.pollOptions.find((x) => x.localId === e).name,
|
name: data.parentMessage.pollOptions.find((x) => x.localId === e).name,
|
||||||
localId: e
|
localId: e
|
||||||
}))
|
}));
|
||||||
: [];
|
} else {
|
||||||
|
this.selectedOptions = data.selectedOptionLocalIds.map((e) => ({
|
||||||
|
name: undefined,
|
||||||
|
localId: e
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.selectedOptions = [];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Timestamp the option was selected or deselected at
|
* Timestamp the option was selected or deselected at
|
||||||
|
|
@ -54,6 +62,12 @@ class PollVote extends Base {
|
||||||
*/
|
*/
|
||||||
this.parentMessage = new Message(this.client, data.parentMessage);
|
this.parentMessage = new Message(this.client, data.parentMessage);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The poll creation message id
|
||||||
|
* @type {Object}
|
||||||
|
*/
|
||||||
|
this.parentMsgKey = data.parentMsgKey;
|
||||||
|
|
||||||
return super._patch(data);
|
return super._patch(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,7 @@ exports.ExposeStore = () => {
|
||||||
window.Store.DeviceList = window.require('WAWebApiDeviceList');
|
window.Store.DeviceList = window.require('WAWebApiDeviceList');
|
||||||
window.Store.HistorySync = window.require('WAWebSendNonMessageDataRequest');
|
window.Store.HistorySync = window.require('WAWebSendNonMessageDataRequest');
|
||||||
window.Store.AddonReactionTable = window.require('WAWebAddonReactionTableMode').reactionTableMode;
|
window.Store.AddonReactionTable = window.require('WAWebAddonReactionTableMode').reactionTableMode;
|
||||||
|
window.Store.AddonPollVoteTable = window.require('WAWebAddonPollVoteTableMode').pollVoteTableMode;
|
||||||
window.Store.PinnedMsgUtils = window.require('WAWebPinInChatSchema');
|
window.Store.PinnedMsgUtils = window.require('WAWebPinInChatSchema');
|
||||||
window.Store.ChatGetters = window.require('WAWebChatGetters');
|
window.Store.ChatGetters = window.require('WAWebChatGetters');
|
||||||
window.Store.PinnedMsgUtils = window.require('WAWebSendPinMessageAction');
|
window.Store.PinnedMsgUtils = window.require('WAWebSendPinMessageAction');
|
||||||
|
|
|
||||||
|
|
@ -523,15 +523,6 @@ exports.LoadUtils = () => {
|
||||||
return msg;
|
return msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
window.WWebJS.getPollVoteModel = async (vote) => {
|
|
||||||
const _vote = vote.serialize();
|
|
||||||
if (!vote.parentMsgKey) return null;
|
|
||||||
const msg =
|
|
||||||
window.Store.Msg.get(vote.parentMsgKey) || (await window.Store.Msg.getMessagesById([vote.parentMsgKey]))?.messages?.[0];
|
|
||||||
msg && (_vote.parentMessage = window.WWebJS.getMessageModel(msg));
|
|
||||||
return _vote;
|
|
||||||
};
|
|
||||||
|
|
||||||
window.WWebJS.getChat = async (chatId, { getAsModel = true } = {}) => {
|
window.WWebJS.getChat = async (chatId, { getAsModel = true } = {}) => {
|
||||||
const isChannel = /@\w*newsletter\b/.test(chatId);
|
const isChannel = /@\w*newsletter\b/.test(chatId);
|
||||||
const chatWid = window.Store.WidFactory.createWid(chatId);
|
const chatWid = window.Store.WidFactory.createWid(chatId);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue