中文 | English
一个帮助玩家寻找机厅并与社群建立联系的网站。在这里,不仅可以找到距您最近的机厅,还可以加入高校社团、参与社区讨论。
有关网站的问题答疑、数据纠正、功能建议等请加入 QQ 群进行交流。
- 我的位置: 使用 GPS 查找您当前位置附近的机厅。
- 高校搜索: 搜索特定高校和校区附近的机厅。
- 地图选点: 在交互式地图上选择任意位置。
- 自定义半径: 在 1 至 30 公里的半径内进行搜索。
- 按街机密度和机台可用性对高校进行排名。
- 指标包括店铺数量、总机台数和区域密度。
- 提供流行游戏的专项排名。
- 数据每日更新,并有 24 小时缓存刷新机制。
- 用户账户: 支持使用 QQ、Phira、osu!、GitHub、Discord 或微软账户注册。
- 用户资料: 公开的个人主页,包含动态、隐私设置等。
- 高校社团: 创建和加入高校社团,参与社团内部的讨论。
- 社区帖子: 在支持 Markdown 与 LaTeX 的论坛中分享动态、提出问题和评论。
- 通知系统: 获取关于新评论、回复和社团活动的通知。
- 舞萌DX
- 中二节奏
- 太鼓之达人
- 音律炫动
- 华卡音舞
- 国内机厅数据(内地、港澳台)采集自 BEMANICN 全国音游地图。海外机厅数据采集自 Zenius -I- vanisher.com。
- 内地高校列表来自教育部;校区地理信息使用 Naptie/cn-university-geocoder 采集自腾讯地图。
- SvelteKit: 全栈框架,支持 SSR/SPA。
- Svelte 5: 最新版本,拥有增强的响应式系统。
- TypeScript: 全程提供类型安全。
- Tailwind CSS 4.0: 工具优先的 CSS 框架。
- daisyUI: 用于 Tailwind 的语义化组件库。
- Font Awesome: 全面的图标库。
- MongoDB: 应用主数据库。
- Auth.js (SvelteKitAuth): 处理用户认证和会话。
- 服务端 API: 基于 SvelteKit 构建的 RESTful 端点。
- 高德地图 & 腾讯地图: 地图服务集成。
- Geolocation API: 基于浏览器的定位检测。
- Paraglide.js: 类型安全的 i18n 解决方案。
- 基于消息的翻译: 结构化的翻译体系。
- Vite: 高性能的构建工具和开发服务器。
- ESLint: Svelte 特定的代码检查规则。
- Prettier: 支持插件的代码格式化工具。
- pnpm: 快速、高效的包管理器。
- Node.js 18+
- pnpm (推荐) 或 npm
- MongoDB 实例
- 高德地图 JS API 密钥和秘密
- 腾讯地图 API 密钥
- Sentry DSN (可选)
- OAuth 提供商的凭据 (包括 GitHub, Microsoft Entra ID, Discord, osu!, Phira, QQ)
-
克隆仓库:
git clone https://github.com/Naptie/nearcade.git cd nearcade -
安装依赖:
pnpm install
-
设置环境变量:
在项目根目录创建一个
.env文件。核心配置:
# 地图服务 PUBLIC_AMAP_KEY="your_amap_key" PUBLIC_TENCENT_MAPS_KEY="your_tencent_maps_key" PUBLIC_GOOGLE_MAPS_MAP_ID = "your_google_maps_map_id" PUBLIC_GOOGLE_MAPS_API_KEY = "your_google_maps_api_key" AMAP_SECRET="your_amap_secret" # 服务器间通讯密钥 (生成一个随机字符串) SSC_SECRET="your_ssc_secret" # 数据库 MONGODB_URI="mongodb://localhost:27017/?dbName=nearcade" # Auth 密钥 (生成一个随机字符串) AUTH_SECRET="your_random_auth_secret"
认证提供商:
# GitHub AUTH_GITHUB_ID="your_github_oauth_id" AUTH_GITHUB_SECRET="your_github_oauth_secret" # Microsoft AUTH_MICROSOFT_ENTRA_ID_ID = "your_microsoft_entra_id_id" AUTH_MICROSOFT_ENTRA_ID_SECRET = "your_microsoft_entra_id_secret" AUTH_MICROSOFT_ENTRA_ID_ISSUER = "your_microsoft_entra_id_issuer" # Discord AUTH_DISCORD_ID="your_discord_oauth_id" AUTH_DISCORD_SECRET="your_discord_oauth_secret" # osu! AUTH_OSU_ID = "your_osu_oauth_id" AUTH_OSU_SECRET = "your_osu_oauth_secret" # Phira AUTH_PHIRA_ID = "your_phira_oauth_id" AUTH_PHIRA_SECRET = "your_phira_oauth_secret" # QQ AUTH_QQ_ID="your_qq_oauth_id" AUTH_QQ_SECRET="your_qq_oauth_secret" AUTH_QQ_PROXY="your_qq_redirect_proxy_url" # 可选的重定向代理
Redis 配置:
REDIS_URI = "redis://username:[email protected]:6379"
IMAP 配置 (用于在校生资格验证):
IMAP_HOST = "imap.example.com" IMAP_PORT = "993" IMAP_USER = "[email protected]" IMAP_PASSWORD = "your_imap_password"
Meilisearch 配置:
MEILISEARCH_HOST = "http://localhost:7700" MEILISEARCH_API_KEY = "your_api_key"
OSS 配置:
# LeanCloud 与 S3 二选一,二者均提供时优先选择 S3 # LeanCloud 配置 OSS_LEANCLOUD_APP_ID = "your_leancloud_app_id" OSS_LEANCLOUD_APP_KEY = "your_leancloud_app_key" OSS_LEANCLOUD_SERVER_URL = "https://oss.example.com" # S3 配置 JSON (使用 Base64 编码) # 示例: # { # "endpoint": "https://s3.example.amazonaws.com", # "region": "cn-example-2", # "bucket": "your-bucket-name-or-endpoint", // 如果 bucketEndpoint 为 true,该项应为完整的 URL # "accessKeyId": "your-access-key-id", # "secretAccessKey": "your-secret-access-key", # "bucketEndpoint": false, # "forcePathStyle": true # } OSS_S3_BASE64 = "your_base64_content"
Firebase Cloud Messaging 配置:
# 以下变量二选一 # Google 服务账号 JSON (使用 Base64 编码) GSAK_BASE64="your_base64_content" # Firebase Cloud Messaging 代理 FCM_PROXY="https://example.com/api/notifications/fcm/send"
其中,有关 Firebase Cloud Messaging 代理,请参考该终结点。
-
启动开发服务器:
pnpm dev
-
打开浏览器: 访问
http://localhost:5173
# 构建 Web 应用
pnpm build
# 预览生产版本
pnpm preview- 已安装 Docker 和 Docker Compose。
-
克隆仓库并进入项目目录。
-
设置环境变量: 按照“开始使用”部分的说明创建
.env文件。 -
构建并启动服务:
docker-compose up --build
-
访问应用: 容器启动后,在浏览器中访问
http://localhost:3000。
docker-compose down我们欢迎各种形式的贡献!欢迎提交 issues 和 pull requests。
- 遵循 TypeScript 最佳实践。
- 使用 Prettier 进行代码格式化。
- 编写有意义的提交信息。
- 充分测试您的更改。
本项目基于 Mozilla Public License 2.0 开源。
