mirror of
https://github.com/cheveguerra/whatsapp-web.js.git
synced 2026-04-18 11:39:14 +00:00
230 lines
6.9 KiB
HTML
230 lines
6.9 KiB
HTML
<!doctype html>
|
|
<html>
|
|
|
|
<head>
|
|
<meta name="generator" content="JSDoc 3.6.3">
|
|
<meta charset="utf-8">
|
|
<title>whatsapp-web.js 1.3.0 » Source: structures/Chat.js</title>
|
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Karla:400,400i,700,700i" type="text/css">
|
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Noto+Serif:400,400i,700,700i" type="text/css">
|
|
<link rel="stylesheet" href="https://brick.a.ssl.fastly.net/Inconsolata:500" type="text/css">
|
|
<link href="css/baseline.css" rel="stylesheet">
|
|
</head>
|
|
|
|
<body onload="prettyPrint()">
|
|
<nav id="jsdoc-navbar" role="navigation" class="jsdoc-navbar">
|
|
<div id="jsdoc-navbar-container">
|
|
<div id="jsdoc-navbar-content">
|
|
<a href="index.html" class="jsdoc-navbar-package-name">whatsapp-web.<wbr>js 1.<wbr>3.<wbr>0</a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
<div id="jsdoc-body-container">
|
|
<div id="jsdoc-content">
|
|
<div id="jsdoc-content-container">
|
|
<div id="jsdoc-banner" role="banner">
|
|
</div>
|
|
<div id="jsdoc-main" role="main">
|
|
<header class="page-header">
|
|
<h1>Source: structures/Chat.js</h1>
|
|
</header>
|
|
<article>
|
|
<pre class="prettyprint linenums"><code>'use strict';
|
|
|
|
const Base = require('./Base');
|
|
const Message = require('./Message');
|
|
|
|
/**
|
|
* Represents a Chat on WhatsApp
|
|
* @extends {Base}
|
|
*/
|
|
class Chat extends Base {
|
|
constructor(client, data) {
|
|
super(client);
|
|
|
|
if (data) this._patch(data);
|
|
}
|
|
|
|
_patch(data) {
|
|
/**
|
|
* ID that represents the chat
|
|
* @type {object}
|
|
*/
|
|
this.id = data.id;
|
|
|
|
/**
|
|
* Title of the chat
|
|
* @type {string}
|
|
*/
|
|
this.name = data.formattedTitle;
|
|
|
|
/**
|
|
* Indicates if the Chat is a Group Chat
|
|
* @type {boolean}
|
|
*/
|
|
this.isGroup = data.isGroup;
|
|
|
|
/**
|
|
* Indicates if the Chat is readonly
|
|
* @type {boolean}
|
|
*/
|
|
this.isReadOnly = data.isReadOnly;
|
|
|
|
/**
|
|
* Amount of messages unread
|
|
* @type {number}
|
|
*/
|
|
this.unreadCount = data.unreadCount;
|
|
|
|
/**
|
|
* Unix timestamp for when the chat was created
|
|
* @type {number}
|
|
*/
|
|
this.timestamp = data.t;
|
|
|
|
/**
|
|
* Indicates if the Chat is archived
|
|
* @type {boolean}
|
|
*/
|
|
this.archived = data.archive;
|
|
|
|
return super._patch(data);
|
|
}
|
|
|
|
/**
|
|
* Send a message to this chat
|
|
* @param {string|MessageMedia|Location} content
|
|
* @param {object} options
|
|
* @returns {Promise&lt;Message>} Message that was just sent
|
|
*/
|
|
async sendMessage(content, options) {
|
|
return this.client.sendMessage(this.id._serialized, content, options);
|
|
}
|
|
|
|
/**
|
|
* Set the message as seen
|
|
* @returns {Promise&lt;Boolean>} result
|
|
*/
|
|
async sendSeen() {
|
|
return this.client.sendSeen(this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* Clears all messages from the chat
|
|
* @returns {Promise&lt;Boolean>} result
|
|
*/
|
|
async clearMessages() {
|
|
return this.client.pupPage.evaluate(chatId => {
|
|
return window.WWebJS.sendClearChat(chatId);
|
|
}, this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* Deletes the chat
|
|
* @returns {Promise&lt;Boolean>} result
|
|
*/
|
|
async delete() {
|
|
return this.client.pupPage.evaluate(chatId => {
|
|
return window.WWebJS.sendDeleteChat(chatId);
|
|
}, this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* Archives this chat
|
|
*/
|
|
async archive() {
|
|
return this.client.archiveChat(this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* un-archives this chat
|
|
*/
|
|
async unarchive() {
|
|
return this.client.unarchiveChat(this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* Loads chat messages, sorted from earliest to latest.
|
|
* @param {Object} searchOptions Options for searching messages. Right now only limit is supported.
|
|
* @param {Number} [searchOptions.limit=50] The amount of messages to return. Note that the actual number of returned messages may be smaller if there aren't enough messages in the conversation. Set this to Infinity to load all messages.
|
|
* @returns {Promise&lt;Array&lt;Message>>}
|
|
*/
|
|
async fetchMessages(searchOptions) {
|
|
if(!searchOptions || !searchOptions.limit) {
|
|
searchOptions = {limit: 50};
|
|
}
|
|
let messages = await this.client.pupPage.evaluate(async (chatId, limit) => {
|
|
const msgFilter = m => !m.isNotification; // dont include notification messages
|
|
|
|
const chat = window.Store.Chat.get(chatId);
|
|
let msgs = chat.msgs.models.filter(msgFilter);
|
|
|
|
while(msgs.length &lt; limit) {
|
|
const loadedMessages = await chat.loadEarlierMsgs();
|
|
if(!loadedMessages) break;
|
|
msgs = [...loadedMessages.filter(msgFilter), ...msgs];
|
|
}
|
|
|
|
msgs.sort((a, b) => (a.t > b.t) ? 1 : -1);
|
|
return msgs.splice(msgs.length - limit).map(m => m.serialize());
|
|
|
|
}, this.id._serialized, searchOptions.limit);
|
|
|
|
return messages.map(m => new Message(this.client, m));
|
|
}
|
|
|
|
/**
|
|
* Simulate typing in chat. This will last for 25 seconds.
|
|
*/
|
|
async sendStateTyping() {
|
|
return this.client.pupPage.evaluate(chatId => {
|
|
window.WWebJS.sendChatstate('typing', chatId);
|
|
return true;
|
|
}, this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* Simulate recording audio in chat. This will last for 25 seconds.
|
|
*/
|
|
async sendStateRecording() {
|
|
return this.client.pupPage.evaluate(chatId => {
|
|
window.WWebJS.sendChatstate('recording', chatId);
|
|
return true;
|
|
}, this.id._serialized);
|
|
}
|
|
|
|
/**
|
|
* Stops typing or recording in chat immediately.
|
|
*/
|
|
async clearState() {
|
|
return this.client.pupPage.evaluate(chatId => {
|
|
window.WWebJS.sendChatstate('stop', chatId);
|
|
return true;
|
|
}, this.id._serialized);
|
|
}
|
|
}
|
|
|
|
module.exports = Chat;
|
|
</code></pre>
|
|
</article>
|
|
</div>
|
|
</div>
|
|
<nav id="jsdoc-toc-nav" role="navigation"></nav>
|
|
</div>
|
|
</div>
|
|
<footer id="jsdoc-footer" class="jsdoc-footer">
|
|
<div id="jsdoc-footer-container">
|
|
<p>
|
|
Generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc</a> 3.6.3 on March 29, 2020.
|
|
</p>
|
|
</div>
|
|
</footer>
|
|
<script src="scripts/jquery.min.js"></script>
|
|
<script src="scripts/tree.jquery.js"></script>
|
|
<script src="scripts/prettify.js"></script>
|
|
<script src="scripts/jsdoc-toc.js"></script>
|
|
<script src="scripts/linenumber.js"></script>
|
|
<script src="scripts/scrollanchor.js"></script>
|
|
</body>
|
|
|
|
</html> |