mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-17 18:01:26 +08:00
格式化工具部分: 1. pre-commit 引入 python 的格式化工具,包括 black(代码格式化)和 isort(对“包导入顺序”的规范) 2. 允许 prettier 对文档站的 markdown 文件格式化 3. 不允许 prettier 对 markdown 文件中的代码块的代码本身进行格式化 4. 升级了 pre-commit 的各个 hook 的版本 5. 优化了 pre-commit 的日志文本显示 容器总览部分: 1. 由原来的单一轻量环境转为区分空环境、轻量环境和全量环境 2. 空环境是裸 Linux 镜像(Ubuntu),为默认环境 3. 轻量环境适合开发文档站前端 4. 全量环境适合开发 MaaCore 5. 目前,全量环境完整包含了轻量环境,轻量环境完整包含了空环境 6. 在仓库 README.md 中更新了三个环境的描述,并将链接分别设置为对应环境的创建链接 **注意:没有修改文档站中的对应文件** 7. 在各个语言的开发指南的最后,移除了 Codespace 部分的“安装额外依赖”相关描述,且将链接设置为全量环境的创建链接 **注意:没有添加“开发文档站”的指南和对应 codespace 的使用方式** 容器的轻量环境和全量环境共有部分: 1. 安装 black 和 isort 包 2. 调整 VS Code 设置,取消先前(对 markdown 文件单独指定 markdownlint 扩展作为格式化工具)的错误设置,现在 markdown 文件仍然使用默认的 prettier 扩展作为格式化工具 3. 引入 markdown-all-in-one 扩展作为语法提示工具 4. 将 node_modules 和 3rdparty 排除在 VS Code 的文本的搜索路径之外 容器的全量环境部分: 1. 为 tools 下的所有 python 脚本安装依赖 2. 使用 tools/maadeps-download.py 下载 maadeps,且将必要二进制文件软链接到 /usr/local/bin/ 3. 使用 apt 安装 cmake 和 clangd-20,将后者通过 update-alternatives 设置为系统 clangd 的默认版本 4. 使用 cmake tools 扩展,并按照 Linux 编译方法进行配置 5. 使用 clang-format 作为 c/cpp 的格式化工具,clang-format 程序主体来自 maadeps(已经软链接到 /usr/local/bin/) 6. 使用 clangd 作为 c/cpp 的语法提示工具 7. 将 MaaDeps、install 和 build 排除在 VS Code 的文本搜索路径之外 其它手动调整: 1. 更新文档站的 package.json,指定 pnpm 包管理器的版本 2. 手动保证 markdown 文件中的列表前后有空行(注意到 MarkdownLint 官方规则不一定能精准定位所有“列表前后空行”的问题,详见:https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md#md032---lists-should-be-surrounded-by-blank-lines ) 3. 修改了部分 markdown 文件中的 json 代码块的语法问题 **注意:相同的问题并未全部发现,仅修改了两处** 4. 在 tools 目录中,一处 python 脚本的包名误用(本地包名和某个 pip 包重名),这里修改了相应代码 5. 在 tools 目录中,一处 python 脚本使用了弃用的包 cchardet 的问题,这里更换了推荐使用的功能相近的包并修改了相应代码 自动化脚本提交的修改: 1. 自动格式化了大量 tools 中的 python 脚本 2. 自动格式化了大量 docs 中的 markdown 文件 Commits: * chore: pre-commit引入black和isort规范py文件 * chore: Auto update by pre-commit hooks [skip changelog] * chore: devcontainer添加isort扩展,排序python导入 * chore: pre-commit任务命名及更名 * style: isort fix * chore: Auto update by pre-commit hooks [skip changelog] * chore: 更新pre-commit的hook版本 * fix: 模块名与第三方库重名,大忌 * chore: 容器构建时额外安装isort * docs: md -> markdown * chore: 容器安装python包和maadeps * fix: 修复过时python包 * chore: 指定pnpm版本 * chore: container支持选择轻量环境 * chore: 去掉rust * chore: add plain env * chore: 使用clangd语言服务器 * chore: 无需单独设置markdown的格式化工具 * chore: 更新安装的clangd版本 * docs: 简易文档适配 * docs: 在仓库README中重新编排codespaces相关指引 * chore: Auto update by pre-commit hooks [skip changelog] * style: 调整缩进 * chore: 格式化工具不用特意排除被gitignore忽略的文件 * chore: sh文件在gitattributes中单列一类 * chore: 格式化docs下的markdown文件 * chore: 暂时不修改md文件中的代码块 * style: 人为明确markdown中的部分列表相关格式 * docs: 补上部分markdown的json代码块中缺失的逗号 * chore: Auto update by pre-commit hooks [skip changelog] * chore: Auto update by pre-commit hooks [skip changelog] * fix: 补上tools的服务器排序相关代码中缺失的逗号 Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: 使用maadeps的clangd * build: 更新maadeps工具链版本 * style: prettier fix * revert: 还原maadeps版本 * revert: 取消使用maadeps的clangd依赖,改用系统apt安装 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
163 lines
13 KiB
Markdown
163 lines
13 KiB
Markdown
---
|
|
order: 8
|
|
icon: mdi:remote-desktop
|
|
---
|
|
|
|
# 원격 제어 프로토콜
|
|
|
|
MAA를 원격으로 제어하려면 http(s) 서비스를 제공해야 합니다. 이 서비스는 아래 두 가지 익명 엔드포인트를 제공해야 합니다. 이 두 엔드포인트는 웹 엔드포인트이며 http(s) 프로토콜이어야 합니다.
|
|
|
|
::: warning
|
|
엔드포인트가 http 프로토콜인 경우 MAA는 연결시마다 안전하지 않음 경고를 발생시킵니다. **공개 네트워크에 프로토콜을 배포하는 것은 매우 권장되지 않으며 위험합니다. 테스트 용도로만 사용하세요!**
|
|
:::
|
|
|
|
::: tip
|
|
주의: JSON 형식은 주석을 지원하지 않으므로 아래의 예시에서 주석은 제거해주시기 바랍니다.
|
|
:::
|
|
|
|
## 작업 엔드포인트 가져오기
|
|
|
|
MAA는 이 엔드 포인트를 계속하여 폴링하여 실행해야하는 작업을 시도하고 가져와야합니다. 그리고 가져온 목록에 따라 순서대로 실행합니다.
|
|
|
|
엔드 포인트 경로는 자유롭지만 반드시 http(s) 엔드 포인트 여야합니다. 예를 들어: `https://your-control-host.net/maa/getTask`
|
|
|
|
제어 대상 MAA는 이 엔드포인트를 MAA 설정의 `작업 가져오기 엔드포인트` 텍스트 상자에 작성해야합니다.
|
|
|
|
이 엔드포인트는 `Content-Type=application/json`의 POST 요청을 수락해야하며, 이 요청은 다음과 같은 JSON을 요청 본문으로 수락 할 수 있어야합니다.
|
|
|
|
```json
|
|
{
|
|
"user":"ea6c39eb-a45f-4d82-9ecc-33a7bf2ae4dc", // 사용자가 MAA 설정에 제공한 사용자 식별자.
|
|
"device":"f7cd9682-3de9-4eef-9137-ec124ea9e9ec" // MAA가 생성 한 장치 식별자.
|
|
... // 이 엔드포인트에 다른 용도가 있는 경우 선택적 매개 변수를 추가 할 수 있지만 MAA는 user 및 device 만 전달합니다.
|
|
}
|
|
```
|
|
|
|
이 엔드포인트는 JSON 형식의 응답을 반환해야하며 최소한 다음 형식을 충족해야합니다.
|
|
|
|
```json
|
|
{
|
|
"tasks": // MAA가 실행해야하는 Task 목록입니다. 현재 지원되는 유형은 아래 예시와 같습니다. 작업이없는 경우 연결이 무효로 간주됩니다.
|
|
[
|
|
// 순차 실행 작업: 아래 작업은 전달된 순서대로 대기열에 들어갑니다
|
|
{
|
|
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "CaptureImage", //스크린샷 작업입니다. 현재 에뮬레이터의 스크린샷을 캡처하고 작업 보고서의 페이로드에 Base64 문자열로 넣습니다. 이러한 유형의 작업을 발행해야하는 경우 요청하는 엔드 포인트가 수용 할 수 있는 최대 요청 크기에 주의하세요. 스크린샷은 수십 메가바이트가 있으며 일반적인 게이트웨이의 기본 크기 제한을 초과할 수 있습니다.
|
|
},
|
|
{
|
|
"id": "15be4725-5bd3-443d-8ae3-0a5ae789254c", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "LinkStart", //원 클릭 모의 농장 시작
|
|
},
|
|
{
|
|
"id": "15be4725-5bd3-443d-8ae3-0a5ae789254c", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "LinkStart-Recruiting", //현재 구성에 따라 원 클릭 모의 농장의 해당 하위 기능을 독립적으로 실행합니다. 주 요구 사항에 대한 이러한 타입의 옵션은 아래에 나와 있습니다.
|
|
},
|
|
{
|
|
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "Toolbox-GachaOnce", //툴박스에서의 하나의 카드 뽑기 작업입니다. 이 유형의 선택할 수 있는 값은 Toolbox-GachaOnce, Toolbox-GachaTenTimes입니다.
|
|
},
|
|
{
|
|
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "Settings-ConnectionAddress", //설정 항목을 수정하는 작업입니다. ConfigurationHelper.SetValue("ConnectionAddress", params);를 실행하는 것과 동일합니다. 안전을 위해 모든 구성이 수정 가능한 것은 아닙니다. 수정 가능한 구성에 대한 자세한 내용은 아래를 참조하세요.
|
|
"params": "value" //수정할 값
|
|
},
|
|
//즉시 실행 작업: 아래 작업은 순차 실행 작업 중 실행되며, MAA는 아래의 모든 작업이 가능한 한 빨리 결과를 반환 할 것임을 보장합니다. 이러한 작업은 일반적으로 원격 제어 기능 자체의 제어에 사용됩니다.
|
|
{
|
|
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "CaptureImageNow", //즉시 스크린샷 작업입니다. 위의 스크린샷 작업과 기본적으로 동일하지만 이 작업은 다른 작업을 기다리지 않고 즉시 실행됩니다.
|
|
},
|
|
{
|
|
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "StopTask", //현재 작업을 종료하는 작업입니다. 현재 실행중인 작업을 종료하려고 시도합니다. 목록에 다른 작업이있는 경우 다음 작업을 계속하여 실행합니다. 이 작업은 현재 작업이 중지되고 확인되기를 기다리지 않으므로 중지 명령이 적용되었는지 확인하기 위해 하트비트 작업을 사용하세요.
|
|
},
|
|
{
|
|
"id": "b353c469-b902-4357-bd8f-d133199eea31", //작업의 고유 ID, 문자열 형식입니다. 작업 보고서에 사용됩니다.
|
|
"type": "HeartBeat", //하트비트 작업은 즉시 반환되며, 현재 "순차 실행 작업" 대기열에서 실행 중인 작업의 ID를 페이로드로 반환합니다. 현재 작업이 없으면 빈 문자열을 반환합니다.
|
|
},
|
|
],
|
|
... //이 엔드포인트에 다른 용도가 있는 경우 선택적 반환 값을 추가 할 수 있지만 MAA는 작업 만 읽습니다.
|
|
}
|
|
```
|
|
|
|
이러한 작업은 순서대로 실행되므로 먼저 공개 인수를 내보내고 나중에 스크린샷을 보내면 스크린샷이 공개 인수 이후에 실행됩니다.
|
|
이 엔드 포인트는 재진입이 가능하고 반복적으로 작업을 반환해야합니다. MAA는 작업 ID를 자동으로 기록하며 동일한 ID의 경우 작업을 다시 실행하지 않습니다.
|
|
|
|
::: note
|
|
|
|
- LinkStart-[TaskName] 유형의 작업 유형의 LinkStart의 선택 가능한 값은 LinkStart-Base, LinkStart-WakeUp, LinkStart-Combat, LinkStart-Recruiting, LinkStart-Mall, LinkStart-Mission, LinkStart-AutoRoguelike, LinkStart-Reclamation입니다.
|
|
- Settings-[SettingsName] 작업 유형의 유형 매개 변수의 선택 가능한 값은 Settings-ConnectionAddress, Settings-Stage1입니다.
|
|
- 설정 시리즈 작업은 여전히 순서대로 실행되며 작업을 받은 즉시 실행되지 않으며 이전 작업 뒤에 배치됩니다.
|
|
- 여러 즉시 실행 작업은 순서대로 실행되지만 이러한 작업은 모두 빠르게 실행되므로 순서에 관심을 두지 않아도됩니다.
|
|
|
|
:::
|
|
|
|
## 작업 보고 엔드 포인트
|
|
|
|
MAA가 작업을 완료하면 작업의 실행 결과를 원격에 보고해야합니다.
|
|
|
|
엔드 포인트 경로는 자유롭지만 반드시 http(s) 엔드 포인트 여야합니다. 예를 들어: `https://your-control-host.net/maa/reportStatus`
|
|
|
|
제어 대상 MAA는이 엔드 포인트를 MAA 설정의 `작업 보고 엔드포인트` 텍스트 상자에 작성해야합니다
|
|
|
|
이 엔드포인트는 `Content-Type=application/json`의 POST 요청을 수락해야하며, 이 요청은 다음과 같은 JSON을 요청 본문으로 수락 할 수 있어야합니다.
|
|
|
|
```json
|
|
{
|
|
"user":"ea6c39eb-a45f-4d82-9ecc-33a7bf2ae4dc", // 사용자가 MAA 설정에 제공한 사용자 식별자.
|
|
"device":"f7cd9682-3de9-4eef-9137-ec124ea9e9ec", // MAA가 생성 한 장치 식별자.
|
|
"task":"15be4725-5bd3-443d-8ae3-0a5ae789254c", // 보고 할 작업의 ID는 작업을 가져올 때의 ID와 일치합니다.
|
|
"status":"SUCCESS", // 작업 실행 결과는 SUCCESS 또는 FAILED입니다. 일반적으로 작업이 성공하든 실패하든 SUCCESS 만 반환됩니다. 특별한 경우에만 실패를 반환합니다. 실패한 경우 상세 내용은 해당 작업 소개에서 명확하게 설명됩니다.
|
|
"payload":"", // 보고서에 대한 데이터는 문자열 형식입니다. 작업 유형에 따라 달라집니다. 예를 들어 스크린샷 작업 보고서는 여기에 스크린샷의 Base64 문자열을 가져옵니다.
|
|
... // 이 엔드포인트에 다른 용도가 있는 경우 선택적 매개 변수를 추가 할 수 있지만 MAA는 user 및 device 만 전달합니다.
|
|
}
|
|
```
|
|
|
|
이 엔드 포인트의 반환 내용은 상관 없습니다. 그러나 200OK를 반환하지 않으면 MAA 측에서 `업로드 실패`라는 알림이 표시됩니다.
|
|
|
|
## 예시 워크플로우 - QQBot을 사용하여 MAA 제어
|
|
|
|
A 개발자는 자신의 QQBot을 사용하여 MAA를 제어하려고합니다. 따라서 공개 네트워크에서 노출 된 백엔드를 개발하여 다음 두 가지 엔드포인트를 제공합니다.
|
|
|
|
> [!tip]
|
|
> https://myqqbot.com/maa/getTask
|
|
> https://myqqbot.com/maa/reportStatus
|
|
|
|
사용자의 편의를 위해 getTask 인터페이스는 어떤 매개 변수를 받더라도 기본적으로 200OK와 비어있는 작업 목록을 반환합니다.
|
|
요청이 수신되면 A는 데이터베이스에서 중복 장치를 확인하고 그렇지 않으면 해당 장치와 사용자를 데이터베이스에 기록합니다.
|
|
즉,이 워크플로우에서는이 엔드포인트가 사용자 등록을 담당합니다.
|
|
|
|
그는 QQBot에 사용자의 장치 ID를 제출하는 명령을 제공했습니다.
|
|
|
|
그의 QQBot 사용 설명서에는 MAA의 `사용자 식별자`에 자신의 QQ 번호를 입력하고 `장치 식별자`를 QQ 채팅으로 보내도록 지시합니다.
|
|
|
|
A는 장치 ID를 수신하면 QQBot이 메시지의 사용자 QQ 번호를 기준으로 데이터베이스에서 해당 레코드를 찾아보고 없으면 사용자가 먼저 MAA를 구성하라고 알립니다.
|
|
MAA를 구성 한 후 사용자가 MAA를 구성하면 MAA가 지속적으로 요청을 보내기 때문에 사용자가 MAA를 구성하면 메시지를 제출 할 때 데이터베이스에 일치하는 레코드가 있어야합니다.
|
|
|
|
이후 Bot은 데이터베이스의 해당 레코드를 확인하고 검증 된 플래그를 설정하여이 장치 및 사용자가 빠른 getTask 요청에 대한 진정한 작업 목록을 반환하도록합니다.
|
|
|
|
사용자가 QQBot을 통해 명령을 제출하면 Bot은 데이터베이스에 작업을 작성하므로 getTask가 이러한 작업을 반환합니다. 또한 사용자가 명령을 제출할 때마다,이 QQBot은 기본적으로 스크린 샷 작업 하나를 추가합니다.
|
|
|
|
작업이 완료되면 MAA가 reportStatus를 호출하여 결과를 보고하면 Bot은 결과를받고 사용자에게 메시지를 보내고 스크린 샷을 표시합니다.
|
|
|
|
## 예시 워크플로우 - 웹 사이트를 사용하여 MAA 제어
|
|
|
|
B 개발자는 웹 사이트를 작성했으며 웹 사이트를 통해 MAA를 대량으로 관리하려고합니다. 따라서 공개 네트워크에서 자체 사용자 관리 시스템을 보유하고 두 가지 익명 엔드 포인트를 제공하는 백엔드를 개발했습니다.
|
|
|
|
> [!tip]
|
|
> https://mywebsite.com/maa/getTask
|
|
> https://mywebsite.com/maa/reportStatus。
|
|
|
|
웹 사이트에는 MAA 인스턴스에 대한 연결을 표시하는 페이지가 있습니다. B 개발자는 랜덤 문자열을 `사용자 키`라고하는 이 페이지에 표시하고 장치 ID를 입력할 수있는 텍스트 상자가 있습니다.
|
|
|
|
웹 사이트는 MAA의 `사용자 식별자`에 사용자 키를 입력하고 `장치 식별자`를 웹 사이트에 입력하도록 요구합니다.
|
|
|
|
MAA의 설정에 올바르게 MAA 연결을 만들려면 웹 사이트에서 사용자 키 및 장치 ID가 정확해야합니다.
|
|
|
|
사용자가 웹 사이트를 통해 MAA에 대한 제어 명령을 제출하면 웹 사이트는 데이터베이스에 작업을 작성합니다.
|
|
|
|
웹 사이트는이 페이지를 공개하기 때문에 누구나 사용자 키를 복사하여 사용할 수 있지만 장치 ID가 없으면 적절한 데이터베이스 레코드를 찾을 수 없으므로 getTask 호출에 대한 결과는 빈 목록입니다.
|
|
|
|
작업이 완료되면 MAA가 reportStatus를 호출하여 결과를 보고하면 웹 사이트는 결과를받고 사용자에게 페이지를 업데이트하여 작업 결과를 표시합니다.
|
|
|
|
<!-- markdownlint-disable-file MD034 -->
|