Add image support (not just files)

master
Skylar Ittner 3 years ago
parent ae9829b1de
commit c055773f67

@ -11,15 +11,18 @@ import sdk from 'matrix-js-sdk';
import fs from 'fs';
import log4js from 'log4js';
import https from 'https';
import { fileURLToPath } from 'url';
import { dirname } from 'path';
import { fileURLToPath }
from 'url';
import { dirname }
from 'path';
import request from 'request';
import FileType from 'file-type';
import readChunk from 'read-chunk';
// Load settings from config.json
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const __dirname = dirname(__filename);
let rawdata = fs.readFileSync(__dirname + '/config.json');
let settings = JSON.parse(rawdata);
console.log(__dirname + "/config.json loaded.");
@ -127,6 +130,8 @@ function getAndUploadFile(url, callback) {
logger.info("Downloading MMS media " + url);
// download
request({url, encoding: null}, (err, resp, buffer) => {
const buffer = readChunk.sync(buffer, 0, 4100);
var mimetype = (await FileType.fromBuffer(buffer)).mime;
// upload
logger.info("Uploading MMS media to Matrix " + url);
client.uploadContent(buffer, {
@ -134,7 +139,7 @@ function getAndUploadFile(url, callback) {
rawResponse: false
}).then((res) => {
if (typeof callback == "function") {
callback(res);
callback(res, mimetype);
logger.info("Media URI: " + res);
}
}).catch((err) => {
@ -162,34 +167,27 @@ function sendMatrix(roomid, body, media, callback) {
body = "Attachment";
}
if (typeof media == "string") {
getAndUploadFile(media, function (uri) {
var content = {
body: body,
msgtype: "m.file",
url: uri
}
client.sendEvent(roomid, "m.room.message", content, "").then((res) => {
if (typeof callback == "function") {
callback(true);
}
}).catch((err) => {
if (typeof callback == "function") {
callback(false);
}
if (err.data.error == "Unknown room") {
return;
}
logger.error(err);
});
});
} else if (Array.isArray(media)) {
if (Array.isArray(media)) {
for (var i = 0; i < media.length; i++) {
getAndUploadFile(media[i], function (uri) {
var content = {
body: body,
msgtype: "m.file",
url: uri
getAndUploadFile(media[i], function (uri, mimetype) {
if (mimetype == "image/jpg" || mimetype == "image/png" || mimetype == "image/gif") {
var content = {
body: body,
msgtype: "m.image",
url: uri,
info: {
mimetype: mimetype
}
};
} else {
var content = {
body: body,
msgtype: "m.file",
url: uri,
info: {
mimetype: mimetype
}
};
}
client.sendEvent(roomid, "m.room.message", content, "").then((res) => {
if (typeof callback == "function") {

100
package-lock.json generated

@ -12,6 +12,30 @@
"regenerator-runtime": "^0.13.4"
}
},
"@tokenizer/token": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.1.1.tgz",
"integrity": "sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w=="
},
"@types/debug": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz",
"integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ=="
},
"@types/node": {
"version": "15.12.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz",
"integrity": "sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww=="
},
"@types/readable-stream": {
"version": "2.3.10",
"resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-2.3.10.tgz",
"integrity": "sha512-xwSXvAv9x4B9Vj88AMZnFyEVLilz1EBxKvRUhGqIF4nJpRQBSTm7jS236X4Y9Y2qPsVvaMxwrGJlNhLHEahlFQ==",
"requires": {
"@types/node": "*",
"safe-buffer": "*"
}
},
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@ -163,6 +187,16 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"file-type": {
"version": "16.5.0",
"resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.0.tgz",
"integrity": "sha512-OxgWA9tbL8N/WP00GD1z8O0MiwQKFyWRs1q+3FhjdvcGgKqwxcejyGWso3n4/IMU6DdwV+ARZ4A7TTnPkDcSiw==",
"requires": {
"readable-web-to-node-stream": "^3.0.0",
"strtok3": "^6.0.3",
"token-types": "^2.0.0"
}
},
"flatted": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
@ -230,6 +264,16 @@
"sshpk": "^1.7.0"
}
},
"ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@ -335,6 +379,11 @@
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"peek-readable": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-3.1.3.tgz",
"integrity": "sha512-mpAcysyRJxmICBcBa5IXH7SZPvWkcghm6Fk8RekoS3v+BpbSzlZzuWbMx+GXrlUwESi9qHar4nVEZNMKylIHvg=="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@ -355,6 +404,25 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
"integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
},
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
"integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
"requires": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
}
},
"readable-web-to-node-stream": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.1.tgz",
"integrity": "sha512-4zDC6CvjUyusN7V0QLsXVB7pJCD9+vtrM9bYDRv6uBQ+SKfx36rp5AFNPRgh9auKRul/a1iFZJYXcCbwRL+SaA==",
"requires": {
"@types/readable-stream": "^2.3.9",
"readable-stream": "^3.6.0"
}
},
"regenerator-runtime": {
"version": "0.13.7",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
@ -442,6 +510,33 @@
}
}
},
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"requires": {
"safe-buffer": "~5.2.0"
}
},
"strtok3": {
"version": "6.0.8",
"resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.0.8.tgz",
"integrity": "sha512-QLgv+oiXwXgCgp2PdPPa+Jpp4D9imK9e/0BsyfeFMr6QL6wMVqoVn9+OXQ9I7MZbmUzN6lmitTJ09uwS2OmGcw==",
"requires": {
"@tokenizer/token": "^0.1.1",
"@types/debug": "^4.1.5",
"peek-readable": "^3.1.3"
}
},
"token-types": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/token-types/-/token-types-2.1.1.tgz",
"integrity": "sha512-wnQcqlreS6VjthyHO3Y/kpK/emflxDBNhlNUPfh7wE39KnuDdOituXomIbyI79vBtF0Ninpkh72mcuRHo+RG3Q==",
"requires": {
"@tokenizer/token": "^0.1.1",
"ieee754": "^1.2.1"
}
},
"tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@ -482,6 +577,11 @@
"punycode": "^2.1.0"
}
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",

@ -14,6 +14,7 @@
"author": "Netsyms Technologies",
"contributors": [],
"dependencies": {
"file-type": "^16.5.0",
"log4js": "^6.3.0",
"matrix-js-sdk": "^9.0.1"
}

Loading…
Cancel
Save