Skip to content

A OneBot bot that can provide osu!std players some appropriate beatmap (WIP)

License

Notifications You must be signed in to change notification settings

StageGuard/OsuMapSuggester

Repository files navigation

OsuMapSuggester

一个可以为 osu!standard 玩家推图的基于 Shiro 的机器人。

English: README-en.md

CI CodeFactor

查看开发进度:#1

特性

插件可以从 osu!standard 玩家的 Best Performance 分析 aim, speed and accuracy 能力和 PerformancePlus 以及其他因素来推断玩家的类型(跳跳人或串串人之类的)。

然后插件可以针对这个玩家的弱点或强项给这个玩家推荐特定类型的谱面。(未实现)

用户也可以通过以下方式来自定义谱面类型规则。

除此之外,还有其他以下特性:

  • 查询玩家的 Best Performance 并以图片显示。
  • 和其他玩家对比 Best Performance
  • 以 Full Combo 重新计算 Best Performance 和排名。
  • 显示玩家技能雷达图。
  • 查询玩家最近一次成绩,包括类似 osu!lazer 的 Accuracy Heatmap 和 PP 曲线图等属性,并以图片显示。
  • ...

插件如何实现处理 OAuth 链接和绑定 osu 账号

当用户点击 OAuth 链接并且授权之后,将会自动重定向 OAuth 配置中的回调网址。

OsuMapSuggester 将会开启一个 HTTP 前端来处理这些数据。

开始

使用

如果你已经加了拥有此功能的 BOT 所在的群,想查看使用方法,请前往 Wiki 界面。

部署

准备工作

  • MySQLMariaDB 数据库, 并需要为插件创建一个数据库。

  • 有公网 IP 的服务器。

  • osu! OAuth 应用 1. 前往 https://osu.ppy.sh/home/account/edit

    2. 点击 New OAuth Application
    new_oauth_app_button

    3. 把 Application Callback URL 设为 http://<你的服务器 IP 或域名>:端口/authCallback
    new_oauth_app

    4. 复制 Client IdClient Secret.
    oauth
  • osu! v1 api 密钥 点击申请一个 v1 api 密钥: https://osu.ppy.sh/p/api/

运行

  1. 克隆项目和子模块 (git clone --recurse-submodules https://github.com/StageGuard/OsuMapSuggester.git) 并用 IntelliJ IDEA 打开工程. 同步 gradle 项目后运行 build/bootJar gradle 任务来构建项目。

在构建之前,首先需要安装 rust 工具链 cargo,gradle 同步过程中会检测 cargo 安装状态,请保证 cargo 已添加到在 PATH 环境变量中。

如果你不想用 IntelliJ IDEA,也可以克隆后在命令行运行 chmod +x gradlew && ./gradlew bootJar 指令来构建. 构建完成后的 jar 输出在 build/libs.

  1. 创建配置文件 application.yaml 编辑以下内容
server:
  port: 5000 # 你的 OneBot 实现端反代服务器
shiro:
  ws:
    server:
      enable: true
      url: "/ws/shiro"
qq: 1234567890 # 为这个 BOT 启用插件
database: 
  address: localhost # 数据库地址
  port: 3306 # 端口
  user: root # 账号
  password: testpwd # 密码
  table: obmsug # 数据库名称(在准备工作第一步创建的数据库)
  maximumPoolSize: 10
osuAuth: 
  clientId: 0 # OAuth clientId
  secret: '' # OAuth client secret
  # 回调地址,必须和 OAuth 设置的相同(不包含 /authCallback)
  # 注意这个地址是为了生成绑定账号的 OAuth 链接。
  authCallbackBaseUrl: 'http://localhost:8081' 
  v1ApiKey: '' # vi api 密钥
frontend:
  host: localhost # 前端主机地址,注意这个地址是实际主机地址
  port: 8081 # 前端端口
  1. 将 jar 和 application.yaml 放在同一个目录下,运行 java -jar OsuMapSuggester-xxx.jar 启动。若看到一下输出则证明启动成功
 INFO 11372 --- [atcher-worker-2] m.s.obms.frontend.NettyHttpServer        : Autoreload is disabled because the development mode is off.
 INFO 11372 --- [atcher-worker-2] m.s.obms.frontend.NettyHttpServer        : Application started in 0.057 seconds.
 INFO 11372 --- [atcher-worker-1] m.s.obms.frontend.NettyHttpServer        : Responding at http://localhost:8081
 INFO 11372 --- [atcher-worker-2] m.s.obms.frontend.NettyHttpServer        : Frontend server respond at http://localhost:8081

问题反馈

这个项目仍在活跃开发中,并不稳定并且有许多 BUG。

如果你在使用过程中遇到了致命 BUG,请新建一个 Issue 并加上 bug 标签。

同时欢迎 pr;或者如果有好的想法,也可以新建一个 Issue 加上feature 标签。

使用到的库

许可证

OsuMapSuggester
Copyright (C) 2021-2024 StageGuard

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.