mirror of
https://github.com/icewind1991/mx-puppet-steam.git
synced 2026-06-03 09:34:13 +02:00
support bridging emotes
This commit is contained in:
parent
eb22f3ad87
commit
09ea312a47
7 changed files with 341 additions and 149 deletions
|
|
@ -7,7 +7,7 @@ Matrix <-> Steam puppeting bridge based on [mx-puppet-bridge](https://github.com
|
||||||
- [x] login with steam guard support
|
- [x] login with steam guard support
|
||||||
- [x] 1<->1 messaging
|
- [x] 1<->1 messaging
|
||||||
- [x] group messaging
|
- [x] group messaging
|
||||||
- [x] steam -> matrix typing notifications
|
- [x] steam <-> matrix typing notifications
|
||||||
- [x] online/offline status
|
- [x] online/offline status
|
||||||
- [x] retrieve nickname and avatar from steam
|
- [x] retrieve nickname and avatar from steam
|
||||||
- [x] listing of steam users
|
- [x] listing of steam users
|
||||||
|
|
@ -16,6 +16,7 @@ Matrix <-> Steam puppeting bridge based on [mx-puppet-bridge](https://github.com
|
||||||
- [x] bridging embedded images in 1<->1 chats
|
- [x] bridging embedded images in 1<->1 chats
|
||||||
- [x] receiving embedded images from steam in group chats
|
- [x] receiving embedded images from steam in group chats
|
||||||
- [ ] sending embedded images to steam in group chats
|
- [ ] sending embedded images to steam in group chats
|
||||||
|
- [x] steam -> matrix emotes
|
||||||
|
|
||||||
## Linking
|
## Linking
|
||||||
|
|
||||||
|
|
|
||||||
281
package-lock.json
generated
281
package-lock.json
generated
|
|
@ -5,17 +5,17 @@
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@bbob/parser": {
|
"@bbob/parser": {
|
||||||
"version": "2.5.8",
|
"version": "2.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/@bbob/parser/-/parser-2.5.8.tgz",
|
"resolved": "https://registry.npmjs.org/@bbob/parser/-/parser-2.6.2.tgz",
|
||||||
"integrity": "sha512-B51LwSZF+Qh7XvnLFl5+HdzDvtfJ56jspuLiCa7nLOUDdnmOEF09a4rjXN2mI5YLmGnJWN0rDV032C4w3Uo3oA==",
|
"integrity": "sha512-o3ZlvDlBaT8DmH1Un3+jdLNidMzkpB8s+dRyOO/1t7ahzk1svxhCDM15hNVGTy0zKOfBr1nQdwXd5ZuSG1nbAA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@bbob/plugin-helper": "^2.5.8"
|
"@bbob/plugin-helper": "^2.6.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@bbob/plugin-helper": {
|
"@bbob/plugin-helper": {
|
||||||
"version": "2.5.8",
|
"version": "2.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/@bbob/plugin-helper/-/plugin-helper-2.5.8.tgz",
|
"resolved": "https://registry.npmjs.org/@bbob/plugin-helper/-/plugin-helper-2.6.2.tgz",
|
||||||
"integrity": "sha512-mAjQGPkiIsF99ECZLTiEuTpqNedfmQr2gtKvUJFyR98oibirJIRi9Puw1WMqXOW1ZomjXYFl26LrtHEgCwHxbA=="
|
"integrity": "sha512-PUdwOQaLxKfyYTCg9As6RU544slQRGF5f71mTq+Dg4d1fNsi5ACv20W5A19tVxPVpJd8U+BbMrVNTxJIOEqT2Q=="
|
||||||
},
|
},
|
||||||
"@dabh/diagnostics": {
|
"@dabh/diagnostics": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
|
|
@ -42,6 +42,14 @@
|
||||||
"resolved": "https://registry.npmjs.org/@doctormckay/steam-crypto/-/steam-crypto-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/@doctormckay/steam-crypto/-/steam-crypto-1.2.0.tgz",
|
||||||
"integrity": "sha1-KxI8HpgDTzyMa5AQnjX8QnbghrA="
|
"integrity": "sha1-KxI8HpgDTzyMa5AQnjX8QnbghrA="
|
||||||
},
|
},
|
||||||
|
"@pdf-lib/upng": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==",
|
||||||
|
"requires": {
|
||||||
|
"pako": "^1.0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@protobufjs/aspromise": {
|
"@protobufjs/aspromise": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
|
||||||
|
|
@ -222,6 +230,15 @@
|
||||||
"@types/range-parser": "*"
|
"@types/range-parser": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@types/gif-encoder": {
|
||||||
|
"version": "0.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/gif-encoder/-/gif-encoder-0.7.0.tgz",
|
||||||
|
"integrity": "sha512-89hoXkFsFuEWcVJOYq2SFSep/kjIFfzy8BEw15vh4BrHdzyvjXl41QsS8NrKcK3EmufOr2neLfYLrIKTNQqSvw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/http-cache-semantics": {
|
"@types/http-cache-semantics": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
|
||||||
|
|
@ -250,6 +267,29 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz",
|
||||||
"integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ=="
|
"integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ=="
|
||||||
},
|
},
|
||||||
|
"@types/node-fetch": {
|
||||||
|
"version": "2.5.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz",
|
||||||
|
"integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@types/node": "*",
|
||||||
|
"form-data": "^3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"form-data": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"asynckit": "^0.4.0",
|
||||||
|
"combined-stream": "^1.0.8",
|
||||||
|
"mime-types": "^2.1.12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"@types/qs": {
|
"@types/qs": {
|
||||||
"version": "6.9.5",
|
"version": "6.9.5",
|
||||||
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
|
"resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
|
||||||
|
|
@ -582,6 +622,15 @@
|
||||||
"responselike": "^2.0.0"
|
"responselike": "^2.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"call-bind": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==",
|
||||||
|
"requires": {
|
||||||
|
"function-bind": "^1.1.1",
|
||||||
|
"get-intrinsic": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"canvas": {
|
"canvas": {
|
||||||
"version": "2.6.1",
|
"version": "2.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.1.tgz",
|
||||||
|
|
@ -1047,15 +1096,16 @@
|
||||||
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
|
"integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w=="
|
||||||
},
|
},
|
||||||
"es-abstract": {
|
"es-abstract": {
|
||||||
"version": "1.17.7",
|
"version": "1.18.0-next.1",
|
||||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz",
|
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
|
||||||
"integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==",
|
"integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"es-to-primitive": "^1.2.1",
|
"es-to-primitive": "^1.2.1",
|
||||||
"function-bind": "^1.1.1",
|
"function-bind": "^1.1.1",
|
||||||
"has": "^1.0.3",
|
"has": "^1.0.3",
|
||||||
"has-symbols": "^1.0.1",
|
"has-symbols": "^1.0.1",
|
||||||
"is-callable": "^1.2.2",
|
"is-callable": "^1.2.2",
|
||||||
|
"is-negative-zero": "^2.0.0",
|
||||||
"is-regex": "^1.1.1",
|
"is-regex": "^1.1.1",
|
||||||
"object-inspect": "^1.8.0",
|
"object-inspect": "^1.8.0",
|
||||||
"object-keys": "^1.1.1",
|
"object-keys": "^1.1.1",
|
||||||
|
|
@ -1294,6 +1344,16 @@
|
||||||
"wide-align": "^1.1.0"
|
"wide-align": "^1.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"get-intrinsic": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==",
|
||||||
|
"requires": {
|
||||||
|
"function-bind": "^1.1.1",
|
||||||
|
"has": "^1.0.3",
|
||||||
|
"has-symbols": "^1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"get-stream": {
|
"get-stream": {
|
||||||
"version": "5.2.0",
|
"version": "5.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
|
||||||
|
|
@ -1310,6 +1370,37 @@
|
||||||
"assert-plus": "^1.0.0"
|
"assert-plus": "^1.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"gif-encoder": {
|
||||||
|
"version": "0.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/gif-encoder/-/gif-encoder-0.7.2.tgz",
|
||||||
|
"integrity": "sha512-rEe2DJCb8quqOElV5orqRjyk2KNjz+Hdy+eWYVNWn7s1/33QQ6boIJHkgOto5qU2NrGxI2coPDRqcEaGFZkQ1w==",
|
||||||
|
"requires": {
|
||||||
|
"readable-stream": "~1.1.9"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"isarray": {
|
||||||
|
"version": "0.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
|
||||||
|
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
|
||||||
|
},
|
||||||
|
"readable-stream": {
|
||||||
|
"version": "1.1.14",
|
||||||
|
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
|
||||||
|
"integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
|
||||||
|
"requires": {
|
||||||
|
"core-util-is": "~1.0.0",
|
||||||
|
"inherits": "~2.0.1",
|
||||||
|
"isarray": "0.0.1",
|
||||||
|
"string_decoder": "~0.10.x"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"string_decoder": {
|
||||||
|
"version": "0.10.31",
|
||||||
|
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
|
||||||
|
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"github-from-package": {
|
"github-from-package": {
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
||||||
|
|
@ -1526,9 +1617,12 @@
|
||||||
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
|
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
|
||||||
},
|
},
|
||||||
"is-arguments": {
|
"is-arguments": {
|
||||||
"version": "1.0.4",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz",
|
||||||
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA=="
|
"integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==",
|
||||||
|
"requires": {
|
||||||
|
"call-bind": "^1.0.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"is-arrayish": {
|
"is-arrayish": {
|
||||||
"version": "0.3.2",
|
"version": "0.3.2",
|
||||||
|
|
@ -1554,14 +1648,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"is-generator-function": {
|
"is-generator-function": {
|
||||||
"version": "1.0.7",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz",
|
"resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz",
|
||||||
"integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw=="
|
"integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ=="
|
||||||
},
|
},
|
||||||
"is-negative-zero": {
|
"is-negative-zero": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
|
||||||
"integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE="
|
"integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w=="
|
||||||
},
|
},
|
||||||
"is-promise": {
|
"is-promise": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.2",
|
||||||
|
|
@ -1590,12 +1684,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"is-typed-array": {
|
"is-typed-array": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.4.tgz",
|
||||||
"integrity": "sha512-BSYUBOK/HJibQ30wWkWold5txYwMUXQct9YHAQJr8fSwvZoiglcqB0pd7vEN23+Tsi9IUEjztdOSzl4qLVYGTQ==",
|
"integrity": "sha512-ILaRgn4zaSrVNXNGtON6iFNotXW3hAPF3+0fB1usg2jFlWqo5fEDdmJkz0zBfoi7Dgskr8Khi2xZ8cXqZEfXNA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"available-typed-arrays": "^1.0.0",
|
"available-typed-arrays": "^1.0.2",
|
||||||
"es-abstract": "^1.17.4",
|
"call-bind": "^1.0.0",
|
||||||
|
"es-abstract": "^1.18.0-next.1",
|
||||||
"foreach": "^2.0.5",
|
"foreach": "^2.0.5",
|
||||||
"has-symbols": "^1.0.1"
|
"has-symbols": "^1.0.1"
|
||||||
}
|
}
|
||||||
|
|
@ -2024,6 +2119,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/node-bignumber/-/node-bignumber-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/node-bignumber/-/node-bignumber-1.2.1.tgz",
|
||||||
"integrity": "sha1-JmyVUzUoOFOfZhyS5YYxvpeRfqU="
|
"integrity": "sha1-JmyVUzUoOFOfZhyS5YYxvpeRfqU="
|
||||||
},
|
},
|
||||||
|
"node-fetch": {
|
||||||
|
"version": "2.6.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||||
|
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||||
|
},
|
||||||
"node-pre-gyp": {
|
"node-pre-gyp": {
|
||||||
"version": "0.11.0",
|
"version": "0.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz",
|
||||||
|
|
@ -2133,9 +2233,9 @@
|
||||||
"integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
|
"integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
|
||||||
},
|
},
|
||||||
"object-inspect": {
|
"object-inspect": {
|
||||||
"version": "1.8.0",
|
"version": "1.9.0",
|
||||||
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz",
|
||||||
"integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA=="
|
"integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw=="
|
||||||
},
|
},
|
||||||
"object-keys": {
|
"object-keys": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
|
|
@ -2143,35 +2243,14 @@
|
||||||
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
|
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="
|
||||||
},
|
},
|
||||||
"object.assign": {
|
"object.assign": {
|
||||||
"version": "4.1.1",
|
"version": "4.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
|
||||||
"integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==",
|
"integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
|
"call-bind": "^1.0.0",
|
||||||
"define-properties": "^1.1.3",
|
"define-properties": "^1.1.3",
|
||||||
"es-abstract": "^1.18.0-next.0",
|
|
||||||
"has-symbols": "^1.0.1",
|
"has-symbols": "^1.0.1",
|
||||||
"object-keys": "^1.1.1"
|
"object-keys": "^1.1.1"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"es-abstract": {
|
|
||||||
"version": "1.18.0-next.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
|
|
||||||
"integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
|
|
||||||
"requires": {
|
|
||||||
"es-to-primitive": "^1.2.1",
|
|
||||||
"function-bind": "^1.1.1",
|
|
||||||
"has": "^1.0.3",
|
|
||||||
"has-symbols": "^1.0.1",
|
|
||||||
"is-callable": "^1.2.2",
|
|
||||||
"is-negative-zero": "^2.0.0",
|
|
||||||
"is-regex": "^1.1.1",
|
|
||||||
"object-inspect": "^1.8.0",
|
|
||||||
"object-keys": "^1.1.1",
|
|
||||||
"object.assign": "^4.1.1",
|
|
||||||
"string.prototype.trimend": "^1.0.1",
|
|
||||||
"string.prototype.trimstart": "^1.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"on-finished": {
|
"on-finished": {
|
||||||
|
|
@ -2232,6 +2311,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
|
||||||
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
|
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
|
||||||
},
|
},
|
||||||
|
"pako": {
|
||||||
|
"version": "1.0.11",
|
||||||
|
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
|
||||||
|
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
|
||||||
|
},
|
||||||
"parse-srcset": {
|
"parse-srcset": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
|
||||||
|
|
@ -2411,9 +2495,9 @@
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
|
||||||
},
|
},
|
||||||
"protobufjs": {
|
"protobufjs": {
|
||||||
"version": "6.10.1",
|
"version": "6.10.2",
|
||||||
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz",
|
||||||
"integrity": "sha512-pb8kTchL+1Ceg4lFd5XUpK8PdWacbvV5SK2ULH2ebrYtl4GjJmS24m6CKME67jzV53tbJxHlnNOSqQHbTsR9JQ==",
|
"integrity": "sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@protobufjs/aspromise": "^1.1.2",
|
"@protobufjs/aspromise": "^1.1.2",
|
||||||
"@protobufjs/base64": "^1.1.2",
|
"@protobufjs/base64": "^1.1.2",
|
||||||
|
|
@ -2431,9 +2515,9 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "13.13.29",
|
"version": "13.13.38",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.29.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.38.tgz",
|
||||||
"integrity": "sha512-WPGpyEDx4/F4Rx1p1Zar8m+JsMxpSY/wNFPlyNXWV+UzJwkYt3LQg2be/qJgpsLdVJsfxTR5ipY6rv2579jStQ=="
|
"integrity": "sha512-oxo8j9doh7ab9NwDA9bCeFfjHRF/uzk+fTljCy8lMjZ3YzZGAXNDKhTE3Byso/oy32UTUQIXB3HCVHu3d2T3xg=="
|
||||||
},
|
},
|
||||||
"long": {
|
"long": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
|
|
@ -2790,9 +2874,8 @@
|
||||||
"integrity": "sha512-d+tjnr3wwDkbrKFxjYZ0uK4CSF09oJwCmlGH8SdOlTDkbtBPuNhPKY0XzZxQVltZF6/JkEYj+uz+kBr6UrY7BQ=="
|
"integrity": "sha512-d+tjnr3wwDkbrKFxjYZ0uK4CSF09oJwCmlGH8SdOlTDkbtBPuNhPKY0XzZxQVltZF6/JkEYj+uz+kBr6UrY7BQ=="
|
||||||
},
|
},
|
||||||
"steam-user": {
|
"steam-user": {
|
||||||
"version": "4.18.0",
|
"version": "github:icewind1991/node-steam-user#f20f6a042279b606edd6d13f16605984772d83c3",
|
||||||
"resolved": "https://registry.npmjs.org/steam-user/-/steam-user-4.18.0.tgz",
|
"from": "github:icewind1991/node-steam-user#bbcode-sticker",
|
||||||
"integrity": "sha512-l7D9dxjw4eSuNVGBpYx5U8wh2tUmvsJuSvRnImdyYf/nUR9meLGxgdLlHOweJbPW2OaZRPk+P/vX59P2rCKENg==",
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"@bbob/parser": "^2.2.0",
|
"@bbob/parser": "^2.2.0",
|
||||||
"@doctormckay/stdlib": "^1.11.1",
|
"@doctormckay/stdlib": "^1.11.1",
|
||||||
|
|
@ -2860,6 +2943,11 @@
|
||||||
"graceful-fs": "^4.1.3"
|
"graceful-fs": "^4.1.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"stream-buffers": {
|
||||||
|
"version": "3.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz",
|
||||||
|
"integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ=="
|
||||||
|
},
|
||||||
"string-width": {
|
"string-width": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||||
|
|
@ -2871,63 +2959,21 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"string.prototype.trimend": {
|
"string.prototype.trimend": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz",
|
||||||
"integrity": "sha512-8oAG/hi14Z4nOVP0z6mdiVZ/wqjDtWSLygMigTzAb+7aPEDTleeFf+WrF+alzecxIRkckkJVn+dTlwzJXORATw==",
|
"integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"define-properties": "^1.1.3",
|
"call-bind": "^1.0.0",
|
||||||
"es-abstract": "^1.18.0-next.1"
|
"define-properties": "^1.1.3"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"es-abstract": {
|
|
||||||
"version": "1.18.0-next.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
|
|
||||||
"integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
|
|
||||||
"requires": {
|
|
||||||
"es-to-primitive": "^1.2.1",
|
|
||||||
"function-bind": "^1.1.1",
|
|
||||||
"has": "^1.0.3",
|
|
||||||
"has-symbols": "^1.0.1",
|
|
||||||
"is-callable": "^1.2.2",
|
|
||||||
"is-negative-zero": "^2.0.0",
|
|
||||||
"is-regex": "^1.1.1",
|
|
||||||
"object-inspect": "^1.8.0",
|
|
||||||
"object-keys": "^1.1.1",
|
|
||||||
"object.assign": "^4.1.1",
|
|
||||||
"string.prototype.trimend": "^1.0.1",
|
|
||||||
"string.prototype.trimstart": "^1.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"string.prototype.trimstart": {
|
"string.prototype.trimstart": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz",
|
||||||
"integrity": "sha512-7F6CdBTl5zyu30BJFdzSTlSlLPwODC23Od+iLoVH8X6+3fvDPPuBVVj9iaB1GOsSTSIgVfsfm27R2FGrAPznWg==",
|
"integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"define-properties": "^1.1.3",
|
"call-bind": "^1.0.0",
|
||||||
"es-abstract": "^1.18.0-next.1"
|
"define-properties": "^1.1.3"
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"es-abstract": {
|
|
||||||
"version": "1.18.0-next.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz",
|
|
||||||
"integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==",
|
|
||||||
"requires": {
|
|
||||||
"es-to-primitive": "^1.2.1",
|
|
||||||
"function-bind": "^1.1.1",
|
|
||||||
"has": "^1.0.3",
|
|
||||||
"has-symbols": "^1.0.1",
|
|
||||||
"is-callable": "^1.2.2",
|
|
||||||
"is-negative-zero": "^2.0.0",
|
|
||||||
"is-regex": "^1.1.1",
|
|
||||||
"object-inspect": "^1.8.0",
|
|
||||||
"object-keys": "^1.1.1",
|
|
||||||
"object.assign": "^4.1.1",
|
|
||||||
"string.prototype.trimend": "^1.0.1",
|
|
||||||
"string.prototype.trimstart": "^1.0.1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"string_decoder": {
|
"string_decoder": {
|
||||||
|
|
@ -3204,12 +3250,13 @@
|
||||||
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
|
"integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
|
||||||
},
|
},
|
||||||
"which-typed-array": {
|
"which-typed-array": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz",
|
||||||
"integrity": "sha512-KT6okrd1tE6JdZAy3o2VhMoYPh3+J6EMZLyrxBQsZflI1QCZIxMrIYLkosd8Twf+YfknVIHmYQPgJt238p8dnQ==",
|
"integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"available-typed-arrays": "^1.0.2",
|
"available-typed-arrays": "^1.0.2",
|
||||||
"es-abstract": "^1.17.5",
|
"call-bind": "^1.0.0",
|
||||||
|
"es-abstract": "^1.18.0-next.1",
|
||||||
"foreach": "^2.0.5",
|
"foreach": "^2.0.5",
|
||||||
"function-bind": "^1.1.1",
|
"function-bind": "^1.1.1",
|
||||||
"has-symbols": "^1.0.1",
|
"has-symbols": "^1.0.1",
|
||||||
|
|
|
||||||
|
|
@ -11,16 +11,20 @@
|
||||||
},
|
},
|
||||||
"author": "Icewind",
|
"author": "Icewind",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@pdf-lib/upng": "^1.0.1",
|
||||||
"command-line-args": "^5.1.1",
|
"command-line-args": "^5.1.1",
|
||||||
"command-line-usage": "^6.1.1",
|
"command-line-usage": "^6.1.1",
|
||||||
|
"gif-encoder": "^0.7.2",
|
||||||
"js-yaml": "^3.14.0",
|
"js-yaml": "^3.14.0",
|
||||||
"mx-puppet-bridge": "0.1.0-1",
|
"mx-puppet-bridge": "0.1.0-1",
|
||||||
"steam-user": "4.18.0",
|
"steam-user": "icewind1991/node-steam-user#bbcode-sticker",
|
||||||
"steamcommunity": "3.42.0",
|
"steamcommunity": "3.42.0",
|
||||||
"steamid": "1.1.3",
|
"steamid": "1.1.3",
|
||||||
|
"stream-buffers": "^3.0.2",
|
||||||
"ts-debounce": "2.1.0"
|
"ts-debounce": "2.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/gif-encoder": "^0.7.0",
|
||||||
"@types/node": "^14.14.10",
|
"@types/node": "^14.14.10",
|
||||||
"@types/steamid": "^1.1.0",
|
"@types/steamid": "^1.1.0",
|
||||||
"typescript": "^4.1.2"
|
"typescript": "^4.1.2"
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,6 @@ export interface IIncomingFriendMessage {
|
||||||
|
|
||||||
export type BBCodeField = BBCodeNode | string;
|
export type BBCodeField = BBCodeNode | string;
|
||||||
|
|
||||||
export function isBBCode(field: BBCodeField): field is BBCodeNode {
|
|
||||||
return field['tag'] !== undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface BBCodeNode {
|
export interface BBCodeNode {
|
||||||
tag: string
|
tag: string
|
||||||
attrs: { [attr: string]: string },
|
attrs: { [attr: string]: string },
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ export interface LoginToken {
|
||||||
steamID: SteamID
|
steamID: SteamID
|
||||||
}
|
}
|
||||||
|
|
||||||
// export async function login(details: LoginDetails, steamGuard?: () => Promise<string>, twoFactor?: () => Promise<string>, captcha?: (url: string) => Promise<string>): Promise<LoginToken> {
|
// export async function login(details: LoginDetails, steamGuard?: () => Promise<string>, twoFactor?: () => Promise<string>, captcha?: (urlOrBuffer: string) => Promise<string>): Promise<LoginToken> {
|
||||||
// let community = new SteamCommunity();
|
// let community = new SteamCommunity();
|
||||||
// while (true) {
|
// while (true) {
|
||||||
// try {
|
// try {
|
||||||
|
|
|
||||||
123
src/message.ts
Normal file
123
src/message.ts
Normal file
|
|
@ -0,0 +1,123 @@
|
||||||
|
import {BBCodeField, BBCodeNode, IIncomingChatMessage, IIncomingFriendMessage} from "./interfaces";
|
||||||
|
import {Steam} from "./steam";
|
||||||
|
import UPNG from "@pdf-lib/upng";
|
||||||
|
|
||||||
|
const GIFEncoder = require("gif-encoder");
|
||||||
|
import {WritableStreamBuffer} from 'stream-buffers';
|
||||||
|
import {Util} from "mx-puppet-bridge";
|
||||||
|
|
||||||
|
function isBBCode(field: BBCodeField): field is BBCodeNode {
|
||||||
|
return field['tag'] !== undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function apngToGif(sourceUrl: string): Promise<Buffer> {
|
||||||
|
const input = await Util.DownloadFile(sourceUrl);
|
||||||
|
|
||||||
|
const pngImage = UPNG.decode(input);
|
||||||
|
let frameData = UPNG.toRGBA8(pngImage);
|
||||||
|
|
||||||
|
const encoder = new GIFEncoder(pngImage.width, pngImage.height);
|
||||||
|
let output = new WritableStreamBuffer();
|
||||||
|
encoder.pipe(output);
|
||||||
|
|
||||||
|
encoder.setRepeat(0);
|
||||||
|
encoder.setTransparent(0xFF00FF);
|
||||||
|
encoder.writeHeader();
|
||||||
|
|
||||||
|
for (let i = 0; i < pngImage.frames.length; i++) {
|
||||||
|
let frame = pngImage.frames[i];
|
||||||
|
let data = new Uint8Array(frameData[i]);
|
||||||
|
|
||||||
|
// set transparent pixels to 0xFF00FF
|
||||||
|
for (let y = 0; y < data.length; y += 4) {
|
||||||
|
if (data[y + 3] < 200) {
|
||||||
|
data[y] = 0xFF;
|
||||||
|
data[y + 1] = 0x00;
|
||||||
|
data[y + 2] = 0xFF;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
encoder.setDelay(frame.delay);
|
||||||
|
|
||||||
|
encoder.addFrame(data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return output.getContents();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function formatBBCode(steam: Steam, puppetId: number, node: BBCodeNode): Promise<ImageMessage | TextMessage> {
|
||||||
|
if (node.tag === 'img') {
|
||||||
|
return {
|
||||||
|
kind: "image",
|
||||||
|
urlOrBuffer: node.attrs['src']
|
||||||
|
};
|
||||||
|
} else if (node.tag === 'emoticon') {
|
||||||
|
let emote = node.content[0] as string;
|
||||||
|
const mxc = await steam.getEmojiMxc(
|
||||||
|
puppetId, 'emoticonlarge', emote,
|
||||||
|
);
|
||||||
|
return {
|
||||||
|
kind: "text",
|
||||||
|
body: `:${emote}:`,
|
||||||
|
formattedBody: `<img alt=":${emote}:" title=":${emote}:" height="32" src="${mxc}" data-mx-emoticon />`
|
||||||
|
};
|
||||||
|
} else if (node.tag === 'sticker') {
|
||||||
|
let sticker = node.attrs['type'];
|
||||||
|
let gif = await apngToGif(`https://community.cloudflare.steamstatic.com/economy/sticker/${sticker}`);
|
||||||
|
return {
|
||||||
|
kind: "image",
|
||||||
|
urlOrBuffer: gif
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {kind: "text", body: `[${node.tag}]`};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function exportMessageForSending(steam: Steam, puppetId: number, message: IIncomingFriendMessage | IIncomingChatMessage): Promise<(TextMessage | ImageMessage)[]> {
|
||||||
|
if (message.message_bbcode_parsed) {
|
||||||
|
let parts = await Promise.all(message.message_bbcode_parsed.map(node => {
|
||||||
|
if (isBBCode(node)) {
|
||||||
|
return formatBBCode(steam, puppetId, node);
|
||||||
|
} else {
|
||||||
|
return {kind: "text", body: node} as TextMessage;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
|
||||||
|
return parts.reduce((merged, part) => {
|
||||||
|
if (merged.length === 0) {
|
||||||
|
merged.push(part);
|
||||||
|
} else {
|
||||||
|
let last = merged[merged.length - 1];
|
||||||
|
|
||||||
|
// merge adjacent text nodes
|
||||||
|
if (last.kind === "text" && part.kind === "text") {
|
||||||
|
if (!last.formattedBody) {
|
||||||
|
last.formattedBody = last.body;
|
||||||
|
}
|
||||||
|
if (!part.formattedBody) {
|
||||||
|
part.formattedBody = part.body;
|
||||||
|
}
|
||||||
|
last.body += " " + part.body;
|
||||||
|
last.formattedBody += " " + part.formattedBody;
|
||||||
|
} else {
|
||||||
|
merged.push(part);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return merged;
|
||||||
|
}, [] as (TextMessage | ImageMessage)[]);
|
||||||
|
} else {
|
||||||
|
return [{kind: "text", body: message.message_no_bbcode}];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface TextMessage {
|
||||||
|
kind: "text";
|
||||||
|
body: string;
|
||||||
|
formattedBody?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface ImageMessage {
|
||||||
|
kind: "image";
|
||||||
|
urlOrBuffer: string | Buffer
|
||||||
|
}
|
||||||
71
src/steam.ts
71
src/steam.ts
|
|
@ -20,10 +20,10 @@ import {
|
||||||
IGroupDetails,
|
IGroupDetails,
|
||||||
IIncomingChatMessage,
|
IIncomingChatMessage,
|
||||||
IIncomingFriendMessage,
|
IIncomingFriendMessage,
|
||||||
IPersona,
|
IPersona
|
||||||
isBBCode
|
|
||||||
} from "./interfaces";
|
} from "./interfaces";
|
||||||
import {debounce} from 'ts-debounce';
|
import {debounce} from 'ts-debounce';
|
||||||
|
import {exportMessageForSending} from "./message";
|
||||||
|
|
||||||
const log = new Log("MatrixPuppet:Steam");
|
const log = new Log("MatrixPuppet:Steam");
|
||||||
|
|
||||||
|
|
@ -284,7 +284,7 @@ export class Steam {
|
||||||
|
|
||||||
let sendParams = await this.getFriendMessageSendParams(puppetId, message, fromSteamId);
|
let sendParams = await this.getFriendMessageSendParams(puppetId, message, fromSteamId);
|
||||||
|
|
||||||
await this.sendMessage(p, sendParams, message);
|
await this.sendMessage(p, puppetId, sendParams, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async handleChatMessage(puppetId: number, message: IIncomingChatMessage, fromSteamId?: SteamID) {
|
public async handleChatMessage(puppetId: number, message: IIncomingChatMessage, fromSteamId?: SteamID) {
|
||||||
|
|
@ -293,30 +293,28 @@ export class Steam {
|
||||||
|
|
||||||
let sendParams = await this.getChatMessageSendParams(puppetId, message, fromSteamId);
|
let sendParams = await this.getChatMessageSendParams(puppetId, message, fromSteamId);
|
||||||
|
|
||||||
await this.sendMessage(p, sendParams, message);
|
await this.sendMessage(p, puppetId, sendParams, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async sendMessage(puppet: ISteamPuppet, sendParams: IReceiveParams, message: IIncomingFriendMessage | IIncomingChatMessage) {
|
public async sendMessage(puppet: ISteamPuppet, puppetId: number, sendParams: IReceiveParams, incoming: IIncomingFriendMessage | IIncomingChatMessage) {
|
||||||
// message is only an embedded image
|
const parts = await exportMessageForSending(this, puppetId, incoming);
|
||||||
if (
|
|
||||||
message.message_bbcode_parsed
|
for (let part of parts) {
|
||||||
&& message.message_bbcode_parsed.length === 1
|
if (part.kind === "image") {
|
||||||
&& isBBCode(message.message_bbcode_parsed[0])
|
const imageUrl = part.urlOrBuffer;
|
||||||
&& message.message_bbcode_parsed[0].tag === 'img'
|
let i = (typeof imageUrl === "string") ? puppet.ourSendImages.indexOf(imageUrl) : -1;
|
||||||
&& message.message_no_bbcode === message.message_bbcode_parsed[0].attrs['src']
|
if (i === -1) {
|
||||||
) {
|
await this.bridge.sendImage(sendParams, imageUrl);
|
||||||
const url = message.message_bbcode_parsed[0].attrs['src'];
|
} else {
|
||||||
let i = puppet.ourSendImages.indexOf(url);
|
// image came from us, dont send
|
||||||
if (i === -1) {
|
puppet.ourSendImages.splice(i);
|
||||||
await this.bridge.sendImage(sendParams, url);
|
}
|
||||||
} else {
|
} else if (part.kind === "text") {
|
||||||
// image came from us, dont send
|
await this.bridge.sendMessage(sendParams, {
|
||||||
puppet.ourSendImages.splice(i);
|
body: part.body,
|
||||||
|
formattedBody: part.formattedBody,
|
||||||
|
});
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
await this.bridge.sendMessage(sendParams, {
|
|
||||||
body: message.message_no_bbcode,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -382,7 +380,8 @@ export class Steam {
|
||||||
|
|
||||||
let steamId = this.getRoomSteamId(room);
|
let steamId = this.getRoomSteamId(room);
|
||||||
if (steamId) {
|
if (steamId) {
|
||||||
const bufferPromise = Util.DownloadFile(data.url);;
|
const bufferPromise = Util.DownloadFile(data.url);
|
||||||
|
;
|
||||||
|
|
||||||
await new Promise((resolve, _reject) => {
|
await new Promise((resolve, _reject) => {
|
||||||
p.client.webLogOn();
|
p.client.webLogOn();
|
||||||
|
|
@ -560,4 +559,26 @@ export class Steam {
|
||||||
p.client.setPersona(EPersonaState.Away);
|
p.client.setPersona(EPersonaState.Away);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async getEmojiMxc(puppetId: number, type: 'sticker' | 'emoticonlarge', name: string): Promise<string | null> {
|
||||||
|
const id = `${type}/${name}`;
|
||||||
|
const emoji = await this.bridge.emoteSync.get({
|
||||||
|
puppetId,
|
||||||
|
emoteId: id,
|
||||||
|
});
|
||||||
|
if (emoji && emoji.avatarMxc) {
|
||||||
|
return emoji.avatarMxc;
|
||||||
|
}
|
||||||
|
const {emote} = await this.bridge.emoteSync.set({
|
||||||
|
puppetId,
|
||||||
|
emoteId: id,
|
||||||
|
avatarUrl: `https://community.cloudflare.steamstatic.com/economy/${type}/${encodeURIComponent(name)}`,
|
||||||
|
name,
|
||||||
|
data: {
|
||||||
|
type,
|
||||||
|
name,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
return emote.avatarMxc || null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue