add Prisma integration and update .gitignore; enhance mcs command with database support
This commit is contained in:
		
							parent
							
								
									98be9dfd11
								
							
						
					
					
						commit
						51f2a5cb27
					
				
							
								
								
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -32,3 +32,9 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json | ||||
| 
 | ||||
| # Finder (MacOS) folder config | ||||
| .DS_Store | ||||
| 
 | ||||
| db/ | ||||
| 
 | ||||
| src/generated/ | ||||
| bun.lock | ||||
| commands.json | ||||
|  | ||||
							
								
								
									
										74
									
								
								bun.lock
									
									
									
									
									
								
							
							
						
						
									
										74
									
								
								bun.lock
									
									
									
									
									
								
							| @ -5,12 +5,14 @@ | ||||
|       "name": "fantastic_spoon_dc", | ||||
|       "dependencies": { | ||||
|         "@ahdg/minecraftstatuspinger": "^1.1.5", | ||||
|         "@prisma/client": "^6.6.0", | ||||
|         "@sfirew/minecraft-motd-parser": "^1.1.4", | ||||
|         "puppeteer": "^24.7.2", | ||||
|         "seyfert": "^3.0.0", | ||||
|       }, | ||||
|       "devDependencies": { | ||||
|         "@types/bun": "latest", | ||||
|         "prisma": "^6.6.0", | ||||
|       }, | ||||
|       "peerDependencies": { | ||||
|         "typescript": "^5", | ||||
| @ -24,6 +26,70 @@ | ||||
| 
 | ||||
|     "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.25.9", "", {}, "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ=="], | ||||
| 
 | ||||
|     "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.25.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ=="], | ||||
| 
 | ||||
|     "@esbuild/android-arm": ["@esbuild/android-arm@0.25.3", "", { "os": "android", "cpu": "arm" }, "sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A=="], | ||||
| 
 | ||||
|     "@esbuild/android-arm64": ["@esbuild/android-arm64@0.25.3", "", { "os": "android", "cpu": "arm64" }, "sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ=="], | ||||
| 
 | ||||
|     "@esbuild/android-x64": ["@esbuild/android-x64@0.25.3", "", { "os": "android", "cpu": "x64" }, "sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ=="], | ||||
| 
 | ||||
|     "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.25.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w=="], | ||||
| 
 | ||||
|     "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.25.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A=="], | ||||
| 
 | ||||
|     "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.25.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw=="], | ||||
| 
 | ||||
|     "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.25.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q=="], | ||||
| 
 | ||||
|     "@esbuild/linux-arm": ["@esbuild/linux-arm@0.25.3", "", { "os": "linux", "cpu": "arm" }, "sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ=="], | ||||
| 
 | ||||
|     "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.25.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A=="], | ||||
| 
 | ||||
|     "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.25.3", "", { "os": "linux", "cpu": "ia32" }, "sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw=="], | ||||
| 
 | ||||
|     "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g=="], | ||||
| 
 | ||||
|     "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag=="], | ||||
| 
 | ||||
|     "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.25.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg=="], | ||||
| 
 | ||||
|     "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.25.3", "", { "os": "linux", "cpu": "none" }, "sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA=="], | ||||
| 
 | ||||
|     "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.25.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ=="], | ||||
| 
 | ||||
|     "@esbuild/linux-x64": ["@esbuild/linux-x64@0.25.3", "", { "os": "linux", "cpu": "x64" }, "sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA=="], | ||||
| 
 | ||||
|     "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.25.3", "", { "os": "none", "cpu": "arm64" }, "sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA=="], | ||||
| 
 | ||||
|     "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.25.3", "", { "os": "none", "cpu": "x64" }, "sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g=="], | ||||
| 
 | ||||
|     "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.25.3", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ=="], | ||||
| 
 | ||||
|     "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.25.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w=="], | ||||
| 
 | ||||
|     "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.25.3", "", { "os": "sunos", "cpu": "x64" }, "sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA=="], | ||||
| 
 | ||||
|     "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.25.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ=="], | ||||
| 
 | ||||
|     "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.25.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew=="], | ||||
| 
 | ||||
|     "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.3", "", { "os": "win32", "cpu": "x64" }, "sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg=="], | ||||
| 
 | ||||
|     "@prisma/client": ["@prisma/client@6.6.0", "", { "peerDependencies": { "prisma": "*", "typescript": ">=5.1.0" }, "optionalPeers": ["prisma", "typescript"] }, "sha512-vfp73YT/BHsWWOAuthKQ/1lBgESSqYqAWZEYyTdGXyFAHpmewwWL2Iz6ErIzkj4aHbuc6/cGSsE6ZY+pBO04Cg=="], | ||||
| 
 | ||||
|     "@prisma/config": ["@prisma/config@6.6.0", "", { "dependencies": { "esbuild": ">=0.12 <1", "esbuild-register": "3.6.0" } }, "sha512-d8FlXRHsx72RbN8nA2QCRORNv5AcUnPXgtPvwhXmYkQSMF/j9cKaJg+9VcUzBRXGy9QBckNzEQDEJZdEOZ+ubA=="], | ||||
| 
 | ||||
|     "@prisma/debug": ["@prisma/debug@6.6.0", "", {}, "sha512-DL6n4IKlW5k2LEXzpN60SQ1kP/F6fqaCgU/McgaYsxSf43GZ8lwtmXLke9efS+L1uGmrhtBUP4npV/QKF8s2ZQ=="], | ||||
| 
 | ||||
|     "@prisma/engines": ["@prisma/engines@6.6.0", "", { "dependencies": { "@prisma/debug": "6.6.0", "@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", "@prisma/fetch-engine": "6.6.0", "@prisma/get-platform": "6.6.0" } }, "sha512-nC0IV4NHh7500cozD1fBoTwTD1ydJERndreIjpZr/S3mno3P6tm8qnXmIND5SwUkibNeSJMpgl4gAnlqJ/gVlg=="], | ||||
| 
 | ||||
|     "@prisma/engines-version": ["@prisma/engines-version@6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", "", {}, "sha512-JzRaQ5Em1fuEcbR3nUsMNYaIYrOT1iMheenjCvzZblJcjv/3JIuxXN7RCNT5i6lRkLodW5ojCGhR7n5yvnNKrw=="], | ||||
| 
 | ||||
|     "@prisma/fetch-engine": ["@prisma/fetch-engine@6.6.0", "", { "dependencies": { "@prisma/debug": "6.6.0", "@prisma/engines-version": "6.6.0-53.f676762280b54cd07c770017ed3711ddde35f37a", "@prisma/get-platform": "6.6.0" } }, "sha512-Ohfo8gKp05LFLZaBlPUApM0M7k43a0jmo86YY35u1/4t+vuQH9mRGU7jGwVzGFY3v+9edeb/cowb1oG4buM1yw=="], | ||||
| 
 | ||||
|     "@prisma/get-platform": ["@prisma/get-platform@6.6.0", "", { "dependencies": { "@prisma/debug": "6.6.0" } }, "sha512-3qCwmnT4Jh5WCGUrkWcc6VZaw0JY7eWN175/pcb5Z6FiLZZ3ygY93UX0WuV41bG51a6JN/oBH0uywJ90Y+V5eA=="], | ||||
| 
 | ||||
|     "@puppeteer/browsers": ["@puppeteer/browsers@2.10.2", "", { "dependencies": { "debug": "^4.4.0", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.1", "tar-fs": "^3.0.8", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-i4Ez+s9oRWQbNjtI/3+jxr7OH508mjAKvza0ekPJem0ZtmsYHP3B5dq62+IaBHKaGCOuqJxXzvFLUhJvQ6jtsQ=="], | ||||
| 
 | ||||
|     "@sfirew/minecraft-motd-parser": ["@sfirew/minecraft-motd-parser@1.1.4", "", {}, "sha512-Hm3Gr8LLrhxk0sSZEFmtwgfJaFFje/SXaZsELwS4mYYS2sJrvdPXnSFLy6/qk1RFrTJMFPCcwKNdOFHyMJameQ=="], | ||||
| @ -92,6 +158,10 @@ | ||||
| 
 | ||||
|     "error-ex": ["error-ex@1.3.2", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g=="], | ||||
| 
 | ||||
|     "esbuild": ["esbuild@0.25.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.3", "@esbuild/android-arm": "0.25.3", "@esbuild/android-arm64": "0.25.3", "@esbuild/android-x64": "0.25.3", "@esbuild/darwin-arm64": "0.25.3", "@esbuild/darwin-x64": "0.25.3", "@esbuild/freebsd-arm64": "0.25.3", "@esbuild/freebsd-x64": "0.25.3", "@esbuild/linux-arm": "0.25.3", "@esbuild/linux-arm64": "0.25.3", "@esbuild/linux-ia32": "0.25.3", "@esbuild/linux-loong64": "0.25.3", "@esbuild/linux-mips64el": "0.25.3", "@esbuild/linux-ppc64": "0.25.3", "@esbuild/linux-riscv64": "0.25.3", "@esbuild/linux-s390x": "0.25.3", "@esbuild/linux-x64": "0.25.3", "@esbuild/netbsd-arm64": "0.25.3", "@esbuild/netbsd-x64": "0.25.3", "@esbuild/openbsd-arm64": "0.25.3", "@esbuild/openbsd-x64": "0.25.3", "@esbuild/sunos-x64": "0.25.3", "@esbuild/win32-arm64": "0.25.3", "@esbuild/win32-ia32": "0.25.3", "@esbuild/win32-x64": "0.25.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q=="], | ||||
| 
 | ||||
|     "esbuild-register": ["esbuild-register@3.6.0", "", { "dependencies": { "debug": "^4.3.4" }, "peerDependencies": { "esbuild": ">=0.12 <1" } }, "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg=="], | ||||
| 
 | ||||
|     "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], | ||||
| 
 | ||||
|     "escodegen": ["escodegen@2.1.0", "", { "dependencies": { "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" }, "optionalDependencies": { "source-map": "~0.6.1" }, "bin": { "esgenerate": "bin/esgenerate.js", "escodegen": "bin/escodegen.js" } }, "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w=="], | ||||
| @ -108,6 +178,8 @@ | ||||
| 
 | ||||
|     "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], | ||||
| 
 | ||||
|     "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], | ||||
| 
 | ||||
|     "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], | ||||
| 
 | ||||
|     "get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], | ||||
| @ -158,6 +230,8 @@ | ||||
| 
 | ||||
|     "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], | ||||
| 
 | ||||
|     "prisma": ["prisma@6.6.0", "", { "dependencies": { "@prisma/config": "6.6.0", "@prisma/engines": "6.6.0" }, "optionalDependencies": { "fsevents": "2.3.3" }, "peerDependencies": { "typescript": ">=5.1.0" }, "optionalPeers": ["typescript"], "bin": { "prisma": "build/index.js" } }, "sha512-SYCUykz+1cnl6Ugd8VUvtTQq5+j1Q7C0CtzKPjQ8JyA2ALh0EEJkMCS+KgdnvKW1lrxjtjCyJSHOOT236mENYg=="], | ||||
| 
 | ||||
|     "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], | ||||
| 
 | ||||
|     "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="], | ||||
|  | ||||
| @ -4,7 +4,8 @@ | ||||
|   "type": "module", | ||||
|   "private": true, | ||||
|   "devDependencies": { | ||||
|     "@types/bun": "latest" | ||||
|     "@types/bun": "latest", | ||||
|     "prisma": "^6.6.0" | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "dev": "bun --env-file=.env --watch src/index.ts" | ||||
| @ -14,6 +15,7 @@ | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "@ahdg/minecraftstatuspinger": "^1.1.5", | ||||
|     "@prisma/client": "^6.6.0", | ||||
|     "@sfirew/minecraft-motd-parser": "^1.1.4", | ||||
|     "puppeteer": "^24.7.2", | ||||
|     "seyfert": "^3.0.0" | ||||
|  | ||||
							
								
								
									
										24
									
								
								prisma/schema.prisma
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								prisma/schema.prisma
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | ||||
| // This is your Prisma schema file, | ||||
| // learn more about it in the docs: https://pris.ly/d/prisma-schema | ||||
| 
 | ||||
| // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? | ||||
| // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init | ||||
| 
 | ||||
| generator client { | ||||
|   provider = "prisma-client-js" | ||||
|   output   = "../src/generated/prisma" | ||||
| } | ||||
| 
 | ||||
| datasource db { | ||||
|   provider = "mongodb" | ||||
|   url      = env("DATABASE_URL") | ||||
| } | ||||
| 
 | ||||
| model mcsBind { | ||||
|   id        String   @id @default(auto()) @map("_id") @db.ObjectId | ||||
|   channelId String | ||||
|   ip        String | ||||
| 
 | ||||
|   @@map("mcs_binds") | ||||
|   @@index([channelId]) | ||||
| } | ||||
| @ -3,8 +3,10 @@ import { config } from "seyfert"; | ||||
| export default config.bot({ | ||||
|     token: process.env.DC_TOKEN ?? "", | ||||
|     locations: { | ||||
|         base: "src", // replace with "src" if using bun
 | ||||
|         commands: "commands" | ||||
|         base: "src", | ||||
|         commands: "commands", | ||||
|         events: "events", | ||||
|         components: "components", | ||||
|     }, | ||||
|     intents: ["Guilds"], | ||||
|     // This configuration is optional, in case you want to receive interactions via HTTP
 | ||||
|  | ||||
| @ -10,7 +10,7 @@ import { | ||||
| import mc from "@ahdg/minecraftstatuspinger" | ||||
| import { autoToHTML as motdParser } from '@sfirew/minecraft-motd-parser';  | ||||
| import type { motdJsonType } from '@sfirew/minecraft-motd-parser/types/types'; | ||||
| import { browser } from '..'; | ||||
| import { browser, prisma } from '../index.ts'; | ||||
| 
 | ||||
| interface Status { | ||||
|   description: motdJsonType; | ||||
| @ -36,7 +36,19 @@ const options = { | ||||
| export default class McsCommand extends Command { | ||||
|   | ||||
|   async run(ctx: CommandContext<typeof options>) { | ||||
|     let ip:string = ctx.options.ip || 'de.itzdrli.cc'; | ||||
|     const res = await prisma.mcsBind.findFirst({ | ||||
|       where: { | ||||
|         channelId: ctx.channelId | ||||
|       } | ||||
|     }) | ||||
|     let ip:string = '' | ||||
|     if (ctx.options.ip) { | ||||
|       ip = ctx.options.ip | ||||
|     } else if (res) { | ||||
|       ip = res.ip | ||||
|     } else { | ||||
|       ip = 'de.itzdrli.cc' | ||||
|     } | ||||
|     let port:number = ctx.options.port || 25565; | ||||
|     if (ip.includes(':')) { | ||||
|       let [host = ip, portValue] = ip.split(":") | ||||
| @ -45,7 +57,7 @@ export default class McsCommand extends Command { | ||||
|     } | ||||
|     let data: any | ||||
|     try { | ||||
|       mc.setDnsServers(['8.8.8.8']) | ||||
|       mc.setDnsServers(['8.8.8.8', '9.9.9.9']) | ||||
|       data = await mc.lookup({ | ||||
|         host: ip, | ||||
|         port: port, | ||||
| @ -55,6 +67,7 @@ export default class McsCommand extends Command { | ||||
|       console.error(e) | ||||
|       return `ERROR, ${e}` | ||||
|     } | ||||
| 
 | ||||
|     const page = await browser.newPage(); | ||||
|     const status: Status = data.status as any | ||||
|     let result = `<p>${ip} - Latency ${data.latency}</p>` | ||||
| @ -71,6 +84,7 @@ export default class McsCommand extends Command { | ||||
|       type: 'webp', | ||||
|       fullPage: true | ||||
|     }) | ||||
|     const channelId = ctx.guildId | ||||
|     await page.close() | ||||
|     const buffer = Buffer.from(screenshot, 'base64') | ||||
|     await ctx.write({ | ||||
| @ -80,6 +94,25 @@ export default class McsCommand extends Command { | ||||
|           .setFile('buffer', buffer) | ||||
|       ] | ||||
|     }); | ||||
|     if (res && res.ip !== ip){ | ||||
|       await prisma.mcsBind.update({ | ||||
|         where: { | ||||
|           id: res.id, | ||||
|           channelId: ctx.channelId | ||||
|         }, | ||||
|         data: { | ||||
|           ip: ip | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|     if (!res) { | ||||
|       await prisma.mcsBind.create({ | ||||
|         data: { | ||||
|           channelId: ctx.channelId, | ||||
|           ip: ip | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										10
									
								
								src/index.ts
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/index.ts
									
									
									
									
									
								
							| @ -3,6 +3,9 @@ import puppeteer from "puppeteer"; | ||||
| 
 | ||||
| import type { ParseClient } from "seyfert"; | ||||
| 
 | ||||
| import { PrismaClient } from "./generated/prisma"; | ||||
| 
 | ||||
| export const prisma = new PrismaClient() | ||||
| declare module 'seyfert' { | ||||
|     interface UsingClient extends ParseClient<Client<true>> { } | ||||
| } | ||||
| @ -13,16 +16,14 @@ export const browser = await puppeteer.launch({ | ||||
|   args: ['--no-sandbox', '--disable-setuid-sanbox'] | ||||
| }); | ||||
| 
 | ||||
| // 处理正常退出和异常退出
 | ||||
| const cleanup = async () => { | ||||
|     console.log('Closing browser...'); | ||||
|     await browser.close(); | ||||
|     process.exit(); | ||||
| }; | ||||
| 
 | ||||
| // 监听进程的退出信号
 | ||||
| process.on('SIGINT', cleanup);  // Ctrl+C
 | ||||
| process.on('SIGTERM', cleanup); // kill 命令
 | ||||
| process.on('SIGINT', cleanup);  | ||||
| process.on('SIGTERM', cleanup);  | ||||
| process.on('uncaughtException', async (err) => { | ||||
|     console.error('Uncaught Exception:', err); | ||||
|     await cleanup(); | ||||
| @ -32,6 +33,5 @@ process.on('unhandledRejection', async (err) => { | ||||
|     await cleanup(); | ||||
| }); | ||||
| 
 | ||||
| // This will start the connection with the Discord gateway and load commands, events, components, and language (i18n)
 | ||||
| client.start() | ||||
|   .then(() => client.uploadCommands({ cachePath: './commands.json' })); | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user