File size: 2,425 Bytes
e192d16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
"use strict";

const utils = require("../utils");
const log = require("npmlog");

module.exports = function (defaultFuncs, api, ctx) {
	function makeTypingIndicator(typ, threadID, callback, isGroup) {
		const form = {
			typ: +typ,
			to: "",
			source: "mercury-chat",
			thread: threadID
		};

		// Check if thread is a single person chat or a group chat
		// More info on this is in api.sendMessage
		if (utils.getType(isGroup) == "Boolean") {
			if (!isGroup) {
				form.to = threadID;
			}
			defaultFuncs
				.post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form)
				.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
				.then(function (resData) {
					if (resData.error) {
						throw resData;
					}

					return callback();
				})
				.catch(function (err) {
					log.error("sendTypingIndicator", err);
					if (utils.getType(err) == "Object" && err.error === "Not logged in") {
						ctx.loggedIn = false;
					}
					return callback(err);
				});
		} else {
			api.getUserInfo(threadID, function (err, res) {
				if (err) {
					return callback(err);
				}

				// If id is single person chat
				if (Object.keys(res).length > 0) {
					form.to = threadID;
				}

				defaultFuncs
					.post("https://www.facebook.com/ajax/messaging/typ.php", ctx.jar, form)
					.then(utils.parseAndCheckLogin(ctx, defaultFuncs))
					.then(function (resData) {
						if (resData.error) {
							throw resData;
						}

						return callback();
					})
					.catch(function (err) {
						log.error("sendTypingIndicator", err);
						if (utils.getType(err) == "Object" && err.error === "Not logged in.") {
							ctx.loggedIn = false;
						}
						return callback(err);
					});
			});
		}
	}

	return function sendTypingIndicator(threadID, callback, isGroup) {
		if (
			utils.getType(callback) !== "Function" &&
			utils.getType(callback) !== "AsyncFunction"
		) {
			if (callback) {
				log.warn(
					"sendTypingIndicator",
					"callback is not a function - ignoring."
				);
			}
			callback = () => { };
		}

		makeTypingIndicator(true, threadID, callback, isGroup);

		return function end(cb) {
			if (
				utils.getType(cb) !== "Function" &&
				utils.getType(cb) !== "AsyncFunction"
			) {
				if (cb) {
					log.warn(
						"sendTypingIndicator",
						"callback is not a function - ignoring."
					);
				}
				cb = () => { };
			}

			makeTypingIndicator(false, threadID, cb, isGroup);
		};
	};
};