rust写的maa命令行工具 #6063
Replies: 4 comments 9 replies
-
考虑 PR 给我们吗 XD |
Beta Was this translation helpful? Give feedback.
-
我不大熟悉 Rust 的 binding, 这里是不是有两个部分, 只有 maa-run 是需要链接 MaaCore 的, 这两个的版本也没有很强的依赖, 只要函数签名没变不需要每次 Core 更新都重新编译 maa-run? |
Beta Was this translation helpful? Give feedback.
-
这听上去是可以解决的, 比如先找相对路径 但是 rpath 好像就比较麻烦了, 设成 或者直接放弃治疗在 |
Beta Was this translation helpful? Give feedback.
-
See #6144. |
Beta Was this translation helpful? Give feedback.
-
Linux使用maa比较困难,目前的方法主要是写Python脚本来调用MaaCore,但是敲代码有一定门槛,并且更改起来比较麻烦,所以我用rust写了一个命令行工具maa-cli,用来在Linux上使用Maa。因为Linux和macOS大多地方都是一样的,所有这个工具也支持mac(Intel,Arm都支持,但是不知道是哪里的bug,通过命令行打开PlayCover下的明日方舟可以登陆,但是无法获得作战记录)。Windows的话,一个我没有Windows设备,一个我也不懂Windows开发,所以我虽然尝试了支持Windows,但是始终不能编译通过,所以就放弃了(当然如果有大佬对这个项目有一点小小的兴趣来帮助支持Windows,我会非常感谢)。我本来是也是打算用Python写(如果用Python写可能就没有多平台支持的问题了),但是由于刚好我最近在学习rust,而且rust刚好有很好的工具库,就决定用这个项目当作练习。因为我是rust小白,写的可能有很多有问题的地方,所以欢迎各位大佬对项目提意见。
接下来言归正传,我来介绍一下我这个命令行工具的功能:
通过配置文件定义任务,并通过
maa run <task>
运行这个工具的核心功能就是降低写代码的麻烦,但是我们需要写配置文件来配置我们一键收菜的时候干什么。
配置文件可以是TOML,YAML或者JSON,我个人更喜欢TOML来写配置,所以以TOML为例子.
一个任务文件包含多个子任务,每一个子任务是一个MAA任务链:
如果你想要根据一些条件运行不同参数的任务,你可以定义多个任务的变体:
这里的
condition
字段用于确定哪一个变体应该被使用,而匹配的变体的params
字段将会被合并到任务的主参数中。注意:这个CLI不会读取基建计划文件中的任何内容,包括基建计划文件中定义的时间段,所以你必须在
condition
字段中定义时间段,来在不同的时间运行不同的基建计划。除了
Time
条件,还有DateTime
,Weakday
和Combined
(其他条件的组合)条件:如果有多个变体被匹配,第一个将会被使用。如果没有给出条件,那么变体将会总是被匹配,所以你可以把没有条件的变体放在最后,作为默认的情况。
如果没有变体被匹配,那么任务将不会被执行,这在你想要只在某些条件下运行任务时很有用:
我自己用的配置文件你可以在这里找到。
MaaCore消息处理
写Python脚本的另一个痛点就是没有现成的Callback,自己实现起来很麻烦,任务出问题了可能要去查log。这个CLI我参考WindowsGUI的消息处理,捏了一个我觉得还凑活的输出,并且可以通过
-v
和-q
参数来改变消息等级(Log level),从而实现减少或者增加消息。这是
maa run daily -v
情况下的输出:有个问题就是没有本地化,可能有些消息不太好懂。
安装和更新MaaCore
maa install [channel]
和maa update [channel]
命令可以用来安装和更新MaaCore本身,这里的channel可以是stable,beta和alpha,stable就是下载并安装最新的稳定版,另外则是两个相应的beta和alpha,如果省略这个参数,默认是稳定版。这个下载是从maa的API来获取版本信息,并且对可用的镜像测速,最后选最快的下载,所以不用担心下不下来。安装和更新这个工具本身
maa self install
和maa self update
用来安装和更新这个工具本身。这个工具本身包括两个部分maa
和maa-run
,前者是用来和用户交互的,后者是用来和MaaCore交互的。由于我不想让这个工具带着MaaCore本身一起发布(这样可以让两者分别单独更新),而rust有没有办法在链接的库不存在的情况下运行,所以我把所有和MaaCore交互的库放在了maa-run
里面。在安装的时候只需要下载maa
这个工具然后用maa self install
来安装maa-run
。而maa self update
会同时检查两个工具是否都是最新版,如果不是是就可以下载并安装相应的最新版。不过由于我这个工具没有镜像,版本信息和包都存在Github上,所以在国内可能会存在下不动的情况。这种情况一个可选的方法是找一个Github代理的网站,然后设置MAA_CLI_API
和MAA_CLI_DOWNLOAD
两个环境变量,比如这样:更多的其他部分细节,欢迎大家去我的仓库查看。也希望这个小工具会对在Linux上使用MAA的小伙伴们有用。
Beta Was this translation helpful? Give feedback.
All reactions