-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
80 lines (72 loc) · 2.23 KB
/
main.js
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
import * as sdk from "matrix-js-sdk";
import { needsSuggestion } from "./needsSuggestion.js";
import { suggestion } from "./suggestion.js";
import pJson from "./package.json" assert { type: "json" };
const accessToken = process.env.ACCESS_TOKEN;
const homeserver = process.env.HOMESERVER ?? "matrix.codefreeze.fi";
const botUsername = process.env.USER_NAME ?? "@guysbot";
const userId = `${botUsername}:${homeserver}`;
const client = sdk.createClient({
baseUrl: `https://${homeserver}`,
accessToken,
userId,
});
// Automatically join rooms when invited
client.on("RoomMember.membership", (event, member) => {
if (member.membership === "invite" && member.userId === userId) {
console.log(`joining room`, member.roomId);
client.joinRoom(member.roomId).then(() => {
console.log("Auto-joined %s", member.roomId);
});
}
});
const repliedTo = {};
const check = needsSuggestion({
allowList: [botUsername.replace(/^@/, ""), pJson.homepage],
});
client.on("Room.timeline", (event, room, toStartOfTimeline) => {
if (event.getType() !== "m.room.message") {
console.debug("only print messages");
return; // only print messages
}
if (toStartOfTimeline) {
console.debug(`don't print paginated results`);
return; // don't print paginated results
}
if (event.sender.userId === userId) {
console.debug(`Ignore my own messages`);
return; // Ignore my own messages
}
const event_id = event.event.event_id;
console.debug(event_id, repliedTo);
if (repliedTo[event_id] !== undefined) {
console.debug(`Already replied`);
return; // Already replied
}
const content = event.getContent();
console.log(JSON.stringify(event));
console.log(`message`, content.body);
if (!check(content.body)) {
console.debug(`message is fine`);
return; // Message is fine
}
repliedTo[event_id] = true;
client.sendEvent(
room.roomId,
"m.room.message",
suggestion({
senderName: event.sender.name,
event_id: event_id,
thread_root: content["m.relates_to"]?.event_id ?? event_id,
}),
"",
(err, res) => {
console.log(err);
}
);
});
client.on("error", (err) => console.error(err));
await client.startClient({
// Do not fetch historical messages
initialSyncLimit: 0,
});