Giter VIP home page Giter VIP logo

maacopilotserver's Introduction

LOGO

MaaAssistantArknights


C++
platform
license commit
stars GitHub all releases

简体中文 | 繁體中文 | English | 日本語 | 한국어

MAA 的意思是 MAA Assistant Arknights

一款明日方舟游戏小助手

基于图像识别技术,一键完成全部日常任务!

绝赞更新中 ✿✿ヽ(°▽°)ノ✿

亮点功能

  • 刷理智,掉落识别及上传 企鹅物流一图流
  • 智能基建换班,自动计算干员效率,单设施内最优解;同时也支持 自定义排班
  • 自动公招,可选使用加急许可,一次全部刷完!公招数据自动上传 企鹅物流一图流
  • 支持手动识别公招界面,方便对高星公招做出选择 (你的这个高姿回费出的是推王呢还是推王呢)
  • 支持识别干员列表,统计已有和未有干员及潜能,并在公招识别显示;
  • 支持识别养成材料,并导出至 企鹅物流刷图规划明日方舟工具箱ARK-NIGHTS 干员培养表
  • 访问好友、收取信用及购物、领取日常奖励等,一键全日常自动长草;
  • 肉鸽全自动刷源石锭和等级,自动烧水和凹直升,智能识别干员及练度;
  • 选择作业 JSON 文件,自动抄作业, 视频演示
  • 支持 C, Python, Java, Rust, Golang, Java HTTP, Rust HTTP 等多种接口,方便集成调用,自定义你的 MAA!

话不多说,看图!

zh1 zh2 zh3 zh4

下载地址

使用说明

基本说明

请参阅 新手上路详细介绍

常见问题

  • 软件一打开就闪退;
  • 连接错误、不知道 adb 路径怎么填写;
  • 连接成功了,但没反应;
  • 如何连接自定义端口;
  • 下载速度慢,且镜像站无法打开网页;
  • 下载到一半提示“登陆”/“鉴权”;
  • 连接正常,任务开始了,但是没反应。

请参阅 常见问题

外服支持

目前国际服(美服)、日服、韩服、繁中服的绝大部分功能均已支持。但由于外服用户较少及项目人手不足,很多功能并没有进行全面的测试,所以请自行体验。
若您遇到了 Bug,或对某个功能有强需求,欢迎在 Issues讨论区 催更;或加入我们一起建设 MAA!请参阅 外服适配教程

CLI支持

MAA 支持命令行界面(CLI)操作,支持 Linux,macOS 和 Windows,可用于自动化脚本或在无图形界面的服务器上使用。请参阅 CLI 使用指南

加入我们

主要关联项目

目前项目组非常缺前端大佬,若您有相关经验,欢迎加入我们!

多语言 (i18n)

MAA 支持多国语言,并使用 Weblate 进行本地化管理。如果您通晓多门语言,欢迎前往 MAA Weblate 帮助我们进行翻译。

MAA 以中文(简体)为第一语言,翻译词条均以中文(简体)为准。

Weblate

Windows

  1. 下载预构建的第三方库

    python maadeps-download.py
  2. 使用 Visual Studio 2022 打开 MAA.sln,右键 MaaWpfGui,设为启动项目

  3. VS 上方配置选择 RelWithDebInfo x64 (如果编译 Release 包 或 ARM 平台,请忽略这步)

  4. 右键 MaaWpfGui - 属性 - 调试 - 启用本地调试(这样就能把断点挂到 C++ Core 那边了)

  5. (可选)若准备提交 PR,建议启用 clang-format 支持

Linux | macOS

请参阅 Linux 编译教程

API

外服适配

请参阅 外服适配教程,对于国服已支持的功能,绝大部分的外服适配工作仅需要截图 + 简单的 JSON 修改即可。

想参与开发,但不太会用 GitHub?

GitHub Pull Request 流程简述

Issue bot

请参阅 Issue bot 使用方法

致谢

开源库

数据源

贡献/参与者

