summaryrefslogtreecommitdiff
path: root/classes/CLIEvent.ts
blob: 124dcbb7679d607148f1759a52c55b12e799a884 (plain)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
import {Client} from "./Client";
import {ICLIEvent} from "../types/ICLIEvent";
import {ICLIResponse} from "../types/ICLIResponse";
import {GroupTypingMessage} from "./GroupTypingMessage";
import {User} from "./User";
import {DMTypingMessage} from "./DMTypingMessage";
import {GroupDataMessage} from "./GroupDataMessage";
import {DMDataMessage} from "./DMDataMessage";
import {UserDataType} from "../enums/UserDataType";
import {DMReactionMessage} from "./DMReactionMessage";
import {GroupReactionMessage} from "./GroupReactionMessage";
import {CLIDispatcher} from "./CLIDispatcher";
import {DMStickerMessage} from "./DMStickerMessage";
import {GroupStickerMessage} from "./GroupStickerMessage";
import {DMEditMessage} from "./DMEditMessage";
import {GroupEditMessage} from "./GroupEditMessage";
import {GroupDeleteMessage} from "./GroupDeleteMessage";
import {DMDeleteMessage} from "./DMDeleteMessage";
import {Group} from "./Group";

/**
 * A signal-cli event
 */
export class CLIEvent {
    static fromEvent(client: Client, data: ICLIEvent) {
        client.emit("cliEvent", data);

        if (data.method === "receive") {
            if (data.params.envelope.typingMessage) {
                if (client.verbose) console.log(data.params.envelope.typingMessage);

                if (data.params.envelope.typingMessage.groupId) {
                    let message: GroupTypingMessage = new GroupTypingMessage(
                        new User(data.params.envelope, UserDataType.Envelope, client),
                        data.params.envelope.typingMessage.action,
                        data.params.envelope.typingMessage.timestamp,
                        data.params.envelope.typingMessage.groupId,
                        client
                    );

                    client.emit("typingMessage", message);
                } else {
                    let message: DMTypingMessage = new DMTypingMessage(
                        new User(data.params.envelope, UserDataType.Envelope, client),
                        data.params.envelope.typingMessage.action,
                        data.params.envelope.typingMessage.timestamp,
                        client
                    );

                    client.emit("typingMessage", message);
                }
            } else if (data.params.envelope.editMessage) {
                if (client.verbose) console.log(data.params.envelope.editMessage);

                if (data.params.envelope.editMessage.dataMessage.groupInfo) {
                    let message: GroupEditMessage = new GroupEditMessage(
                        new User(data.params.envelope, UserDataType.Envelope, client),
                        data.params.envelope.editMessage.dataMessage,
                        data.params.envelope.editMessage.dataMessage.timestamp,
                        data.params.envelope.editMessage.dataMessage.groupInfo.groupId,
                        data.params.envelope.editMessage.targetSentTimestamp,
                        client
                    );

                    client.emit("editMessage", message);
                } else {
                    let message: DMEditMessage = new DMEditMessage(
                        new User(data.params.envelope, UserDataType.Envelope, client),
                        data.params.envelope.editMessage.dataMessage,
                        data.params.envelope.editMessage.dataMessage.timestamp,
                        data.params.envelope.editMessage.targetSentTimestamp,
                        client
                    );

                    client.emit("editMessage", message);
                }
            } else if (data.params.envelope.dataMessage) {
                if (client.verbose) console.log(data.params.envelope.dataMessage);

                if (data.params.envelope.dataMessage.groupInfo && data.params.envelope.dataMessage.groupInfo.type !== "DELIVER") {
                    if (data.params.envelope.dataMessage.groupInfo.type === "UPDATE") {
                        client.emit("groupUpdate", new Group(data.params.envelope.dataMessage.groupInfo.groupId, client));
                    }
                } else if (data.params.envelope.dataMessage.remoteDelete) {
                    if (data.params.envelope.dataMessage.groupInfo) {
                        let message: GroupDeleteMessage = new GroupDeleteMessage(
                            new User(data.params.envelope, UserDataType.Envelope, client),
                            data.params.envelope.dataMessage,
                            data.params.envelope.dataMessage.timestamp,
                            data.params.envelope.dataMessage.groupInfo.groupId,
                            client,
                            data.params.envelope.dataMessage.remoteDelete.timestamp
                        );

                        client.emit("deleteMessage", message);
                    } else {
                        let message: DMDeleteMessage = new DMDeleteMessage(
                            new User(data.params.envelope, UserDataType.Envelope, client),
                            data.params.envelope.dataMessage,
                            data.params.envelope.dataMessage.timestamp,
                            client,
                            data.params.envelope.dataMessage.remoteDelete.timestamp
                        );

                        client.emit("deleteMessage", message);
                    }
                } else if (data.params.envelope.dataMessage.reaction) {
                    if (data.params.envelope.dataMessage.groupInfo) {
                        let message: GroupReactionMessage = new GroupReactionMessage(
                            new User(data.params.envelope, UserDataType.Envelope, client),
                            data.params.envelope.dataMessage,
                            data.params.envelope.dataMessage.timestamp,
                            data.params.envelope.dataMessage.groupInfo.groupId,
                            client
                        );

                        client.emit("reaction", message);

                        if (message.removed) {
                            client.emit("reactionRemove", message);
                        } else {
                            client.emit("reactionAdd", message);
                        }
                    } else {
                        let message: DMReactionMessage = new DMReactionMessage(
                            new User(data.params.envelope, UserDataType.Envelope, client),
                            data.params.envelope.dataMessage,
                            data.params.envelope.dataMessage.timestamp,
                            client
                        );

                        client.emit("reaction", message);

                        if (message.removed) {
                            client.emit("reactionRemove", message);
                        } else {
                            client.emit("reactionAdd", message);
                        }
                    }
                } else if (data.params.envelope.dataMessage.sticker) {
                    CLIDispatcher.dispatch("listStickerPacks", {}, client.process).then((cliData) => {
                        client.stickerPacks['list'] = cliData.result;

                        if (data.params.envelope.dataMessage.groupInfo) {
                            let message: GroupStickerMessage = new GroupStickerMessage(
                                new User(data.params.envelope, UserDataType.Envelope, client),
                                data.params.envelope.dataMessage,
                                data.params.envelope.dataMessage.timestamp,
                                data.params.envelope.dataMessage.groupInfo.groupId,
                                client
                            );

                            client.emit("sticker", message);
                        } else {
                            let message: DMStickerMessage = new DMStickerMessage(
                                new User(data.params.envelope, UserDataType.Envelope, client),
                                data.params.envelope.dataMessage,
                                data.params.envelope.dataMessage.timestamp,
                                client
                            );

                            client.emit("sticker", message);
                        }
                    })
                } else {
                    if (data.params.envelope.dataMessage.groupInfo) {
                        let message: GroupDataMessage = new GroupDataMessage(
                            new User(data.params.envelope, UserDataType.Envelope, client),
                            data.params.envelope.dataMessage,
                            data.params.envelope.dataMessage.timestamp,
                            data.params.envelope.dataMessage.groupInfo.groupId,
                            client
                        );

                        client.emit("message", message);
                    } else {
                        let message: DMDataMessage = new DMDataMessage(
                            new User(data.params.envelope, UserDataType.Envelope, client),
                            data.params.envelope.dataMessage,
                            data.params.envelope.dataMessage.timestamp,
                            client
                        );

                        client.emit("message", message);
                    }
                }
            }
        }
    }
}