Merge branch 'fosscord:master' into master
This commit is contained in:
		
						commit
						553a3d5daf
					
				
							
								
								
									
										71
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								.github/workflows/codeql-analysis.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | |||||||
|  | # For most projects, this workflow file will not need changing; you simply need | ||||||
|  | # to commit it to your repository. | ||||||
|  | # | ||||||
|  | # You may wish to alter this file to override the set of languages analyzed, | ||||||
|  | # or to provide custom queries or build logic. | ||||||
|  | # | ||||||
|  | # ******** NOTE ******** | ||||||
|  | # We have attempted to detect the languages in your repository. Please check | ||||||
|  | # the `language` matrix defined below to confirm you have the correct set of | ||||||
|  | # supported CodeQL languages. | ||||||
|  | # | ||||||
|  | name: "CodeQL" | ||||||
|  | 
 | ||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: [ master ] | ||||||
|  |   pull_request: | ||||||
|  |     # The branches below must be a subset of the branches above | ||||||
|  |     branches: [ master ] | ||||||
|  |   schedule: | ||||||
|  |     - cron: '25 10 * * 5' | ||||||
|  | 
 | ||||||
|  | jobs: | ||||||
|  |   analyze: | ||||||
|  |     name: Analyze | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     permissions: | ||||||
|  |       actions: read | ||||||
|  |       contents: read | ||||||
|  |       security-events: write | ||||||
|  | 
 | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         language: [ 'javascript' ] | ||||||
|  |         # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] | ||||||
|  |         # Learn more: | ||||||
|  |         # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed | ||||||
|  | 
 | ||||||
|  |     steps: | ||||||
|  |     - name: Checkout repository | ||||||
|  |       uses: actions/checkout@v2 | ||||||
|  | 
 | ||||||
|  |     # Initializes the CodeQL tools for scanning. | ||||||
|  |     - name: Initialize CodeQL | ||||||
|  |       uses: github/codeql-action/init@v1 | ||||||
|  |       with: | ||||||
|  |         languages: ${{ matrix.language }} | ||||||
|  |         # If you wish to specify custom queries, you can do so here or in a config file. | ||||||
|  |         # By default, queries listed here will override any specified in a config file. | ||||||
|  |         # Prefix the list here with "+" to use these queries and those in the config file. | ||||||
|  |         # queries: ./path/to/local/query, your-org/your-repo/queries@main | ||||||
|  | 
 | ||||||
|  |     # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java). | ||||||
|  |     # If this step fails, then you should remove it and run the build manually (see below) | ||||||
|  |     - name: Autobuild | ||||||
|  |       uses: github/codeql-action/autobuild@v1 | ||||||
|  | 
 | ||||||
|  |     # ℹ️ Command-line programs to run using the OS shell. | ||||||
|  |     # 📚 https://git.io/JvXDl | ||||||
|  | 
 | ||||||
|  |     # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines | ||||||
|  |     #    and modify them (or add more) to build your code if your project | ||||||
|  |     #    uses a compiled language | ||||||
|  | 
 | ||||||
|  |     #- run: | | ||||||
|  |     #   make bootstrap | ||||||
|  |     #   make release | ||||||
|  | 
 | ||||||
