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

183 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 从零开始搭建一个群管机器人
tags: bot
categories: bot,go
date: 2021-12-28 22:05:42
---
# 环境搭建
## 安装golang
+ 从golang[中文官网](https://studygolang.com/dl)下载go语言安装包
+ 下载完成后解压配置环境变量
命令行输入**go version**
![](https://gitee.com/aabbccddeeeff/img/raw/master//img/202112282212881.png)
## 安装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方法添加如下代码
```go
// main方法项目运行起点
func main() {
// 创建一个cqhttp的driver
driver := cqhttp_default_driver.NewDriver()
// 为leafBot加载该驱动
leafbot.LoadDriver(driver)
// 初始化leafBot
leafbot.InitBots()
// 运行cqhttp驱动
driver.Run()
}
```
+ 一般main.go会自动导入如下依赖
```go
import (
// leafbot核心依赖
"github.com/huoxue1/leafbot"
// leafbot的cqhttp与leafbot直接结合所用的依赖
"github.com/huoxue1/leafbot/cqhttp_default_driver"
)
```
+ main.go最终结果为
```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号即可
![](https://gitee.com/aabbccddeeeff/img/raw/master//img/202112282225028.png)
+ 再次运行因为还需要初始化go-cqhttp的配置文件所有好需要交互
![](https://gitee.com/aabbccddeeeff/img/raw/master//img/202112282226998.png)
+ 再次运行即可运行成功,生成二维码后使用手机扫码登录即可
![](https://gitee.com/aabbccddeeeff/img/raw/master//img/202112282227074.png)
# 插件编写
## 创建插件项目
+ 在项目跟目录添加文件夹plugin在plugin下继续创建文件夹plugin-manager并且创建manager.go文件
+ 在manager.go文件夹中添加如下代码
```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匹配器外还有匹配器
```go
// 命令匹配
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](https://github.com/huoxue1/leafbot)