blog/从零开始搭建一个群管机器人.md

5.1 KiB
Raw Permalink Blame History

title tags categories date
从零开始搭建一个群管机器人 bot bot,go 2021-12-28 22:05:42

环境搭建

安装golang

  • 从golang中文官网下载go语言安装包
  • 下载完成后解压配置环境变量

命令行输入go version

安装goland

  • 从goland官网下载goland安装包
  • 双击后正常安装就可

创建项目

初始化项目

  • 打开goland,创建go项目取名为leafBot-plugin
  • 初始化项目go mod init github.com/huoxue1/fan
  • 安装leafbot依赖 go get github.com/huoxue1/leafbot
  • 跟项目下创建main.go文件

编写main.go文件初始化leafBot

  • main.go中修改package为main
  • 创建main方法添加如下代码
// main方法项目运行起点
func main() {
    // 创建一个cqhttp的driver
	driver := cqhttp_default_driver.NewDriver()
    // 为leafBot加载该驱动
	leafbot.LoadDriver(driver)
    // 初始化leafBot
	leafbot.InitBots()
    // 运行cqhttp驱动
	driver.Run()
}
  • 一般main.go会自动导入如下依赖
import (
    // leafbot核心依赖
	"github.com/huoxue1/leafbot"
    // leafbot的cqhttp与leafbot直接结合所用的依赖
	"github.com/huoxue1/leafbot/cqhttp_default_driver"
)

  • main.go最终结果为
package main

import (
	"github.com/huoxue1/leafbot"
	"github.com/huoxue1/leafbot/cqhttp_default_driver"
)

func main() {
	driver := cqhttp_default_driver.NewDriver()
	leafbot.LoadDriver(driver)
	leafbot.InitBots()
	driver.Run()
}
  • 首次运行该项目输入bot的qq号即可
  • 再次运行因为还需要初始化go-cqhttp的配置文件所有好需要交互
  • 再次运行即可运行成功,生成二维码后使用手机扫码登录即可

插件编写

创建插件项目

  • 在项目跟目录添加文件夹plugin在plugin下继续创建文件夹plugin-manager并且创建manager.go文件
  • 在manager.go文件夹中添加如下代码
package group_manager

import (
	"fmt"
	"strconv"

	"github.com/huoxue1/leafbot"
	"github.com/huoxue1/leafbot/message"
)

func init() {
	manager()
}

func manager() {
    // 创建一个leafBot插件插件名为group-manager
	plugin := leafbot.NewPlugin("group-manager")
	// 为plugin添加一个matcher,匹配器为Onstart即匹配消息开始为升为管理的语句
	plugin.OnStart("升为管理", leafbot.Option{
        // 添加matcher的权重权重越低越先匹配
		Weight: 1,
        // 设置匹配成功后是否匹配其他matcher
		Block:  true,
		Rules:  []leafbot.Rule{},
	}).Handle(func(ctx *leafbot.Context) {
        // 遍历事件中的message
		for _, v := range ctx.Event.Message {
            // 判断事件中的消息类型weiat
			if v.Type == "at" {
                // 取出at的qq号并强制转为整形
				qq, _ := strconv.Atoi(v.Data["qq"])
                // 调用api为其设置为管理员
				ctx.Bot.(leafbot.OneBotApi).SetGroupAdmin(ctx.Event.GroupId, qq, true)
                // 发送消息xxx已升为管理员
				ctx.Send(message.Text(fmt.Sprintf("%v已经升为管理员", qq)))
			}
		}
	})

	// 取消管理
	plugin.OnStart("取消管理",leafbot.Option{
		Weight: 1,
		Block:  true,
	}).Handle(func(ctx *leafbot.Context) {
		for _, v := range ctx.Event.Message {
			if v.Type == "at" {
				qq, _ := strconv.Atoi(v.Data["qq"])
				ctx.Bot.(leafbot.OneBotApi).SetGroupAdmin(ctx.Event.GroupId, qq, false)
				ctx.Send(message.Text(fmt.Sprintf("%v已被取消管理员", qq)))
			}
		}
	})

}

  • 在main.go中导入该插件即在import中添加
import(
	"github.com/huoxue1/leafbot"
	"github.com/huoxue1/leafbot/cqhttp_default_driver"

	_ "github.com/huoxue1/fan/plugin/group-mamanger"
)
  • 运行后,在机器人为群主的群里发送,升为管理并且艾特需要升为管理的人即可设置管理

leafBot解释

leafBot为一个go语言版本实现了onebot11协议的SDK,推荐对接onebot为go-cqhttp leafBot除了Onstart匹配器外还有匹配器

// 命令匹配
OnCommand(command string, options ...Option) Matcher
// 消息匹配
OnMessage(messageType string, options ...Option) Matcher
// 请求事件匹配
OnRequest(requestType string, options ...Option) Matcher
// 提醒事件匹配
OnNotice(noticeType string, options ...Option) Matcher
// 元事件匹配
OnMeta(options ...Option) Matcher
// 正则匹配
OnRegex(regexMatcher string, options ...Option) Matcher
// 匹配字符串开始
OnStart(start string, options ...Option) Matcher
// 匹配字符串结尾
OnEnd(end string, options ...Option) Matcher
// 消息完全匹配
OnFullMatch(content string, options ...Option) Matcher
// 群组消息完全匹配
OnFullMatchGroup(content string, options ...Option) Matcher
// bot连接回调
OnConnect(options ...Option) Matcher
// bot断开回调
OnDisConnect(options ...Option) Matcher

更多内容参考LeafBot