感谢所有参与到开发/测试中的朋友们,是大家的帮助让 MAA 越来越好! (*´▽`)ノノ

Contributors

声明

  • 本软件使用 GNU Affero General Public License v3.0 only 开源。
  • 本软件 logo 并非使用 AGPL 3.0 协议开源,耗毛、vie 两位画师及软件全体开发者保留所有权利。不得以 AGPL 3.0 协议已授权为由在未经授权的情况下使用本软件 logo,不得在未经授权的情况下将本软件 logo 用于任何用途。
  • 本软件开源、免费,仅供学习交流使用。若您遇到商家使用本软件进行代练并收费,可能由于设备或时间等原因,产生的任何问题及后果与本软件无关。

广告

用户交流 QQ 群:MAA 使用 & 粥游交流 QQ 群
用户交流 TG 群:Telegram 群
自动战斗 JSON 作业分享:prts.plus抄作业.com
Bilibili 直播间:直播间 每晚直播敲代码,近期很长一段时间应该都是在写本软件~

技术群(舟无关、禁水):内卷地狱!(QQ 群)
开发者群:QQ 群

如果觉得软件对你有帮助,帮忙点个 Star 吧!~(网页最上方右上角的小星星),这就是对我们最大的支持了!

maacopilotserver's People

Contributors

guansss avatar liamsho avatar lyzhelloworld avatar misteo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

maacopilotserver's Issues

上传失败。。

Content: "{"actions":[{"type":"部署","name":"山","location":[9,3],"direction":"下"},{"type":"部署","name":"棘刺","location":[1,3],"direction":"右"},{"type":"部署","name":"桃金娘","location":[5,4],"direction":"下"},{"type":"部署","name":"流明","location":[3,5],"direction":"上"},{"type":"部署","name":"假日威龙陈","location":[7,3],"direction":"右"},{"type":"部署","name":"白面鸮","location":[6,4],"direction":"右"},{"type":"部署","name":"塞雷娅","location":[9,4],"direction":"下"},{"type":"技能","name":"假日威龙陈","kills":10,"location":[null,null]},{"type":"技能","kills":31,"name":"假日威龙陈","location":[null,null]},{"type":"技能","name":"白面鸮","location":[null,null]}],"stage_name":"命运","doc":{"details":"作者:YueShen"},"opers":[{"name":"山","skill":2,"skill_usage":2},{"name":"棘刺","skill":3,"skill_usage":1},{"name":"白面鸮","skill":2},{"name":"流明","skill":3,"skill_usage":2},{"name":"假日威龙陈","skill":3},{"name":"桃金娘","skill":1,"skill_usage":1},{"name":"塞雷娅","skill":1}]}"

说JSON 不合法

[Feature] 系统相关

  • 邮件系统

  • #20

  • 由于 MAA API 只返回 HTTP OK 200,APM 无法捕捉发生在 API 管道内的错误,需要手动修改 APM 管道

Todo List

  • 修复下载逻辑。
  • 新增(更新,删除)作业接口 (只有creater 或者是超管才可以更新或者删除)
  • query返回content 里的干员
  • 新增字段 类别(可以加入搜索,举例: 活动\主线\悖论模拟)
  • 最好开放用户自行注册
  • 用户登录返回权限

For future releases:

  • 增加点赞逻辑。Limit: 每个人每个作业点赞一次(可以取消点赞)(没注册怎么点赞?)
  • 开放普通用户注册??
  • 增加判定逻辑?? 比如说上传相同关卡相同阵容可以忽略?

[Feature] 用户相关

  • 用户注册功能
  • 添加忘记密码的更改逻辑
    - [ ] 添加用户评论功能 (评论模版选词的方式) (延期)
  • 添加用户收藏功能
  • 添加 Banned 权限组

代码解耦合

希望以下地方可以替换成依赖注入:

MaaCopilotServer.Api.Jobs.ArknightsDataUpdate

  • RunJobnew MaaCopilotDbContext(_dbOptions) 替换为注入 IMaaCopilotDbContext
  • GetParsedDataGetDataVersionHttpClientHandler 想办法替换成依赖注入

MaaCopilotServer.Api.Jobs.TokenValidationCheck

  • 同上,MaaCopilotDbContext

MaaCopilotServer.Api.Middleware.ApmTransactionMiddleware

  • Elastic.Apm.Agent.Tracer 创建包装类 (wrapper class)

MaaCopilotServer.Application.Common.Extensions.DirectoryInfoExtension

MaaCopilotServer.Application.Common.Extensions.FileInfoExtension

  • 同上

MaaCopilotServer.Infrastructure.Services.CopilotOperationService

  • EncodeId:这么简单的逻辑为什么不写成静态类?已经帮你提出来了,建议替换掉。
  • DecodeId:同上

我们不要用 `dev` 分支了吧

感觉没用。把 main 锁上,需要加新功能的时候直接创建自己的分支,拉取请求合并到 main。至于 main 什么时候发版那可以稍后决定。dev 的话攒了一大堆东西最后即使审查也看不懂了。


根据以下规则开发:

  1. main 分支全程上锁。
  2. 新功能创建自己的功能分支。
  3. 新功能开发及测试完毕后创建到 main 的拉取请求,并在拉取请求中详细描述该功能的作用。
  4. 合并至 main 后删除功能分支。合并方式待定,merge、squach、rebase 皆可。
  5. 如果发现 main 分支上测试不正常,回退该拉取请求。
  6. 如果测试正常则发布新版本。

减少依赖注入。

依赖注入通过反射动态绑定对象,容易出现调用层次不明确、难以追踪组件间关系的问题。尽量手动创建对象。

优化激活邮件内容

现在前端已经支持直接跳转激活了,不需要专门把激活码放出来引导了,只需要放一个已经拼接过 URL 的链接就可以了

修复 APM

由于 MAA API 只返回 HTTP OK 200,APM 无法捕捉发生在 API 管道内的错误,需要手动修改 APM 管道

提高测试覆盖率

实在无法测试的地方(如 Main 函数、Adapter 等)可以用 ExcludeFromCoverage 忽略。

[Refactor] 重构 Server

Server 中的一些组件可能需要进一步的重构以便于将来的开发和测试。

目前各个项目的用途分别为(@LiamSho):

  • Api:接收HTTP请求
  • Application:具体的业务逻辑、DTO
  • Domain:各种实体
  • Infrastructure:一些通用服务和数据库对接

重构任务(按优先级从高到低)

已取消

  • 将 DTO 类跟数据库实体存放到一个项目中。
  • #18

建议把浏览量改为使用次数

目前感觉浏览量代表不了什么意义,并且没有限制增长的机制,如果要实现的话也比较麻烦

建议改成该作业被抄(?)的次数:

  1. 后端增加一个接口如 /copilot/use/{ID},用于增长次数
  2. maa 在执行作业时调用该接口
  3. 对于用户直接导入 json 的情况,可以在作业协议里增加一个 id 字段用于追踪

cc @MistEO

[Feature] 作业相关

  • 更新作业

  • 不再保留旧的版本

  • 添加新的 CopilotId 字段用作同一份作业的识别

  • 更新作业的逻辑为创建一个新的作业,设置 CopilotId 与旧的相同

  • 以上传时间 (CreateAt)作为版本排序依据

  • 作业删除权限

  • 添加 赞/踩 功能

希望后端放宽关卡 ID 的校验,或者不校验

危机合约、高难关卡,这种经常会出现,MAA client 已经支持了,但是作业站不支持的情况,很尴尬。建议 levelID 校验不通过的关卡也允许上传,这样可以省掉很多后端适配工作。

最一开始做关卡 ID 校验似乎是为了 i18n ?但这部分靠 client 的各种 屎山 replacement 其实完全可以 cover 掉,没必要交给作业站做。而且现在作业站也没支持 i18n

虽然这个 issue 听起来是个 breaking changes,但是还是希望整一下

关卡重复

/arknights/level 返回的数据里包含重复关卡,如下:

[
  {
    "catOne": "危机合约",
    "catTwo": "#8「寻昼」行动",
    "catThree": "卡西米尔",
    "name": "大骑士领酒吧街",
    "levelId": "obt/rune/level_rune_10-01",
    "width": 0,
    "height": 0,
    "custom": true
  },
  {
    "catOne": "危机合约",
    "catTwo": "卡西米尔",
    "catThree": "大骑士领酒吧街",
    "name": "大骑士领酒吧街",
    "levelId": "obt/rune/level_rune_10-01",
    "width": 12,
    "height": 8,
    "custom": false
  },
  {
    "catOne": "危机合约",
    "catTwo": "#8「寻昼」行动",
    "catThree": "萨尔贡",
    "name": "沙海遗迹",
    "levelId": "obt/rune/level_rune_10-02",
    "width": 0,
    "height": 0,
    "custom": true
  },
  {
    "catOne": "危机合约",
    "catTwo": "萨尔贡",
    "catThree": "沙海遗迹",
    "name": "沙海遗迹",
    "levelId": "obt/rune/level_rune_10-02",
    "width": 12,
    "height": 8,
    "custom": false
  },
  {
    "catOne": "危机合约",
    "catTwo": "#9「渊默」行动",
    "catThree": "伊比利亚",
    "name": "盐风溶洞",
    "levelId": "obt/rune/level_rune_11-01",
    "width": 0,
    "height": 0,
    "custom": true
  },
  {
    "catOne": "危机合约",
    "catTwo": "伊比利亚",
    "catThree": "盐风溶洞",
    "name": "盐风溶洞",
    "levelId": "obt/rune/level_rune_11-01",
    "width": 12,
    "height": 8,
    "custom": false
  },
  {
    "catOne": "危机合约",
    "catTwo": "#9「渊默」行动",
    "catThree": "炎国",
    "name": "尚蜀山道",
    "levelId": "obt/rune/level_rune_11-02",
    "width": 0,
    "height": 0,
    "custom": true
  },
  {
    "catOne": "危机合约",
    "catTwo": "炎国",
    "catThree": "尚蜀山道",
    "name": "尚蜀山道",
    "levelId": "obt/rune/level_rune_11-02",
    "width": 12,
    "height": 8,
    "custom": false
  },
  {
    "catOne": "危机合约",
    "catTwo": "#10「尘环」行动",
    "catThree": "维多利亚",
    "name": "伦蒂尼姆边缘区块",
    "levelId": "obt/rune/level_rune_12-01",
    "width": 0,
    "height": 0,
    "custom": true
  },
  {
    "catOne": "危机合约",
    "catTwo": "维多利亚",
    "catThree": "伦蒂尼姆边缘区块",
    "name": "伦蒂尼姆边缘区块",
    "levelId": "obt/rune/level_rune_12-01",
    "width": 12,
    "height": 9,
    "custom": false
  },
  {
    "catOne": "危机合约",
    "catTwo": "#10「尘环」行动",
    "catThree": "维多利亚",
    "name": "小丘郡物流站",
    "levelId": "obt/rune/level_rune_12-02",
    "width": 0,
    "height": 0,
    "custom": true
  },
  {
    "catOne": "危机合约",
    "catTwo": "维多利亚",
    "catThree": "小丘郡物流站",
    "name": "小丘郡物流站",
    "levelId": "obt/rune/level_rune_12-02",
    "width": 12,
    "height": 8,
    "custom": false
  }
]

适配 Kubernetes

  • 拆分 appsettings.json
  • 将 Email Template 存放至 ConfigMap
  • 移除所有文件系统写入访问
  • Grafana Loki 集成

清理不用的服务

ActivateCopilotAccountCommand.cs

public class ActivateCopilotAccountCommandHandler : IRequestHandler<ActivateCopilotAccountCommand, MaaApiResponse>
{
    private readonly ApiErrorMessage _apiErrorMessage;
    private readonly ICurrentUserService _currentUserService; // Not used
    private readonly IMaaCopilotDbContext _dbContext;

    // ...
}

建议清理一下用不到的服务。

修改热度计算公式

当前热度计算公式为 初始值 加上 查看 的数量乘以对应的系数,最后全部相加得来。因此热度值只会增加不会减少。

需要添加一个按照发布时间计算的热度衰减

然后问题来了,怎么设计这个衰减(

@MistEO
@GalvinGao
@martinwang2002

统一全局配置

  1. 移除GlobalSettings类,或将其改为静态类,仅提供常数和环境变量。
  2. Helper类改回静态。

不支持上传危机合约关卡的作业

危机合约不在 gamedata 里面,需要抓包才有关卡名,所以没有稳定的数据源,可能考虑留个后门或者什么的,每次危机合约手动上传一下数据

这个是这次的 stage.zip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.