|  |     - name: Perform CodeQL Analysis | ||||||
|  |       uses: github/codeql-action/analyze@v1 | ||||||
							
								
								
									
										306
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										306
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -9,7 +9,7 @@ | |||||||
| 			"version": "1.0.0", | 			"version": "1.0.0", | ||||||
| 			"license": "ISC", | 			"license": "ISC", | ||||||
| 			"dependencies": { | 			"dependencies": { | ||||||
| 				"@fosscord/server-util": "^1.3.5", | 				"@fosscord/server-util": "^1.3.9", | ||||||
| 				"@types/jest": "^26.0.22", | 				"@types/jest": "^26.0.22", | ||||||
| 				"@types/json-schema": "^7.0.7", | 				"@types/json-schema": "^7.0.7", | ||||||
| 				"ajv": "^8.4.0", | 				"ajv": "^8.4.0", | ||||||
| @ -18,6 +18,7 @@ | |||||||
| 				"atomically": "^1.7.0", | 				"atomically": "^1.7.0", | ||||||
| 				"bcrypt": "^5.0.1", | 				"bcrypt": "^5.0.1", | ||||||
| 				"body-parser": "^1.19.0", | 				"body-parser": "^1.19.0", | ||||||
|  | 				"cheerio": "^1.0.0-rc.9", | ||||||
| 				"dot-prop": "^6.0.1", | 				"dot-prop": "^6.0.1", | ||||||
| 				"dotenv": "^8.2.0", | 				"dotenv": "^8.2.0", | ||||||
| 				"env-paths": "^2.2.1", | 				"env-paths": "^2.2.1", | ||||||
| @ -519,9 +520,9 @@ | |||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		"node_modules/@fosscord/server-util": { | 		"node_modules/@fosscord/server-util": { | ||||||
| 			"version": "1.3.5", | 			"version": "1.3.9", | ||||||
| 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.5.tgz", | 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.9.tgz", | ||||||
| 			"integrity": "sha512-gXtpiw1LoGeYxmIOKHVv6iAShye6SVYKuwjvLrnsrAXPeyE3h5/YwYAEnjycuKIVjafF9RVBWluWzWSj/TOPbA==", | 			"integrity": "sha512-1oOcMMOBVJO3BodyKQaP3ukg9ok8qfCeIAHSCcloO02lAq45Y+EI7Y7i5a8dotYl7CP8Uv8ke9mGqI3Tojg0Fw==", | ||||||
| 			"dependencies": { | 			"dependencies": { | ||||||
| 				"@types/jsonwebtoken": "^8.5.0", | 				"@types/jsonwebtoken": "^8.5.0", | ||||||
| 				"@types/mongoose-autopopulate": "^0.10.1", | 				"@types/mongoose-autopopulate": "^0.10.1", | ||||||
| @ -2441,6 +2442,11 @@ | |||||||
| 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | 			"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||||||
| 			"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | 			"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/boolbase": { | ||||||
|  | 			"version": "1.0.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | ||||||
|  | 			"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" | ||||||
|  | 		}, | ||||||
| 		"node_modules/brace-expansion": { | 		"node_modules/brace-expansion": { | ||||||
| 			"version": "1.1.11", | 			"version": "1.1.11", | ||||||
| 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||||
| @ -2917,6 +2923,41 @@ | |||||||
| 				"node": ">=10" | 				"node": ">=10" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/cheerio": { | ||||||
|  | 			"version": "1.0.0-rc.9", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", | ||||||
|  | 			"integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"cheerio-select": "^1.4.0", | ||||||
|  | 				"dom-serializer": "^1.3.1", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"htmlparser2": "^6.1.0", | ||||||
|  | 				"parse5": "^6.0.1", | ||||||
|  | 				"parse5-htmlparser2-tree-adapter": "^6.0.1", | ||||||
|  | 				"tslib": "^2.2.0" | ||||||
|  | 			}, | ||||||
|  | 			"engines": { | ||||||
|  | 				"node": ">= 6" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/cheeriojs/cheerio?sponsor=1" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"node_modules/cheerio-select": { | ||||||
|  | 			"version": "1.4.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", | ||||||
|  | 			"integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"css-select": "^4.1.2", | ||||||
|  | 				"css-what": "^5.0.0", | ||||||
|  | 				"domelementtype": "^2.2.0", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"domutils": "^2.6.0" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/sponsors/fb55" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/chokidar": { | 		"node_modules/chokidar": { | ||||||
| 			"version": "3.5.1", | 			"version": "3.5.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | ||||||
| @ -3436,6 +3477,32 @@ | |||||||
| 				"node": "*" | 				"node": "*" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/css-select": { | ||||||
|  | 			"version": "4.1.2", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", | ||||||
|  | 			"integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"boolbase": "^1.0.0", | ||||||
|  | 				"css-what": "^5.0.0", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"domutils": "^2.6.0", | ||||||
|  | 				"nth-check": "^2.0.0" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/sponsors/fb55" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"node_modules/css-what": { | ||||||
|  | 			"version": "5.0.1", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", | ||||||
|  | 			"integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", | ||||||
|  | 			"engines": { | ||||||
|  | 				"node": ">= 6" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/sponsors/fb55" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/cssom": { | 		"node_modules/cssom": { | ||||||
| 			"version": "0.4.4", | 			"version": "0.4.4", | ||||||
| 			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", | 			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", | ||||||
| @ -3941,6 +4008,19 @@ | |||||||
| 			"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", | 			"integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", | ||||||
| 			"dev": true | 			"dev": true | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/dom-serializer": { | ||||||
|  | 			"version": "1.3.2", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", | ||||||
|  | 			"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"domelementtype": "^2.0.1", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"entities": "^2.0.0" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/domain-browser": { | 		"node_modules/domain-browser": { | ||||||
| 			"version": "1.2.0", | 			"version": "1.2.0", | ||||||
| 			"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", | 			"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", | ||||||
| @ -3951,6 +4031,17 @@ | |||||||
| 				"npm": ">=1.2" | 				"npm": ">=1.2" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/domelementtype": { | ||||||
|  | 			"version": "2.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", | ||||||
|  | 			"funding": [ | ||||||
|  | 				{ | ||||||
|  | 					"type": "github", | ||||||
|  | 					"url": "https://github.com/sponsors/fb55" | ||||||
|  | 				} | ||||||
|  | 			] | ||||||
|  | 		}, | ||||||
| 		"node_modules/domexception": { | 		"node_modules/domexception": { | ||||||
| 			"version": "2.0.1", | 			"version": "2.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | ||||||
| @ -3972,6 +4063,33 @@ | |||||||
| 				"node": ">=8" | 				"node": ">=8" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/domhandler": { | ||||||
|  | 			"version": "4.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"domelementtype": "^2.2.0" | ||||||
|  | 			}, | ||||||
|  | 			"engines": { | ||||||
|  | 				"node": ">= 4" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/fb55/domhandler?sponsor=1" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"node_modules/domutils": { | ||||||
|  | 			"version": "2.6.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", | ||||||
|  | 			"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"dom-serializer": "^1.0.1", | ||||||
|  | 				"domelementtype": "^2.2.0", | ||||||
|  | 				"domhandler": "^4.2.0" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/fb55/domutils?sponsor=1" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/dot-prop": { | 		"node_modules/dot-prop": { | ||||||
| 			"version": "6.0.1", | 			"version": "6.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", | ||||||
| @ -4106,6 +4224,14 @@ | |||||||
| 				"once": "^1.4.0" | 				"once": "^1.4.0" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/entities": { | ||||||
|  | 			"version": "2.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/fb55/entities?sponsor=1" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/env-paths": { | 		"node_modules/env-paths": { | ||||||
| 			"version": "2.2.1", | 			"version": "2.2.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", | 			"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", | ||||||
| @ -5179,6 +5305,24 @@ | |||||||
| 				"node": ">=0.10" | 				"node": ">=0.10" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/htmlparser2": { | ||||||
|  | 			"version": "6.1.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | ||||||
|  | 			"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", | ||||||
|  | 			"funding": [ | ||||||
|  | 				"https://github.com/fb55/htmlparser2?sponsor=1", | ||||||
|  | 				{ | ||||||
|  | 					"type": "github", | ||||||
|  | 					"url": "https://github.com/sponsors/fb55" | ||||||
|  | 				} | ||||||
|  | 			], | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"domelementtype": "^2.0.1", | ||||||
|  | 				"domhandler": "^4.0.0", | ||||||
|  | 				"domutils": "^2.5.2", | ||||||
|  | 				"entities": "^2.0.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/http-errors": { | 		"node_modules/http-errors": { | ||||||
| 			"version": "1.7.2", | 			"version": "1.7.2", | ||||||
| 			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | 			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | ||||||
| @ -8781,6 +8925,17 @@ | |||||||
| 				"set-blocking": "~2.0.0" | 				"set-blocking": "~2.0.0" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/nth-check": { | ||||||
|  | 			"version": "2.0.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", | ||||||
|  | 			"integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"boolbase": "^1.0.0" | ||||||
|  | 			}, | ||||||
|  | 			"funding": { | ||||||
|  | 				"url": "https://github.com/fb55/nth-check?sponsor=1" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"node_modules/number-is-nan": { | 		"node_modules/number-is-nan": { | ||||||
| 			"version": "1.0.1", | 			"version": "1.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | ||||||
| @ -9101,8 +9256,15 @@ | |||||||
| 		"node_modules/parse5": { | 		"node_modules/parse5": { | ||||||
| 			"version": "6.0.1", | 			"version": "6.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", | ||||||
| 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", | 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" | ||||||
| 			"dev": true | 		}, | ||||||
|  | 		"node_modules/parse5-htmlparser2-tree-adapter": { | ||||||
|  | 			"version": "6.0.1", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", | ||||||
|  | 			"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", | ||||||
|  | 			"dependencies": { | ||||||
|  | 				"parse5": "^6.0.1" | ||||||
|  | 			} | ||||||
| 		}, | 		}, | ||||||
| 		"node_modules/parseurl": { | 		"node_modules/parseurl": { | ||||||
| 			"version": "1.3.3", | 			"version": "1.3.3", | ||||||
| @ -11531,6 +11693,11 @@ | |||||||
| 				"node": ">=4" | 				"node": ">=4" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"node_modules/tslib": { | ||||||
|  | 			"version": "2.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" | ||||||
|  | 		}, | ||||||
| 		"node_modules/tty-browserify": { | 		"node_modules/tty-browserify": { | ||||||
| 			"version": "0.0.1", | 			"version": "0.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", | ||||||
| @ -12693,9 +12860,9 @@ | |||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
| 		"@fosscord/server-util": { | 		"@fosscord/server-util": { | ||||||
| 			"version": "1.3.5", | 			"version": "1.3.9", | ||||||
| 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.5.tgz", | 			"resolved": "https://registry.npmjs.org/@fosscord/server-util/-/server-util-1.3.9.tgz", | ||||||
| 			"integrity": "sha512-gXtpiw1LoGeYxmIOKHVv6iAShye6SVYKuwjvLrnsrAXPeyE3h5/YwYAEnjycuKIVjafF9RVBWluWzWSj/TOPbA==", | 			"integrity": "sha512-1oOcMMOBVJO3BodyKQaP3ukg9ok8qfCeIAHSCcloO02lAq45Y+EI7Y7i5a8dotYl7CP8Uv8ke9mGqI3Tojg0Fw==", | ||||||
| 			"requires": { | 			"requires": { | ||||||
| 				"@types/jsonwebtoken": "^8.5.0", | 				"@types/jsonwebtoken": "^8.5.0", | ||||||
| 				"@types/mongoose-autopopulate": "^0.10.1", | 				"@types/mongoose-autopopulate": "^0.10.1", | ||||||
| @ -14296,6 +14463,11 @@ | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"boolbase": { | ||||||
|  | 			"version": "1.0.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", | ||||||
|  | 			"integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" | ||||||
|  | 		}, | ||||||
| 		"brace-expansion": { | 		"brace-expansion": { | ||||||
| 			"version": "1.1.11", | 			"version": "1.1.11", | ||||||
| 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | 			"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", | ||||||
| @ -14722,6 +14894,32 @@ | |||||||
| 			"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", | 			"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", | ||||||
| 			"dev": true | 			"dev": true | ||||||
| 		}, | 		}, | ||||||
|  | 		"cheerio": { | ||||||
|  | 			"version": "1.0.0-rc.9", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.9.tgz", | ||||||
|  | 			"integrity": "sha512-QF6XVdrLONO6DXRF5iaolY+odmhj2CLj+xzNod7INPWMi/x9X4SOylH0S/vaPpX+AUU6t04s34SQNh7DbkuCng==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"cheerio-select": "^1.4.0", | ||||||
|  | 				"dom-serializer": "^1.3.1", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"htmlparser2": "^6.1.0", | ||||||
|  | 				"parse5": "^6.0.1", | ||||||
|  | 				"parse5-htmlparser2-tree-adapter": "^6.0.1", | ||||||
|  | 				"tslib": "^2.2.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"cheerio-select": { | ||||||
|  | 			"version": "1.4.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.4.0.tgz", | ||||||
|  | 			"integrity": "sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"css-select": "^4.1.2", | ||||||
|  | 				"css-what": "^5.0.0", | ||||||
|  | 				"domelementtype": "^2.2.0", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"domutils": "^2.6.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"chokidar": { | 		"chokidar": { | ||||||
| 			"version": "3.5.1", | 			"version": "3.5.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | 			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", | ||||||
| @ -15162,6 +15360,23 @@ | |||||||
| 				"randomfill": "^1.0.3" | 				"randomfill": "^1.0.3" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"css-select": { | ||||||
|  | 			"version": "4.1.2", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.2.tgz", | ||||||
|  | 			"integrity": "sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"boolbase": "^1.0.0", | ||||||
|  | 				"css-what": "^5.0.0", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"domutils": "^2.6.0", | ||||||
|  | 				"nth-check": "^2.0.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"css-what": { | ||||||
|  | 			"version": "5.0.1", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", | ||||||
|  | 			"integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" | ||||||
|  | 		}, | ||||||
| 		"cssom": { | 		"cssom": { | ||||||
| 			"version": "0.4.4", | 			"version": "0.4.4", | ||||||
| 			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", | 			"resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", | ||||||
| @ -15605,12 +15820,27 @@ | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"dom-serializer": { | ||||||
|  | 			"version": "1.3.2", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", | ||||||
|  | 			"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"domelementtype": "^2.0.1", | ||||||
|  | 				"domhandler": "^4.2.0", | ||||||
|  | 				"entities": "^2.0.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"domain-browser": { | 		"domain-browser": { | ||||||
| 			"version": "1.2.0", | 			"version": "1.2.0", | ||||||
| 			"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", | 			"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", | ||||||
| 			"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", | 			"integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", | ||||||
| 			"dev": true | 			"dev": true | ||||||
| 		}, | 		}, | ||||||
|  | 		"domelementtype": { | ||||||
|  | 			"version": "2.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" | ||||||
|  | 		}, | ||||||
| 		"domexception": { | 		"domexception": { | ||||||
| 			"version": "2.0.1", | 			"version": "2.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", | ||||||
| @ -15628,6 +15858,24 @@ | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"domhandler": { | ||||||
|  | 			"version": "4.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"domelementtype": "^2.2.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
|  | 		"domutils": { | ||||||
|  | 			"version": "2.6.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", | ||||||
|  | 			"integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"dom-serializer": "^1.0.1", | ||||||
|  | 				"domelementtype": "^2.2.0", | ||||||
|  | 				"domhandler": "^4.2.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"dot-prop": { | 		"dot-prop": { | ||||||
| 			"version": "6.0.1", | 			"version": "6.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", | ||||||
| @ -15749,6 +15997,11 @@ | |||||||
| 				"once": "^1.4.0" | 				"once": "^1.4.0" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"entities": { | ||||||
|  | 			"version": "2.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" | ||||||
|  | 		}, | ||||||
| 		"env-paths": { | 		"env-paths": { | ||||||
| 			"version": "2.2.1", | 			"version": "2.2.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", | 			"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", | ||||||
| @ -16628,6 +16881,17 @@ | |||||||
| 			"integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", | 			"integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", | ||||||
| 			"dev": true | 			"dev": true | ||||||
| 		}, | 		}, | ||||||
|  | 		"htmlparser2": { | ||||||
|  | 			"version": "6.1.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", | ||||||
|  | 			"integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"domelementtype": "^2.0.1", | ||||||
|  | 				"domhandler": "^4.0.0", | ||||||
|  | 				"domutils": "^2.5.2", | ||||||
|  | 				"entities": "^2.0.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"http-errors": { | 		"http-errors": { | ||||||
| 			"version": "1.7.2", | 			"version": "1.7.2", | ||||||
| 			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | 			"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", | ||||||
| @ -19560,6 +19824,14 @@ | |||||||
| 				"set-blocking": "~2.0.0" | 				"set-blocking": "~2.0.0" | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"nth-check": { | ||||||
|  | 			"version": "2.0.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", | ||||||
|  | 			"integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"boolbase": "^1.0.0" | ||||||
|  | 			} | ||||||
|  | 		}, | ||||||
| 		"number-is-nan": { | 		"number-is-nan": { | ||||||
| 			"version": "1.0.1", | 			"version": "1.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", | ||||||
| @ -19812,8 +20084,15 @@ | |||||||
| 		"parse5": { | 		"parse5": { | ||||||
| 			"version": "6.0.1", | 			"version": "6.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", | ||||||
| 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", | 			"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" | ||||||
| 			"dev": true | 		}, | ||||||
|  | 		"parse5-htmlparser2-tree-adapter": { | ||||||
|  | 			"version": "6.0.1", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", | ||||||
|  | 			"integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", | ||||||
|  | 			"requires": { | ||||||
|  | 				"parse5": "^6.0.1" | ||||||
|  | 			} | ||||||
| 		}, | 		}, | ||||||
| 		"parseurl": { | 		"parseurl": { | ||||||
| 			"version": "1.3.3", | 			"version": "1.3.3", | ||||||
| @ -21828,6 +22107,11 @@ | |||||||
| 				} | 				} | ||||||
| 			} | 			} | ||||||
| 		}, | 		}, | ||||||
|  | 		"tslib": { | ||||||
|  | 			"version": "2.2.0", | ||||||
|  | 			"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", | ||||||
|  | 			"integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==" | ||||||
|  | 		}, | ||||||
| 		"tty-browserify": { | 		"tty-browserify": { | ||||||
| 			"version": "0.0.1", | 			"version": "0.0.1", | ||||||
| 			"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", | 			"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ | |||||||
| 	}, | 	}, | ||||||
| 	"homepage": "https://github.com/fosscord/fosscord-api#readme", | 	"homepage": "https://github.com/fosscord/fosscord-api#readme", | ||||||
| 	"dependencies": { | 	"dependencies": { | ||||||
| 		"@fosscord/server-util": "^1.3.5", | 		"@fosscord/server-util": "^1.3.9", | ||||||
| 		"@types/jest": "^26.0.22", | 		"@types/jest": "^26.0.22", | ||||||
| 		"@types/json-schema": "^7.0.7", | 		"@types/json-schema": "^7.0.7", | ||||||
| 		"ajv": "^8.4.0", | 		"ajv": "^8.4.0", | ||||||
| @ -38,6 +38,7 @@ | |||||||
| 		"atomically": "^1.7.0", | 		"atomically": "^1.7.0", | ||||||
| 		"bcrypt": "^5.0.1", | 		"bcrypt": "^5.0.1", | ||||||
| 		"body-parser": "^1.19.0", | 		"body-parser": "^1.19.0", | ||||||
|  | 		"cheerio": "^1.0.0-rc.9", | ||||||
| 		"dot-prop": "^6.0.1", | 		"dot-prop": "^6.0.1", | ||||||
| 		"dotenv": "^8.2.0", | 		"dotenv": "^8.2.0", | ||||||
| 		"env-paths": "^2.2.1", | 		"env-paths": "^2.2.1", | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ import { HTTPError } from "lambert-server"; | |||||||
| import { MessageCreateSchema } from "../../../../../schema/Message"; | import { MessageCreateSchema } from "../../../../../schema/Message"; | ||||||
| import { emitEvent } from "../../../../../util/Event"; | import { emitEvent } from "../../../../../util/Event"; | ||||||
| import { check } from "../../../../../util/instanceOf"; | import { check } from "../../../../../util/instanceOf"; | ||||||
| import { handleMessage } from "../../../../../util/Message"; | import { handleMessage, postHandleMessage } from "../../../../../util/Message"; | ||||||
| 
 | 
 | ||||||
| const router = Router(); | const router = Router(); | ||||||
| 
 | 
 | ||||||
| @ -40,6 +40,8 @@ router.patch("/", check(MessageCreateSchema), async (req, res) => { | |||||||
| 		data: { ...toObject(message), nonce: undefined } | 		data: { ...toObject(message), nonce: undefined } | ||||||
| 	} as MessageUpdateEvent); | 	} as MessageUpdateEvent); | ||||||
| 
 | 
 | ||||||
|  | 	postHandleMessage(message); | ||||||
|  | 
 | ||||||
| 	return res.json(toObject(message)); | 	return res.json(toObject(message)); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,14 +1,28 @@ | |||||||
| import { ChannelModel, MessageCreateEvent } from "@fosscord/server-util"; | import { ChannelModel, Embed, Message, MessageCreateEvent, MessageUpdateEvent } from "@fosscord/server-util"; | ||||||
| import { Snowflake } from "@fosscord/server-util"; | import { Snowflake } from "@fosscord/server-util"; | ||||||
| import { MessageModel } from "@fosscord/server-util"; | import { MessageModel } from "@fosscord/server-util"; | ||||||
| import { PublicMemberProjection } from "@fosscord/server-util"; | import { PublicMemberProjection } from "@fosscord/server-util"; | ||||||
| import { toObject } from "@fosscord/server-util"; | import { toObject } from "@fosscord/server-util"; | ||||||
| import { getPermission } from "@fosscord/server-util"; | import { getPermission } from "@fosscord/server-util"; | ||||||
| import { Message } from "@fosscord/server-util"; |  | ||||||
| import { HTTPError } from "lambert-server"; | import { HTTPError } from "lambert-server"; | ||||||
|  | import fetch from "node-fetch"; | ||||||
|  | import cheerio from "cheerio"; | ||||||
| import { emitEvent } from "./Event"; | import { emitEvent } from "./Event"; | ||||||
| // TODO: check webhook, application, system author
 | // TODO: check webhook, application, system author
 | ||||||
| 
 | 
 | ||||||
|  | const LINK_REGEX = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g; | ||||||
|  | 
 | ||||||
|  | const DEFAULT_FETCH_OPTIONS: any = { | ||||||
|  | 	redirect: "follow", | ||||||
|  | 	follow: 1, | ||||||
|  | 	headers: { | ||||||
|  | 		"user-agent": "Mozilla/5.0 (compatible; Discordbot/2.0; +https://discordapp.com)" | ||||||
|  | 	}, | ||||||
|  | 	size: 1024 * 1024 * 1, | ||||||
|  | 	compress: true, | ||||||
|  | 	method: "GET" | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| export async function handleMessage(opts: Partial<Message>) { | export async function handleMessage(opts: Partial<Message>) { | ||||||
| 	const channel = await ChannelModel.findOne({ id: opts.channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec(); | 	const channel = await ChannelModel.findOne({ id: opts.channel_id }, { guild_id: true, type: true, permission_overwrites: true }).exec(); | ||||||
| 	if (!channel || !opts.channel_id) throw new HTTPError("Channel not found", 404); | 	if (!channel || !opts.channel_id) throw new HTTPError("Channel not found", 404); | ||||||
| @ -43,6 +57,60 @@ export async function handleMessage(opts: Partial<Message>) { | |||||||
| 	}; | 	}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // TODO: cache link result in db
 | ||||||
|  | export async function postHandleMessage(message: Message) { | ||||||
|  | 	var links = message.content?.match(LINK_REGEX); | ||||||
|  | 	if (!links) return; | ||||||
|  | 
 | ||||||
|  | 	const data = { ...message }; | ||||||
|  | 	data.embeds = data.embeds.filter((x) => x.type !== "link"); | ||||||
|  | 
 | ||||||
|  | 	links = links.slice(0, 5); // embed max 5 links
 | ||||||
|  | 
 | ||||||
|  | 	for (const link of links) { | ||||||
|  | 		try { | ||||||
|  | 			const request = await fetch(link, DEFAULT_FETCH_OPTIONS); | ||||||
|  | 
 | ||||||
|  | 			const text = await request.text(); | ||||||
|  | 			const $ = cheerio.load(text); | ||||||
|  | 
 | ||||||
|  | 			const title = $('meta[property="og:title"]').attr("content"); | ||||||
|  | 			const provider_name = $('meta[property="og:site_name"]').text(); | ||||||
|  | 			const author_name = $('meta[property="article:author"]').attr("content"); | ||||||
|  | 			const description = $('meta[property="og:description"]').attr("content") || $('meta[property="description"]').attr("content"); | ||||||
|  | 			const image = $('meta[property="og:image"]').attr("content"); | ||||||
|  | 			const url = $('meta[property="og:url"]').attr("content"); | ||||||
|  | 			// TODO: color
 | ||||||
|  | 			const embed: Embed = { | ||||||
|  | 				provider: { | ||||||
|  | 					url: link, | ||||||
|  | 					name: provider_name | ||||||
|  | 				} | ||||||
|  | 			}; | ||||||
|  | 
 | ||||||
|  | 			if (author_name) embed.author = { name: author_name }; | ||||||
|  | 			if (image) embed.thumbnail = { proxy_url: image, url: image }; | ||||||
|  | 			if (title) embed.title = title; | ||||||
|  | 			if (url) embed.url = url; | ||||||
|  | 			if (description) embed.description = description; | ||||||
|  | 
 | ||||||
|  | 			if (title || description) { | ||||||
|  | 				data.embeds.push(embed); | ||||||
|  | 			} | ||||||
|  | 		} catch (error) {} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	await Promise.all([ | ||||||
|  | 		emitEvent({ | ||||||
|  | 			event: "MESSAGE_UPDATE", | ||||||
|  | 			guild_id: message.guild_id, | ||||||
|  | 			channel_id: message.channel_id, | ||||||
|  | 			data | ||||||
|  | 		} as MessageUpdateEvent), | ||||||
|  | 		MessageModel.updateOne({ id: message.id, channel_id: message.channel_id }, data).exec() | ||||||
|  | 	]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| export async function sendMessage(opts: Partial<Message>) { | export async function sendMessage(opts: Partial<Message>) { | ||||||
| 	const message = await handleMessage({ ...opts, id: Snowflake.generate(), timestamp: new Date() }); | 	const message = await handleMessage({ ...opts, id: Snowflake.generate(), timestamp: new Date() }); | ||||||
| 
 | 
 | ||||||
| @ -50,5 +118,7 @@ export async function sendMessage(opts: Partial<Message>) { | |||||||
| 
 | 
 | ||||||
| 	await emitEvent({ event: "MESSAGE_CREATE", channel_id: opts.channel_id, data, guild_id: message.guild_id } as MessageCreateEvent); | 	await emitEvent({ event: "MESSAGE_CREATE", channel_id: opts.channel_id, data, guild_id: message.guild_id } as MessageCreateEvent); | ||||||
| 
 | 
 | ||||||
|  | 	postHandleMessage(data); // no await as it shouldnt block the message send function
 | ||||||
|  | 
 | ||||||
| 	return data; | 	return data; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paul Munteanu
						Paul Munteanu