-
Notifications
You must be signed in to change notification settings - Fork 2
/
feeder.js
64 lines (58 loc) · 2.01 KB
/
feeder.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
const cheerio = require('cheerio')
const request = require('request')
const jsonfile = require('jsonfile')
const sdk = require("matrix-bot-sdk");
const configfile = 'config/config.json'
var config = jsonfile.readFileSync(configfile)
const MatrixClient = sdk.MatrixClient;
const SimpleFsStorageProvider = sdk.SimpleFsStorageProvider;
const AutojoinRoomsMixin = sdk.AutojoinRoomsMixin;
const client = new MatrixClient(config.homeServerUrl, config.accessToken, new SimpleFsStorageProvider(config.storage));
AutojoinRoomsMixin.setupOnClient(client);
client.start().then(() => console.log("LOG: Client started!"));
client.on("room.message", (roomId, event) => {
if (! config.monitorChannels.includes(roomId)) return
if (! event["content"]) return;
const sender = event["sender"];
const body = event["content"]["body"];
const type = event["content"]["msgtype"];
const info = event["content"]["info"]
const url = event["content"]["url"]
if(roomId != config.targetRoomId) {
if(config.relayTypes.includes(type)) {
client.sendMessage(config.targetRoomId, {
"sender" : sender,
"msgtype": type,
"body": body,
"info": info,
"url": url
});
}
if(config.extractYoutubeLinks && type == "m.text") {
link_matches = body.match(/https?:\/\/[^\ ]*youtu[^\ ]*/g)
if( link_matches && link_matches.length > 0) {
msg = link_matches[0]
if(config.showYoutubeTitle) {
request(msg, function(err, _res, body) {
if (err) return console.error(err);
title = ""
let $ = cheerio.load(body);
title = $('title').text();
if(title != "") {
msg = `${msg} - ${title}`
}
client.sendMessage(config.targetRoomId, {
"msgtype": "m.text",
"body": msg,
});
})
} else {
client.sendMessage(config.targetRoomId, {
"msgtype": "m.text",
"body": msg,
});
}
}
}
}
});