Add jsdocs and jsdoc generator (ref #1)
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
.idea/
|
.idea/
|
||||||
|
jsdoc/
|
||||||
config.yaml
|
config.yaml
|
||||||
registration.yaml
|
registration.yaml
|
||||||
*.db
|
*.db
|
||||||
|
|||||||
Generated
+96
-7
@@ -259,6 +259,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"babylon": {
|
||||||
|
"version": "7.0.0-beta.19",
|
||||||
|
"resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
|
||||||
|
"integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A=="
|
||||||
|
},
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
@@ -597,6 +602,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz",
|
"resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz",
|
||||||
"integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g="
|
"integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g="
|
||||||
},
|
},
|
||||||
|
"catharsis": {
|
||||||
|
"version": "0.8.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz",
|
||||||
|
"integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=",
|
||||||
|
"requires": {
|
||||||
|
"underscore-contrib": "0.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"chalk": {
|
"chalk": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
|
||||||
@@ -702,11 +715,6 @@
|
|||||||
"delayed-stream": "0.0.5"
|
"delayed-stream": "0.0.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"commander": {
|
|
||||||
"version": "2.11.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz",
|
|
||||||
"integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ=="
|
|
||||||
},
|
|
||||||
"commondir": {
|
"commondir": {
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/commondir/-/commondir-0.0.1.tgz",
|
||||||
@@ -2245,6 +2253,14 @@
|
|||||||
"esprima": "4.0.0"
|
"esprima": "4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"js2xmlparser": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
|
||||||
|
"requires": {
|
||||||
|
"xmlcreate": "1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
"jsbn": {
|
"jsbn": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
|
||||||
@@ -2257,6 +2273,32 @@
|
|||||||
"integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==",
|
"integrity": "sha512-xYuhvQ7I9PDJIGBWev9xm0+SMSed3ZDBAmvVjbFR1ZRLAF+vlXcQu6cRI9uAlj81rzikElRVteehwV7DuX2ZmQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"jsdoc": {
|
||||||
|
"version": "3.5.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
|
||||||
|
"integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
|
||||||
|
"requires": {
|
||||||
|
"babylon": "7.0.0-beta.19",
|
||||||
|
"bluebird": "3.5.1",
|
||||||
|
"catharsis": "0.8.9",
|
||||||
|
"escape-string-regexp": "1.0.5",
|
||||||
|
"js2xmlparser": "3.0.0",
|
||||||
|
"klaw": "2.0.0",
|
||||||
|
"marked": "0.3.6",
|
||||||
|
"mkdirp": "0.5.1",
|
||||||
|
"requizzle": "0.2.1",
|
||||||
|
"strip-json-comments": "2.0.1",
|
||||||
|
"taffydb": "2.6.2",
|
||||||
|
"underscore": "1.8.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
|
||||||
|
"integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"json-schema": {
|
"json-schema": {
|
||||||
"version": "0.2.3",
|
"version": "0.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||||
@@ -2347,6 +2389,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"klaw": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz",
|
||||||
|
"integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=",
|
||||||
|
"requires": {
|
||||||
|
"graceful-fs": "4.1.11"
|
||||||
|
}
|
||||||
|
},
|
||||||
"labeled-stream-splicer": {
|
"labeled-stream-splicer": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-1.0.2.tgz",
|
||||||
@@ -3581,6 +3631,21 @@
|
|||||||
"resolve-from": "1.0.1"
|
"resolve-from": "1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"requizzle": {
|
||||||
|
"version": "0.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.1.tgz",
|
||||||
|
"integrity": "sha1-aUPDUwxNmn5G8c3dUcFY/GcM294=",
|
||||||
|
"requires": {
|
||||||
|
"underscore": "1.6.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
|
||||||
|
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
|
||||||
@@ -4023,8 +4088,7 @@
|
|||||||
"strip-json-comments": {
|
"strip-json-comments": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
||||||
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
|
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"subarg": {
|
"subarg": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@@ -4067,6 +4131,11 @@
|
|||||||
"string-width": "2.1.1"
|
"string-width": "2.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"taffydb": {
|
||||||
|
"version": "2.6.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz",
|
||||||
|
"integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg="
|
||||||
|
},
|
||||||
"telegram-mtproto": {
|
"telegram-mtproto": {
|
||||||
"version": "3.2.11",
|
"version": "3.2.11",
|
||||||
"resolved": "https://registry.npmjs.org/telegram-mtproto/-/telegram-mtproto-3.2.11.tgz",
|
"resolved": "https://registry.npmjs.org/telegram-mtproto/-/telegram-mtproto-3.2.11.tgz",
|
||||||
@@ -4227,6 +4296,21 @@
|
|||||||
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz",
|
||||||
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
|
"integrity": "sha1-YaajIBBiKvoHljvzJSA88SI51gQ="
|
||||||
},
|
},
|
||||||
|
"underscore-contrib": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore-contrib/-/underscore-contrib-0.3.0.tgz",
|
||||||
|
"integrity": "sha1-ZltmwkeD+PorGMn4y7Dix9SMJsc=",
|
||||||
|
"requires": {
|
||||||
|
"underscore": "1.6.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"underscore": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz",
|
||||||
|
"integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"universalify": {
|
"universalify": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz",
|
||||||
@@ -4368,6 +4452,11 @@
|
|||||||
"mkdirp": "0.5.1"
|
"mkdirp": "0.5.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"xmlcreate": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
|
||||||
|
"integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8="
|
||||||
|
},
|
||||||
"xtend": {
|
"xtend": {
|
||||||
"version": "4.0.1",
|
"version": "4.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
|
||||||
|
|||||||
+4
-2
@@ -25,9 +25,11 @@
|
|||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint": "4.11.x",
|
"eslint": "4.11.x",
|
||||||
"eslint-config-airbnb-base": "12.1.x",
|
"eslint-config-airbnb-base": "12.1.x",
|
||||||
"eslint-plugin-import": "2.8.x"
|
"eslint-plugin-import": "2.8.x",
|
||||||
|
"jsdoc": "3.5.x"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"fix-auth-renewal": "./scripts/fix-auth-renewal"
|
"fix-auth-renewal": "./scripts/fix-auth-renewal",
|
||||||
|
"gen-jsdoc": "./scripts/gen-jsdoc"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Executable
+7
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
jsdoc src/ \
|
||||||
|
--private \
|
||||||
|
--recurse \
|
||||||
|
--package package.json \
|
||||||
|
--readme README.md \
|
||||||
|
--destination jsdoc
|
||||||
+58
-12
@@ -34,13 +34,42 @@ class MautrixTelegram {
|
|||||||
constructor(config) {
|
constructor(config) {
|
||||||
this.config = config
|
this.config = config
|
||||||
|
|
||||||
|
/**
|
||||||
|
* MXID -> {@link MatrixUser} cache.
|
||||||
|
* @private
|
||||||
|
* @type {Map<string, MatrixUser>}
|
||||||
|
*/
|
||||||
this.matrixUsersByID = new Map()
|
this.matrixUsersByID = new Map()
|
||||||
|
/**
|
||||||
|
* Telegram ID -> {@link TelegramUser} cache.
|
||||||
|
* @private
|
||||||
|
* @type {Map<number, TelegramUser>}
|
||||||
|
*/
|
||||||
this.telegramUsersByID = new Map()
|
this.telegramUsersByID = new Map()
|
||||||
|
/**
|
||||||
|
* Telegram peer ID -> {@link Portal} cache.
|
||||||
|
* @private
|
||||||
|
* @type {Map<number, Portal>}
|
||||||
|
*/
|
||||||
this.portalsByPeerID = new Map()
|
this.portalsByPeerID = new Map()
|
||||||
|
/**
|
||||||
|
* Matrix room ID -> {@link Portal} cache.
|
||||||
|
* @private
|
||||||
|
* @type {Map<string, Portal>}
|
||||||
|
*/
|
||||||
this.portalsByRoomID = new Map()
|
this.portalsByRoomID = new Map()
|
||||||
|
/**
|
||||||
|
* List of management rooms.
|
||||||
|
* @type {Array<string>}
|
||||||
|
*/
|
||||||
this.managementRooms = []
|
this.managementRooms = []
|
||||||
|
|
||||||
const self = this
|
const self = this
|
||||||
|
/**
|
||||||
|
* The matrix-appservice-bridge Bridge instance.
|
||||||
|
* @private
|
||||||
|
* @type {Bridge}
|
||||||
|
*/
|
||||||
this.bridge = new Bridge({
|
this.bridge = new Bridge({
|
||||||
homeserverUrl: config.homeserver.address,
|
homeserverUrl: config.homeserver.address,
|
||||||
domain: config.homeserver.domain,
|
domain: config.homeserver.domain,
|
||||||
@@ -95,17 +124,29 @@ class MautrixTelegram {
|
|||||||
* This does not care if a {@link TelegramUser} object for the user ID exists.
|
* This does not care if a {@link TelegramUser} object for the user ID exists.
|
||||||
* It simply returns an intent for a Matrix puppet user with the correct MXID.
|
* It simply returns an intent for a Matrix puppet user with the correct MXID.
|
||||||
*
|
*
|
||||||
* @param {number} id The ID of the Telegram user.
|
* @param {number} id The ID of the Telegram user.
|
||||||
* @returns {Intent} The Matrix puppet intent for the given Telegram user.
|
* @returns {Intent} The Matrix puppet intent for the given Telegram user.
|
||||||
*/
|
*/
|
||||||
getIntentForTelegramUser(id) {
|
getIntentForTelegramUser(id) {
|
||||||
return this.bridge.getIntentFromLocalpart(this.getUsernameForTelegramUser(id))
|
return this.bridge.getIntentFromLocalpart(this.getUsernameForTelegramUser(id))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Matrix username localpart for the Telegram user with the given ID.
|
||||||
|
*
|
||||||
|
* @param {number} id The ID of the Telegram user.
|
||||||
|
* @returns {string} The Matrix username localpart for the given Telegram user.
|
||||||
|
*/
|
||||||
getUsernameForTelegramUser(id) {
|
getUsernameForTelegramUser(id) {
|
||||||
return this.config.bridge.username_template.replace("${ID}", id)
|
return this.config.bridge.username_template.replace("${ID}", id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the matrix.to link for the Matrix puppet of the Telegram user with the given ID.
|
||||||
|
*
|
||||||
|
* @param {number} id The ID of the Telegram user.
|
||||||
|
* @returns {string} A matrix.to link that points to the Matrix puppet of the given user.
|
||||||
|
*/
|
||||||
getMatrixToLinkForTelegramUser(id) {
|
getMatrixToLinkForTelegramUser(id) {
|
||||||
return `https://matrix.to/#/@${this.getUsernameForTelegramUser(id)}:${this.config.homeserver.domain}`
|
return `https://matrix.to/#/@${this.getUsernameForTelegramUser(id)}:${this.config.homeserver.domain}`
|
||||||
}
|
}
|
||||||
@@ -116,8 +157,8 @@ class MautrixTelegram {
|
|||||||
* This will either get the room from the room cache or the bridge room database.
|
* This will either get the room from the room cache or the bridge room database.
|
||||||
* If the room is not found, a new {@link Portal} object is created.
|
* If the room is not found, a new {@link Portal} object is created.
|
||||||
*
|
*
|
||||||
* @param {TelegramPeer} peer The TelegramPeer object whose portal to get.
|
* @param {TelegramPeer} peer The TelegramPeer object whose portal to get.
|
||||||
* @returns {Promise<Portal>} The Portal object.
|
* @returns {Portal} The Portal object.
|
||||||
*/
|
*/
|
||||||
async getPortalByPeer(peer, { createIfNotFound = true } = {}) {
|
async getPortalByPeer(peer, { createIfNotFound = true } = {}) {
|
||||||
let portal = this.portalsByPeerID.get(peer.id)
|
let portal = this.portalsByPeerID.get(peer.id)
|
||||||
@@ -160,10 +201,10 @@ class MautrixTelegram {
|
|||||||
*
|
*
|
||||||
* This will either get the room from the room cache or the bridge room database.
|
* This will either get the room from the room cache or the bridge room database.
|
||||||
* If the room is not found, this function WILL NOT create a new room,
|
* If the room is not found, this function WILL NOT create a new room,
|
||||||
* but rather just return {@linkplain undefined}.
|
* but rather just return {@code undefined}.
|
||||||
*
|
*
|
||||||
* @param {string} id The Matrix room ID of the portal to get.
|
* @param {string} id The Matrix room ID of the portal to get.
|
||||||
* @returns {Promise<Portal>} The Portal object.
|
* @returns {Portal} The Portal object.
|
||||||
*/
|
*/
|
||||||
async getPortalByRoomID(id) {
|
async getPortalByRoomID(id) {
|
||||||
let portal = this.portalsByRoomID.get(id)
|
let portal = this.portalsByRoomID.get(id)
|
||||||
@@ -209,8 +250,8 @@ class MautrixTelegram {
|
|||||||
* This will either get the user from the user cache or the bridge user database.
|
* This will either get the user from the user cache or the bridge user database.
|
||||||
* If the user is not found, a new {@link TelegramUser} instance is created.
|
* If the user is not found, a new {@link TelegramUser} instance is created.
|
||||||
*
|
*
|
||||||
* @param {number} id The internal Telegram ID of the user to get.
|
* @param {number} id The internal Telegram ID of the user to get.
|
||||||
* @returns {Promise<TelegramUser>} The TelegramUser object.
|
* @returns {TelegramUser} The TelegramUser object.
|
||||||
*/
|
*/
|
||||||
async getTelegramUser(id, { createIfNotFound = true } = {}) {
|
async getTelegramUser(id, { createIfNotFound = true } = {}) {
|
||||||
let user = this.telegramUsersByID.get(id)
|
let user = this.telegramUsersByID.get(id)
|
||||||
@@ -246,8 +287,8 @@ class MautrixTelegram {
|
|||||||
* This will either get the user from the user cache or the bridge user database.
|
* This will either get the user from the user cache or the bridge user database.
|
||||||
* If the user is not found, a new {@link MatrixUser} instance is created.
|
* If the user is not found, a new {@link MatrixUser} instance is created.
|
||||||
*
|
*
|
||||||
* @param {string} id The MXID of the Matrix user to get.
|
* @param {string} id The MXID of the Matrix user to get.
|
||||||
* @returns {Promise<MatrixUser>} The MatrixUser object.
|
* @returns {MatrixUser} The MatrixUser object.
|
||||||
*/
|
*/
|
||||||
async getMatrixUser(id, { createIfNotFound = true } = {}) {
|
async getMatrixUser(id, { createIfNotFound = true } = {}) {
|
||||||
let user = this.matrixUsersByID.get(id)
|
let user = this.matrixUsersByID.get(id)
|
||||||
@@ -305,6 +346,11 @@ class MautrixTelegram {
|
|||||||
}, entry)
|
}, entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the members in the given room.
|
||||||
|
* @param {string} roomID The ID of the room to search.
|
||||||
|
* @returns {Array} The list of MXIDs who are in the room.
|
||||||
|
*/
|
||||||
async getRoomMembers(roomID) {
|
async getRoomMembers(roomID) {
|
||||||
const roomState = await this.botIntent.roomState(roomID)
|
const roomState = await this.botIntent.roomState(roomID)
|
||||||
const members = []
|
const members = []
|
||||||
@@ -319,7 +365,7 @@ class MautrixTelegram {
|
|||||||
/**
|
/**
|
||||||
* Handle a single received Matrix event.
|
* Handle a single received Matrix event.
|
||||||
*
|
*
|
||||||
* @param evt The Matrix event that occurred.
|
* @param {MatrixEvent} evt The Matrix event that occurred.
|
||||||
*/
|
*/
|
||||||
async handleMatrixEvent(evt) {
|
async handleMatrixEvent(evt) {
|
||||||
const user = await this.getMatrixUser(evt.sender)
|
const user = await this.getMatrixUser(evt.sender)
|
||||||
|
|||||||
@@ -17,6 +17,22 @@ const makePasswordHash = require("telegram-mtproto").plugins.makePasswordHash
|
|||||||
|
|
||||||
const commands = {}
|
const commands = {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module containing all management commands.
|
||||||
|
*
|
||||||
|
* @module commands
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run management command.
|
||||||
|
*
|
||||||
|
* @param {string} sender The MXID of the user who sent the command.
|
||||||
|
* @param {string} command The command itself.
|
||||||
|
* @param {Array<string>} args A list of arguments.
|
||||||
|
* @param {function} reply A function that is called to reply to the command.
|
||||||
|
* @param {MautrixTelegram} app The MautrixTelegram instance.
|
||||||
|
* @param {MatrixEvent} evt The event that caused this call.
|
||||||
|
*/
|
||||||
function run(sender, command, args, reply, app, evt) {
|
function run(sender, command, args, reply, app, evt) {
|
||||||
const commandFunc = this.commands[command]
|
const commandFunc = this.commands[command]
|
||||||
if (!commandFunc) {
|
if (!commandFunc) {
|
||||||
|
|||||||
@@ -15,6 +15,9 @@
|
|||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
const TelegramPeer = require("./telegram-peer")
|
const TelegramPeer = require("./telegram-peer")
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Portal represents a portal from a Matrix room to a Telegram chat.
|
||||||
|
*/
|
||||||
class Portal {
|
class Portal {
|
||||||
constructor(app, roomID, peer) {
|
constructor(app, roomID, peer) {
|
||||||
this.app = app
|
this.app = app
|
||||||
|
|||||||
+52
-2
@@ -14,6 +14,11 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TelegramPeer represents some Telegram entity that can be messaged.
|
||||||
|
*
|
||||||
|
* The possible peer types are chat (groups), channel (includes supergroups) and user.
|
||||||
|
*/
|
||||||
class TelegramPeer {
|
class TelegramPeer {
|
||||||
constructor(type, id, { accessHash, receiverID, username, title } = {}) {
|
constructor(type, id, { accessHash, receiverID, username, title } = {}) {
|
||||||
this.type = type
|
this.type = type
|
||||||
@@ -24,6 +29,14 @@ class TelegramPeer {
|
|||||||
this.title = title
|
this.title = title
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a TelegramPeer based on peer data received from Telegram.
|
||||||
|
*
|
||||||
|
* @param {Object} peer The data received from Telegram.
|
||||||
|
* @param {number} sender The user ID of the other person, in case the peer is an user referring to the receiver.
|
||||||
|
* @param {number} receiverID The user ID of the receiver (in case peer type is {@code user})
|
||||||
|
* @returns {TelegramPeer}
|
||||||
|
*/
|
||||||
static fromTelegramData(peer, sender, receiverID) {
|
static fromTelegramData(peer, sender, receiverID) {
|
||||||
switch (peer._) {
|
switch (peer._) {
|
||||||
case "peerChat":
|
case "peerChat":
|
||||||
@@ -48,9 +61,9 @@ class TelegramPeer {
|
|||||||
* @param {MautrixTelegram} app The instance of {@link MautrixTelegram} to use.
|
* @param {MautrixTelegram} app The instance of {@link MautrixTelegram} to use.
|
||||||
* @param {TelegramPuppet} telegramPOV The puppeted Telegram user for whom the access hash is needed.
|
* @param {TelegramPuppet} telegramPOV The puppeted Telegram user for whom the access hash is needed.
|
||||||
* @param {Portal} [portal] Optional channel {@link Portal} instance to avoid calling {@link app#getPortalByPeer(peer)}.
|
* @param {Portal} [portal] Optional channel {@link Portal} instance to avoid calling {@link app#getPortalByPeer(peer)}.
|
||||||
* Only used if {@link #type} is {@linkplain user}.
|
* Only used if {@link #type} is {@code user}.
|
||||||
* @param {TelegramUser} [user] Optional {@link TelegramUser} instance to avoid calling {@link app#getTelegramUser(id)}.
|
* @param {TelegramUser} [user] Optional {@link TelegramUser} instance to avoid calling {@link app#getTelegramUser(id)}.
|
||||||
* Only used if {@link #type} is {@linkplain channel}.
|
* Only used if {@link #type} is {@code channel}.
|
||||||
* @returns {Promise<boolean>} Whether or not the access hash was found and loaded.
|
* @returns {Promise<boolean>} Whether or not the access hash was found and loaded.
|
||||||
*/
|
*/
|
||||||
async loadAccessHash(app, telegramPOV, { portal, user } = {}) {
|
async loadAccessHash(app, telegramPOV, { portal, user } = {}) {
|
||||||
@@ -74,6 +87,12 @@ class TelegramPeer {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update info based on a Telegram dialog.
|
||||||
|
*
|
||||||
|
* @param dialog The dialog data sent by Telegram.
|
||||||
|
* @returns {boolean} Whether or not something was changed.
|
||||||
|
*/
|
||||||
async updateInfo(dialog) {
|
async updateInfo(dialog) {
|
||||||
let changed = false
|
let changed = false
|
||||||
if (this.type === "channel" || this.type === "user") {
|
if (this.type === "channel" || this.type === "user") {
|
||||||
@@ -89,6 +108,13 @@ class TelegramPeer {
|
|||||||
return changed
|
return changed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get info about this peer from the Telegram servers.
|
||||||
|
*
|
||||||
|
* @param {TelegramPuppet} telegramPOV The Telegram user whose point of view the data should be fetched from.
|
||||||
|
* @returns {{info: Object, users: Array<Object>}} The info sent by Telegram. For user-type peers, the users array
|
||||||
|
* is unnecessary.
|
||||||
|
*/
|
||||||
async getInfo(telegramPOV) {
|
async getInfo(telegramPOV) {
|
||||||
let info, users
|
let info, users
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
@@ -128,6 +154,11 @@ class TelegramPeer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Telegram InputPeer object based on the data in this TelegramPeer.
|
||||||
|
*
|
||||||
|
* @returns {Object} The Telegram InputPeer object.
|
||||||
|
*/
|
||||||
toInputPeer() {
|
toInputPeer() {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
case "chat":
|
case "chat":
|
||||||
@@ -152,8 +183,15 @@ class TelegramPeer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a Telegram input* object (i.e. inputUser or inputChannel) based on the data in this TelegramPeer.
|
||||||
|
*
|
||||||
|
* @returns {Object} The Telegram input* object.
|
||||||
|
*/
|
||||||
toInputObject() {
|
toInputObject() {
|
||||||
switch (this.type) {
|
switch (this.type) {
|
||||||
|
case "chat":
|
||||||
|
throw new Error(`Unsupported type ${this.type}`)
|
||||||
case "user":
|
case "user":
|
||||||
return {
|
return {
|
||||||
_: "inputUser",
|
_: "inputUser",
|
||||||
@@ -171,10 +209,21 @@ class TelegramPeer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the data in a database subentry to a new TelegramPeer object.
|
||||||
|
*
|
||||||
|
* @param {Object} entry The database subentry.
|
||||||
|
* @returns {TelegramPeer} The created TelegramPeer object.
|
||||||
|
*/
|
||||||
static fromSubentry(entry) {
|
static fromSubentry(entry) {
|
||||||
return new TelegramPeer(entry.type, entry.id, entry)
|
return new TelegramPeer(entry.type, entry.id, entry)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert this TelegramPeer into a subentry that can be stored in the database.
|
||||||
|
*
|
||||||
|
* @returns {Object} The database-storable subentry.
|
||||||
|
*/
|
||||||
toSubentry() {
|
toSubentry() {
|
||||||
return {
|
return {
|
||||||
type: this.type,
|
type: this.type,
|
||||||
@@ -185,6 +234,7 @@ class TelegramPeer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO determine if this is useless and remove if it is.
|
||||||
get key() {
|
get key() {
|
||||||
return `${this.type} ${this.id}`
|
return `${this.type} ${this.id}`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ const telegram = require("telegram-mtproto")
|
|||||||
const pkg = require("../package.json")
|
const pkg = require("../package.json")
|
||||||
const TelegramPeer = require("./telegram-peer")
|
const TelegramPeer = require("./telegram-peer")
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mapping from Telegram file types to MIME types and extensions.
|
||||||
|
*/
|
||||||
const META_FROM_FILETYPE = {
|
const META_FROM_FILETYPE = {
|
||||||
"storage.fileGif": {
|
"storage.fileGif": {
|
||||||
mimetype: "image/gif",
|
mimetype: "image/gif",
|
||||||
|
|||||||
Reference in New Issue
Block a user