Skip to content

Latest commit

 

History

History
309 lines (231 loc) · 7.92 KB

README_zh.md

File metadata and controls

309 lines (231 loc) · 7.92 KB

LOGO

MaaFramework Golang 绑定

license go reference maa framework

English | 简体中文

这是 MaaFramework 的Go语言绑定,为Go开发者提供了一种简单而有效的方式,在他们的Go应用程序中使用MaaFramework的功能。

无需 Cgo!

安装

要安装MaaFramework Go绑定,请在终端中运行以下命令:

go get github.com/MaaXYZ/maa-framework-go

此外,请下载MaaFramework的Release 包,以获取必要的动态库文件。

使用

要在您的Go项目中使用MaaFramework,请像导入其他Go包一样导入此包:

import "github.com/MaaXYZ/maa-framework-go"

然后,您可以使用MaaFramework提供的功能。有关详细用法,请参阅仓库中提供的 文档示例

注意: 使用 maa-framework-go 构建的程序依赖于 MaaFramework 的动态库运行。请确保以下条件之一满足:

  1. 程序的工作目录包含 MaaFramework 的动态库。
  2. 设置了指向动态库的环境变量(如 LD_LIBRARY_PATH 或 PATH)。

否则,程序可能无法正确运行。

文档

目前没有太多详细的文档。请参阅源代码,并与MaaFramework项目中的接口进行比较,以了解如何使用这些绑定。我们正在积极添加更多注释和文档到源代码中。

以下是一些可能对您有帮助的MaaFramework文档:

示例

快速开始

有关详细信息,请参阅 quick-start

以下是一个基本示例,帮助您快速入门:

package main

import (
    "fmt"
    "github.com/MaaXYZ/maa-framework-go"
    "os"
)

func main() {
    toolkit := maa.NewToolkit()
    toolkit.ConfigInitOption("./", "{}")
    tasker := maa.NewTasker(nil)
    defer tasker.Destroy()

    device := toolkit.FindAdbDevices()[0]
    ctrl := maa.NewAdbController(
        device.AdbPath,
        device.Address,
        device.ScreencapMethod,
        device.InputMethod,
        device.Config,
        "path/to/MaaAgentBinary",
        nil,
    )
    defer ctrl.Destroy()
    ctrl.PostConnect().Wait()
    tasker.BindController(ctrl)

    res := maa.NewResource(nil)
    defer res.Destroy()
    res.PostPath("./resource").Wait()
    tasker.BindResource(res)
    if tasker.Initialized() {
        fmt.Println("Failed to init MAA.")
        os.Exit(1)
    }

    detail := tasker.PostPipeline("Startup").Wait().GetDetail()
    fmt.Println(detail)
}

自定义识别器

有关详细信息,请参阅 custom-recognition

以下是一个实现自定义识别器的基本示例:

package main

import (
    "fmt"
    "github.com/MaaXYZ/maa-framework-go"
    "os"
)

func main() {
    toolkit := maa.NewToolkit()
    toolkit.ConfigInitOption("./", "{}")
    tasker := maa.NewTasker(nil)
    defer tasker.Destroy()

    device := toolkit.FindAdbDevices()[0]
    ctrl := maa.NewAdbController(
        device.AdbPath,
        device.Address,
        device.ScreencapMethod,
        device.InputMethod,
        device.Config,
        "path/to/MaaAgentBinary",
        nil,
    )
    defer ctrl.Destroy()
    ctrl.PostConnect().Wait()
    tasker.BindController(ctrl)

    res := maa.NewResource(nil)
    defer res.Destroy()
    res.PostPath("./resource").Wait()
    tasker.BindResource(res)
    if tasker.Initialized() {
        fmt.Println("Failed to init MAA.")
        os.Exit(1)
    }

    res.RegisterCustomRecognition("MyRec", &MyRec{})

    detail := tasker.PostPipeline("Startup").Wait().GetDetail()
    fmt.Println(detail)
}

type MyRec struct{}

func (r *MyRec) Run(ctx *maa.Context, arg *maa.CustomRecognitionArg) (maa.CustomRecognitionResult, bool) {
    ctx.RunRecognition("MyCustomOCR", arg.Img, maa.J{
        "MyCustomOCR": maa.J{
            "roi": []int{100, 100, 200, 300},
        },
    })

    ctx.OverridePipeline(maa.J{
        "MyCustomOCR": maa.J{
            "roi": []int{1, 1, 114, 514},
        },
    })

    newContext := ctx.Clone()
    newContext.OverridePipeline(maa.J{
        "MyCustomOCR": maa.J{
            "roi": []int{100, 200, 300, 400},
        },
    })
    newContext.RunPipeline("MyCustomOCR", arg.Img)

    clickJob := ctx.GetTasker().GetController().PostClick(10, 20)
    clickJob.Wait()

    ctx.OverrideNext(arg.CurrentTaskName, []string{"TaskA", "TaskB"})

    return maa.CustomRecognitionResult{
        Box:    maa.Rect{0, 0, 100, 100},
        Detail: "Hello World!",
    }, true
}

自定义动作

有关详细信息,请参阅 custom-action

以下是一个实现自定义动作的基本示例:

package main

import (
    "fmt"
    "github.com/MaaXYZ/maa-framework-go"
    "os"
)

func main() {
    toolkit := maa.NewToolkit()
    toolkit.ConfigInitOption("./", "{}")
    tasker := maa.NewTasker(nil)
    defer tasker.Destroy()

    device := toolkit.FindAdbDevices()[0]
    ctrl := maa.NewAdbController(
        device.AdbPath,
        device.Address,
        device.ScreencapMethod,
        device.InputMethod,
        device.Config,
        "path/to/MaaAgentBinary",
        nil,
    )
    defer ctrl.Destroy()
    ctrl.PostConnect().Wait()
    tasker.BindController(ctrl)

    res := maa.NewResource(nil)
    defer res.Destroy()
    res.PostPath("./resource").Wait()
    tasker.BindResource(res)
    if tasker.Initialized() {
        fmt.Println("Failed to init MAA.")
        os.Exit(1)
    }

    res.RegisterCustomAction("MyAct", &MyAct{})

    detail := tasker.PostPipeline("Startup").Wait().GetDetail()
    fmt.Println(detail)
}

type MyAct struct{}

func (a *MyAct) Run(_ *maa.Context, _ *maa.CustomActionArg) bool {
    return true
}

PI CLI

有关详细信息,请参阅 pi-cli

以下是一个使用PI CLI的基本示例:

package main

import (
    "github.com/MaaXYZ/maa-framework-go"
)

func main() {
    toolkit := maa.NewToolkit()
    toolkit.RegisterPICustomAction(0, "MyAct", &MyAct{})
    toolkit.RunCli(0, "./resource", "./", false, nil)
}

type MyAct struct{}

func (m MyAct) Run(ctx *maa.Context, arg *maa.CustomActionArg) bool {
    ctx.OverrideNext(arg.CurrentTaskName, []string{"TaskA", "TaskB"})

    img := ctx.GetTasker().GetController().CacheImage()
    ctx.GetTasker().GetController().PostClick(100, 100).Wait()

    ctx.RunRecognition("Cat", img, maa.J{
        "recognition": "OCR",
        "expected":    "cat",
    })
    return true
}

贡献

我们欢迎对MaaFramework Go绑定的贡献。如果您发现了bug或有功能请求,请在GitHub仓库上打开一个issue。如果您想贡献代码,欢迎fork仓库并提交pull request。

许可证

本项目使用 LGPL-3.0 许可证。详细信息请参阅 LICENSE 文件。

讨论

QQ 群: 595990173