Add image support (not just files)
This commit is contained in:
parent
ae9829b1de
commit
c055773f67
54
main.js
54
main.js
@ -11,10 +11,13 @@ import sdk from 'matrix-js-sdk';
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import log4js from 'log4js';
|
import log4js from 'log4js';
|
||||||
import https from 'https';
|
import https from 'https';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath }
|
||||||
import { dirname } from 'path';
|
from 'url';
|
||||||
|
import { dirname }
|
||||||
|
from 'path';
|
||||||
import request from 'request';
|
import request from 'request';
|
||||||
|
import FileType from 'file-type';
|
||||||
|
import readChunk from 'read-chunk';
|
||||||
|
|
||||||
|
|
||||||
// Load settings from config.json
|
// Load settings from config.json
|
||||||
@ -127,6 +130,8 @@ function getAndUploadFile(url, callback) {
|
|||||||
logger.info("Downloading MMS media " + url);
|
logger.info("Downloading MMS media " + url);
|
||||||
// download
|
// download
|
||||||
request({url, encoding: null}, (err, resp, buffer) => {
|
request({url, encoding: null}, (err, resp, buffer) => {
|
||||||
|
const buffer = readChunk.sync(buffer, 0, 4100);
|
||||||
|
var mimetype = (await FileType.fromBuffer(buffer)).mime;
|
||||||
// upload
|
// upload
|
||||||
logger.info("Uploading MMS media to Matrix " + url);
|
logger.info("Uploading MMS media to Matrix " + url);
|
||||||
client.uploadContent(buffer, {
|
client.uploadContent(buffer, {
|
||||||
@ -134,7 +139,7 @@ function getAndUploadFile(url, callback) {
|
|||||||
rawResponse: false
|
rawResponse: false
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
if (typeof callback == "function") {
|
if (typeof callback == "function") {
|
||||||
callback(res);
|
callback(res, mimetype);
|
||||||
logger.info("Media URI: " + res);
|
logger.info("Media URI: " + res);
|
||||||
}
|
}
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
@ -162,34 +167,27 @@ function sendMatrix(roomid, body, media, callback) {
|
|||||||
body = "Attachment";
|
body = "Attachment";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (typeof media == "string") {
|
if (Array.isArray(media)) {
|
||||||
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)) {
|
|
||||||
for (var i = 0; i < media.length; i++) {
|
for (var i = 0; i < media.length; i++) {
|
||||||
getAndUploadFile(media[i], function (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 = {
|
var content = {
|
||||||
body: body,
|
body: body,
|
||||||
msgtype: "m.file",
|
msgtype: "m.file",
|
||||||
url: uri
|
url: uri,
|
||||||
|
info: {
|
||||||
|
mimetype: mimetype
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
client.sendEvent(roomid, "m.room.message", content, "").then((res) => {
|
client.sendEvent(roomid, "m.room.message", content, "").then((res) => {
|
||||||
if (typeof callback == "function") {
|
if (typeof callback == "function") {
|
||||||
|
100
package-lock.json
generated
100
package-lock.json
generated
@ -12,6 +12,30 @@
|
|||||||
"regenerator-runtime": "^0.13.4"
|
"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": {
|
"ajv": {
|
||||||
"version": "6.12.6",
|
"version": "6.12.6",
|
||||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
|
||||||
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
|
"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": {
|
"flatted": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
|
||||||
@ -230,6 +264,16 @@
|
|||||||
"sshpk": "^1.7.0"
|
"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": {
|
"is-typedarray": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
|
||||||
"integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
|
"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": {
|
"performance-now": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.4.tgz",
|
||||||
"integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ=="
|
"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": {
|
"regenerator-runtime": {
|
||||||
"version": "0.13.7",
|
"version": "0.13.7",
|
||||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz",
|
"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": {
|
"tough-cookie": {
|
||||||
"version": "2.5.0",
|
"version": "2.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
|
||||||
@ -482,6 +577,11 @@
|
|||||||
"punycode": "^2.1.0"
|
"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": {
|
"uuid": {
|
||||||
"version": "3.4.0",
|
"version": "3.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"author": "Netsyms Technologies",
|
"author": "Netsyms Technologies",
|
||||||
"contributors": [],
|
"contributors": [],
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"file-type": "^16.5.0",
|
||||||
"log4js": "^6.3.0",
|
"log4js": "^6.3.0",
|
||||||
"matrix-js-sdk": "^9.0.1"
|
"matrix-js-sdk": "^9.0.1"
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user