zero

package module
v0.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 9, 2024 License: GPL-3.0 Imports: 25 Imported by: 0

README

ZeroBot

Go Report Card golangci-lint Badge Badge License qq group

文档正在咕咕中, 具体使用可以参考example文件夹。

⚡️ 快速使用

package main

import (
	zero "github.com/wdvxdr1123/ZeroBot"
	"github.com/wdvxdr1123/ZeroBot/driver"
)

func main() {
	zero.OnCommand("hello").
            Handle(func(ctx *zero.Ctx) {
                ctx.Send("world")
            })

	zero.RunAndBlock(&zero.Config{
		NickName:      []string{"bot"},
		CommandPrefix: "/",
		SuperUsers:    []int64{123456},
		Driver: []zero.Driver{
			// 正向 WS
			driver.NewWebSocketClient("ws://127.0.0.1:6700", ""),
			// 反向 WS
			driver.NewWebSocketServer(16, "ws://127.0.0.1:6701", ""),
		},
	}, nil)
}

🎯 特性

  • 通过 init 函数实现插件式
  • 底层与 Onebot 通信驱动可换,目前支持正向/反向WS,且支持基于 unix socket 的通信(使用 ws+unix://
  • 通过添加多个 driver 实现多Q机器人支持

关联项目

特别感谢

同时感谢以下开发者对 ZeroBot 作出的贡献:

Documentation

Index

Constants

This section is empty.

Variables

View Source
var APICallers callerMap

APICallers 所有的APICaller列表, 通过self-ID映射

Functions

func AdminPermission

func AdminPermission(ctx *Ctx) bool

AdminPermission only triggered by the group admins or higher permission

func ExposeCaller

func ExposeCaller[T any](ctx *Ctx) *T

ExposeCaller as *T, maybe panic if misused

func GetTriggeredMessages

func GetTriggeredMessages(id message.MessageID) []message.MessageID

GetTriggeredMessages 获取被 id 消息触发的回复消息 id

func HasPicture

func HasPicture(ctx *Ctx) bool

HasPicture 消息含有图片返回 true

func MustProvidePicture

func MustProvidePicture(ctx *Ctx) bool

MustProvidePicture 消息不存在图片阻塞120秒至有图片,超时返回 false

func OnlyGroup

func OnlyGroup(ctx *Ctx) bool

OnlyGroup requires that the ctx.Event is public/group message

func OnlyGuild

func OnlyGuild(ctx *Ctx) bool

OnlyGuild requires that the ctx.Event is public/guild message

func OnlyPrivate

func OnlyPrivate(ctx *Ctx) bool

OnlyPrivate requires that the ctx.Event is private message

func OnlyPublic

func OnlyPublic(ctx *Ctx) bool

OnlyPublic requires that the ctx.Event is public/group or public/guild message

func OnlyToMe

func OnlyToMe(ctx *Ctx) bool

OnlyToMe only triggered in conditions of @bot or begin with the nicknames

func OwnerPermission

func OwnerPermission(ctx *Ctx) bool

OwnerPermission only triggered by the group owner or higher permission

func ParseShell

func ParseShell(s string) []string

ParseShell 将指令转换为指令参数. modified from https://github.com/mattn/go-shellwords

func RangeBot

func RangeBot(iter func(id int64, ctx *Ctx) bool)

RangeBot 遍历所有bot (Ctx)实例

单次操作返回 true 则继续遍历,否则退出

func Run

func Run(op *Config)

Run 主函数初始化

func RunAndBlock

func RunAndBlock(op *Config, preblock func())

RunAndBlock 主函数初始化并阻塞

preblock 在所有 Driver 连接后,调用最后一个 Driver 的 Listen 阻塞前执行本函数

func SuperUserPermission

func SuperUserPermission(ctx *Ctx) bool

SuperUserPermission only triggered by the bot's owner

func UserOrGrpAdmin

func UserOrGrpAdmin(ctx *Ctx) bool

UserOrGrpAdmin 允许用户单独使用或群管使用

Types

type APICaller

type APICaller interface {
	CallApi(request APIRequest) (APIResponse, error)
}

APICaller is the interface of CallApi

type APIRequest

type APIRequest struct {
	Action string `json:"action"`
	Params Params `json:"params"`
	Echo   uint64 `json:"echo"` // 该项不用填写,由Driver生成
}

APIRequest is the request sending to the cqhttp https://github.com/botuniverse/onebot-11/blob/master/communication/ws.md

type APIResponse

type APIResponse struct {
	Status  string       `json:"status"`
	Data    gjson.Result `json:"data"`
	Msg     string       `json:"msg"`
	Wording string       `json:"wording"`
	RetCode int64        `json:"retcode"`
	Echo    uint64       `json:"echo"`
}

APIResponse is the response of calling API https://github.com/botuniverse/onebot-11/blob/master/communication/ws.md

type Config

type Config struct {
	NickName       []string      `json:"nickname"`         // 机器人名称
	CommandPrefix  string        `json:"command_prefix"`   // 触发命令
	SuperUsers     []int64       `json:"super_users"`      // 超级用户
	RingLen        uint          `json:"ring_len"`         // 事件环长度 (默认关闭)
	Latency        time.Duration `json:"latency"`          // 事件处理延迟 (延迟 latency 再处理事件,在 ring 模式下不可低于 1ms)
	MaxProcessTime time.Duration `json:"max_process_time"` // 事件最大处理时间 (默认4min)
	MarkMessage    bool          `json:"mark_message"`     // 自动标记消息为已读
	Driver         []Driver      `json:"-"`                // 通信驱动
}

Config is config of zero bot

var BotConfig Config

BotConfig 运行中bot的配置,是Run函数的参数的拷贝

func (*Config) GetFirstSuperUser

func (c *Config) GetFirstSuperUser(qqs ...int64) int64

GetFirstSuperUser 在 qqs 中获得 SuperUsers 列表的首个 qq

找不到返回 -1

type Ctx

type Ctx struct {
	Event *Event
	State State
	// contains filtered or unexported fields
}

Ctx represents the Context which hold the event. 代表上下文

func GetBot

func GetBot(id int64) *Ctx

GetBot 获取指定的bot (Ctx)实例

func (*Ctx) Block

func (ctx *Ctx) Block()

Block 匹配成功后阻止后续触发

func (*Ctx) Break

func (ctx *Ctx) Break()

Block 在 pre, rules, mid 阶段阻止后续触发

func (*Ctx) CallAction

func (ctx *Ctx) CallAction(action string, params Params) APIResponse

CallAction 调用 cqhttp API

func (*Ctx) CardOrNickName

func (ctx *Ctx) CardOrNickName(uid int64) (name string)

CardOrNickName 从 uid 获取群名片,如果没有则获取昵称

func (*Ctx) CheckSession

func (ctx *Ctx) CheckSession() Rule

CheckSession 判断会话连续性

func (*Ctx) DeleteGroupEssenceMessage

func (ctx *Ctx) DeleteGroupEssenceMessage(messageID int64) APIResponse

DeleteGroupEssenceMessage 移出群精华消息 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E7%A7%BB%E5%87%BA%E7%B2%BE%E5%8D%8E%E6%B6%88%E6%81%AF

func (*Ctx) DeleteMessage

func (ctx *Ctx) DeleteMessage(messageID interface{})

DeleteMessage 撤回消息 https://github.com/botuniverse/onebot-11/blob/master/api/public.md#delete_msg-%E6%92%A4%E5%9B%9E%E6%B6%88%E6%81%AF

func (*Ctx) Echo

func (ctx *Ctx) Echo(response []byte)

Echo 向自身分发虚拟事件

func (*Ctx) ExtractPlainText

func (ctx *Ctx) ExtractPlainText() string

ExtractPlainText 提取消息中的纯文本

func (*Ctx) ForwardFriendSingleMessage

func (ctx *Ctx) ForwardFriendSingleMessage(userID int64, messageID interface{}) APIResponse

ForwardFriendSingleMessage 转发单条消息到好友

https://llonebot.github.io/zh-CN/develop/extends_api

func (*Ctx) ForwardGroupSingleMessage

func (ctx *Ctx) ForwardGroupSingleMessage(groupID int64, messageID interface{}) APIResponse

ForwardGroupSingleMessage 转发单条消息到群

https://llonebot.github.io/zh-CN/develop/extends_api

func (*Ctx) FutureEvent

func (ctx *Ctx) FutureEvent(Type string, rule ...Rule) *FutureEvent

FutureEvent ...

func (*Ctx) Get

func (ctx *Ctx) Get(prompt string) string

Get ..

func (*Ctx) GetFile

func (ctx *Ctx) GetFile(fileID string) gjson.Result

GetFile 下载收到的群文件或私聊文件

https://llonebot.github.io/zh-CN/develop/extends_api

func (*Ctx) GetGroupEssenceMessageList

func (ctx *Ctx) GetGroupEssenceMessageList(groupID int64) gjson.Result

GetGroupEssenceMessageList 获取群精华消息列表 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%B2%BE%E5%8D%8E%E6%B6%88%E6%81%AF%E5%88%97%E8%A1%A8

func (*Ctx) GetGroupMessageHistory

func (ctx *Ctx) GetGroupMessageHistory(groupID, messageID int64) gjson.Result

GetGroupMessageHistory 获取群消息历史记录 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E8%8E%B7%E5%8F%96%E7%BE%A4%E6%B6%88%E6%81%AF%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95

messageID: 起始消息序号, 可通过 get_msg 获得

func (*Ctx) GetLatestGroupMessageHistory

func (ctx *Ctx) GetLatestGroupMessageHistory(groupID int64) gjson.Result

GettLatestGroupMessageHistory 获取最新群消息历史记录

func (*Ctx) GetLatestThisGroupMessageHistory

func (ctx *Ctx) GetLatestThisGroupMessageHistory() gjson.Result

GettLatestThisGroupMessageHistory 获取最新本群消息历史记录

func (*Ctx) GetMatcher

func (ctx *Ctx) GetMatcher() *Matcher

GetMatcher ...

func (*Ctx) GetThisGroupEssenceMessageList

func (ctx *Ctx) GetThisGroupEssenceMessageList() gjson.Result

GetThisGroupEssenceMessageList 获取本群精华消息列表

func (*Ctx) GetThisGroupMemberList

func (ctx *Ctx) GetThisGroupMemberList() gjson.Result

GetThisGroupMemberList 获取本群成员列表

func (*Ctx) GetThisGroupMemberListNoCache

func (ctx *Ctx) GetThisGroupMemberListNoCache() gjson.Result

GetThisGroupMemberListNoCache 无缓存获取本群员列表

func (*Ctx) GetThisGroupMessageHistory

func (ctx *Ctx) GetThisGroupMessageHistory(messageID int64) gjson.Result

GetThisGroupMessageHistory 获取本群消息历史记录

messageID: 起始消息序号, 可通过 get_msg 获得

func (*Ctx) MessageString

func (ctx *Ctx) MessageString() string

MessageString 字符串消息便于Regex

func (*Ctx) NickName

func (ctx *Ctx) NickName() (name string)

NickName 从 args/at 获取昵称,如果都没有则获取发送者的昵称

func (*Ctx) NoTimeout

func (ctx *Ctx) NoTimeout()

NoTimeout 处理时不设超时

func (*Ctx) Parse

func (ctx *Ctx) Parse(model interface{}) (err error)

Parse 将 Ctx.State 映射到结构体

func (*Ctx) Send

func (ctx *Ctx) Send(msg interface{}) message.MessageID

Send 快捷发送消息/合并转发

func (*Ctx) SendChain

func (ctx *Ctx) SendChain(msg ...message.MessageSegment) message.MessageID

SendChain 快捷发送消息/合并转发-消息链

func (*Ctx) SendGroupForwardMessage

func (ctx *Ctx) SendGroupForwardMessage(groupID int64, message message.Message) gjson.Result

SendGroupForwardMessage 发送合并转发(群) https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E5%9B%BE%E7%89%87ocr

func (*Ctx) SendGroupMessage

func (ctx *Ctx) SendGroupMessage(groupID int64, message interface{}) int64

SendGroupMessage 发送群消息 https://github.com/botuniverse/onebot-11/blob/master/api/public.md#send_group_msg-%E5%8F%91%E9%80%81%E7%BE%A4%E6%B6%88%E6%81%AF

func (*Ctx) SendGuildChannelMessage

func (ctx *Ctx) SendGuildChannelMessage(guildID, channelID string, message interface{}) string

SendGuildChannelMessage 发送频道消息

func (*Ctx) SendPrivateForwardMessage

func (ctx *Ctx) SendPrivateForwardMessage(userID int64, message message.Message) gjson.Result

SendPrivateForwardMessage 发送合并转发(私聊) https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E5%9B%BE%E7%89%87ocr

func (*Ctx) SendPrivateMessage

func (ctx *Ctx) SendPrivateMessage(userID int64, message interface{}) int64

SendPrivateMessage 发送私聊消息 https://github.com/botuniverse/onebot-11/blob/master/api/public.md#send_private_msg-%E5%8F%91%E9%80%81%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF

func (*Ctx) SetGroupEssenceMessage

func (ctx *Ctx) SetGroupEssenceMessage(messageID int64) APIResponse

SetGroupEssenceMessage 设置群精华消息 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E8%AE%BE%E7%BD%AE%E7%B2%BE%E5%8D%8E%E6%B6%88%E6%81%AF

func (*Ctx) SetGroupKick

func (ctx *Ctx) SetGroupKick(groupID, userID int64, rejectAddRequest bool)

SetGroupKick 群组踢人 https://github.com/botuniverse/onebot-11/blob/master/api/public.md#set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA

func (*Ctx) SetGroupPortrait

func (ctx *Ctx) SetGroupPortrait(groupID int64, file string)

SetGroupPortrait 设置群头像 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%A4%B4%E5%83%8F

func (*Ctx) SetMessageEmojiLike

func (ctx *Ctx) SetMessageEmojiLike(messageID interface{}, emojiID rune) error

SetMessageEmojiLike 发送表情回应

https://llonebot.github.io/zh-CN/develop/extends_api

emoji_id 参考 https://bot.q.qq.com/wiki/develop/api-v2/openapi/emoji/model.html#EmojiType

func (*Ctx) SetMyAvatar

func (ctx *Ctx) SetMyAvatar(file string) APIResponse

SetMyAvatar 设置我的头像

https://llonebot.github.io/zh-CN/develop/extends_api

func (*Ctx) SetThisGroupKick

func (ctx *Ctx) SetThisGroupKick(userID int64, rejectAddRequest bool)

SetThisGroupKick 本群组踢人 https://github.com/botuniverse/onebot-11/blob/master/api/public.md#set_group_kick-%E7%BE%A4%E7%BB%84%E8%B8%A2%E4%BA%BA

func (*Ctx) SetThisGroupName

func (ctx *Ctx) SetThisGroupName(groupID int64, groupName string)

SetThisGroupName 设置本群名 https://github.com/botuniverse/onebot-11/blob/master/api/public.md#set_group_name-%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%90%8D

func (*Ctx) SetThisGroupPortrait

func (ctx *Ctx) SetThisGroupPortrait(file string)

SetThisGroupPortrait 设置本群头像 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E8%AE%BE%E7%BD%AE%E7%BE%A4%E5%A4%B4%E5%83%8F

func (*Ctx) UploadGroupFile

func (ctx *Ctx) UploadGroupFile(groupID int64, file, name, folder string) APIResponse

UploadGroupFile 上传群文件 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E4%B8%8A%E4%BC%A0%E7%BE%A4%E6%96%87%E4%BB%B6

msg: FILE_NOT_FOUND FILE_SYSTEM_UPLOAD_API_ERROR ...

func (*Ctx) UploadThisGroupFile

func (ctx *Ctx) UploadThisGroupFile(file, name, folder string) APIResponse

UploadThisGroupFile 上传本群文件 https://github.com/Mrs4s/go-cqhttp/blob/master/docs/cqhttp.md#%E4%B8%8A%E4%BC%A0%E7%BE%A4%E6%96%87%E4%BB%B6

msg: FILE_NOT_FOUND FILE_SYSTEM_UPLOAD_API_ERROR ...

type Driver

type Driver interface {
	Connect()
	Listen(func([]byte, APICaller))
}

Driver 与OneBot通信的驱动,使用driver.DefaultWebSocketDriver

type Engine

type Engine struct {
	// contains filtered or unexported fields
}

Engine is the pre_handler, post_handler manager

func New

func New() *Engine

New 生成空引擎

func (*Engine) Delete

func (e *Engine) Delete()

Delete 移除该 Engine 注册的所有 Matchers

func (*Engine) On

func (e *Engine) On(typ string, rules ...Rule) *Matcher

On 添加新的指定消息类型的匹配器

func (*Engine) OnCommand

func (e *Engine) OnCommand(commands string, rules ...Rule) *Matcher

OnCommand 命令触发器

func (*Engine) OnCommandGroup

func (e *Engine) OnCommandGroup(commands []string, rules ...Rule) *Matcher

OnCommandGroup 命令触发器组

func (*Engine) OnFullMatch

func (e *Engine) OnFullMatch(src string, rules ...Rule) *Matcher

OnFullMatch 完全匹配触发器

func (*Engine) OnFullMatchGroup

func (e *Engine) OnFullMatchGroup(src []string, rules ...Rule) *Matcher

OnFullMatchGroup 完全匹配触发器组

func (*Engine) OnKeyword

func (e *Engine) OnKeyword(keyword string, rules ...Rule) *Matcher

OnKeyword 关键词触发器

func (*Engine) OnKeywordGroup

func (e *Engine) OnKeywordGroup(keywords []string, rules ...Rule) *Matcher

OnKeywordGroup 关键词触发器组

func (*Engine) OnMessage

func (e *Engine) OnMessage(rules ...Rule) *Matcher

OnMessage 消息触发器

func (*Engine) OnMetaEvent

func (e *Engine) OnMetaEvent(rules ...Rule) *Matcher

OnMetaEvent 元事件触发器

func (*Engine) OnNotice

func (e *Engine) OnNotice(rules ...Rule) *Matcher

OnNotice 系统提示触发器

func (*Engine) OnPrefix

func (e *Engine) OnPrefix(prefix string, rules ...Rule) *Matcher

OnPrefix 前缀触发器

func (*Engine) OnPrefixGroup

func (e *Engine) OnPrefixGroup(prefix []string, rules ...Rule) *Matcher

OnPrefixGroup 前缀触发器组

func (*Engine) OnRegex

func (e *Engine) OnRegex(regexPattern string, rules ...Rule) *Matcher

OnRegex 正则触发器

func (*Engine) OnRequest

func (e *Engine) OnRequest(rules ...Rule) *Matcher

OnRequest 请求消息触发器

func (*Engine) OnShell

func (e *Engine) OnShell(command string, model interface{}, rules ...Rule) *Matcher

OnShell shell命令触发器

func (*Engine) OnSuffix

func (e *Engine) OnSuffix(suffix string, rules ...Rule) *Matcher

OnSuffix 后缀触发器

func (*Engine) OnSuffixGroup

func (e *Engine) OnSuffixGroup(suffix []string, rules ...Rule) *Matcher

OnSuffixGroup 后缀触发器组

func (*Engine) SetBlock

func (e *Engine) SetBlock(block bool) *Engine

func (*Engine) UseMidHandler

func (e *Engine) UseMidHandler(rules ...Rule)

UseMidHandler 向该 Engine 添加新 MidHandler(Rule), 会在 Rule 判断后, Matcher 触发前触发,如果 midHandler 没有通过,则 Matcher 不会触发

可用于速率限制等

func (*Engine) UsePostHandler

func (e *Engine) UsePostHandler(handler ...Handler)

UsePostHandler 向该 Engine 添加新 PostHandler(Rule), 会在 Matcher 触发后触发,如果 PostHandler 返回 false, 则后续的 post handler 不会触发

可用于反并发等

func (*Engine) UsePreHandler

func (e *Engine) UsePreHandler(rules ...Rule)

UsePreHandler 向该 Engine 添加新 PreHandler(Rule), 会在 Rule 判断前触发,如果 preHandler 没有通过,则 Rule, Matcher 不会触发

可用于分群组管理插件等

type Event

type Event struct {
	Time          int64           `json:"time"`
	PostType      string          `json:"post_type"`
	DetailType    string          `json:"-"`
	MessageType   string          `json:"message_type"`
	SubType       string          `json:"sub_type"`
	MessageID     interface{}     `json:"-"`          // int64 in qq or string in guild
	RawMessageID  json.RawMessage `json:"message_id"` // int64 in qq or string in guild
	GroupID       int64           `json:"group_id"`
	ChannelID     string          `json:"channel_id"`
	GuildID       string          `json:"guild_id"`
	UserID        int64           `json:"user_id"`
	TinyID        string          `json:"tiny_id"`
	TargetID      int64           `json:"target_id"`
	SelfID        int64           `json:"self_id"`
	SelfTinyID    string          `json:"self_tiny_id"`
	RawMessage    string          `json:"raw_message"` // raw_message is always string
	Anonymous     interface{}     `json:"anonymous"`
	AnonymousFlag string          `json:"anonymous_flag"` // This field is deprecated and will get removed, see #11
	Event         string          `json:"event"`
	NoticeType    string          `json:"notice_type"` // This field is deprecated and will get removed, see #11
	OperatorID    int64           `json:"operator_id"` // This field is used for Notice Event
	File          *File           `json:"file"`
	RequestType   string          `json:"request_type"`
	Flag          string          `json:"flag"`
	Comment       string          `json:"comment"` // This field is used for Request Event
	Message       message.Message `json:"-"`       // Message parsed
	Sender        *User           `json:"sender"`
	NativeMessage json.RawMessage `json:"message"`
	IsToMe        bool            `json:"-"`
	RawEvent      gjson.Result    `json:"-"` // raw event
}

Event is the event emitted form cqhttp

type File

type File struct {
	ID    string `json:"id"`
	Name  string `json:"name"`
	Size  int64  `json:"size"`
	BusID int64  `json:"busid"`
}

File 文件

type FutureEvent

type FutureEvent struct {
	Type     string
	Priority int
	Rule     []Rule
	Block    bool
}

FutureEvent 是 ZeroBot 交互式的核心,用于异步获取指定事件

func NewFutureEvent

func NewFutureEvent(Type string, Priority int, Block bool, rule ...Rule) *FutureEvent

NewFutureEvent 创建一个FutureEvent, 并返回其指针

func (*FutureEvent) Next

func (n *FutureEvent) Next() <-chan *Ctx

Next 返回一个 chan 用于接收下一个指定事件

该 chan 必须接收,如需手动取消监听,请使用 Repeat 方法

func (*FutureEvent) Repeat

func (n *FutureEvent) Repeat() (recv <-chan *Ctx, cancel func())

Repeat 返回一个 chan 用于接收无穷个指定事件,和一个取消监听的函数

如果没有取消监听,将不断监听指定事件

func (*FutureEvent) Take

func (n *FutureEvent) Take(num int) <-chan *Ctx

Take 基于 Repeat 封装,返回一个 chan 接收指定数量的事件

该 chan 对象必须接收,否则将有 goroutine 泄漏,如需手动取消请使用 Repeat

type Group

type Group struct {
	ID             int64  `json:"group_id"`
	Name           string `json:"group_name"`
	MemberCount    int64  `json:"member_count"`
	MaxMemberCount int64  `json:"max_member_count"`
}

Group 群

type H

type H = Params

H 是 Params 的简称

type Handler

type Handler func(ctx *Ctx)

Handler 事件处理函数

type Matcher

type Matcher struct {
	// Temp 是否为临时Matcher,临时 Matcher 匹配一次后就会删除当前 Matcher
	Temp bool
	// Block 是否阻断后续 Matcher,为 true 时当前Matcher匹配成功后,后续Matcher不参与匹配
	Block bool
	// Break 是否退出后续匹配流程, 只有 rule 返回 false 且此值为真才会退出, 且不对 mid handler 以下的 rule 生效
	Break bool
	// NoTimeout 处理是否不设超时
	NoTimeout bool
	// Priority 优先级,越小优先级越高
	Priority int
	// Event 当前匹配到的事件
	Event *Event
	// Type 匹配的事件类型
	Type Rule
	// Rules 匹配规则
	Rules []Rule
	// Handler 处理事件的函数
	Handler Handler
	// Engine 注册 Matcher 的 Engine,Engine可为一系列 Matcher 添加通用 Rule 和 其他钩子
	Engine *Engine
}

Matcher 是 ZeroBot 匹配和处理事件的最小单元

func On

func On(typ string, rules ...Rule) *Matcher

On 添加新的指定消息类型的匹配器(默认Engine)

func OnCommand

func OnCommand(commands string, rules ...Rule) *Matcher

OnCommand 命令触发器

func OnCommandGroup

func OnCommandGroup(commands []string, rules ...Rule) *Matcher

OnCommandGroup 命令触发器组

func OnFullMatch

func OnFullMatch(src string, rules ...Rule) *Matcher

OnFullMatch 完全匹配触发器

func OnFullMatchGroup

func OnFullMatchGroup(src []string, rules ...Rule) *Matcher

OnFullMatchGroup 完全匹配触发器组

func OnKeyword

func OnKeyword(keyword string, rules ...Rule) *Matcher

OnKeyword 关键词触发器

func OnKeywordGroup

func OnKeywordGroup(keywords []string, rules ...Rule) *Matcher

OnKeywordGroup 关键词触发器组

func OnMessage

func OnMessage(rules ...Rule) *Matcher

OnMessage 消息触发器

func OnMetaEvent

func OnMetaEvent(rules ...Rule) *Matcher

OnMetaEvent 元事件触发器

func OnNotice

func OnNotice(rules ...Rule) *Matcher

OnNotice 系统提示触发器

func OnPrefix

func OnPrefix(prefix string, rules ...Rule) *Matcher

OnPrefix 前缀触发器

func OnPrefixGroup

func OnPrefixGroup(prefix []string, rules ...Rule) *Matcher

OnPrefixGroup 前缀触发器组

func OnRegex

func OnRegex(regexPattern string, rules ...Rule) *Matcher

OnRegex 正则触发器

func OnRequest

func OnRequest(rules ...Rule) *Matcher

OnRequest 请求消息触发器

func OnShell

func OnShell(command string, model interface{}, rules ...Rule) *Matcher

OnShell shell命令触发器

func OnSuffix

func OnSuffix(suffix string, rules ...Rule) *Matcher

OnSuffix 后缀触发器

func OnSuffixGroup

func OnSuffixGroup(suffix []string, rules ...Rule) *Matcher

OnSuffixGroup 后缀触发器组

func StoreMatcher

func StoreMatcher(m *Matcher) *Matcher

StoreMatcher store a matcher to matcher list.

func StoreTempMatcher

func StoreTempMatcher(m *Matcher) *Matcher

StoreTempMatcher store a matcher only triggered once.

func (*Matcher) BindEngine

func (m *Matcher) BindEngine(e *Engine) *Matcher

BindEngine bind the matcher to a engine

func (*Matcher) Delete

func (m *Matcher) Delete()

Delete remove the matcher from list

func (*Matcher) FirstPriority

func (m *Matcher) FirstPriority() *Matcher

FirstPriority 设置当前 Matcher 优先级 - 0

func (*Matcher) FutureEvent

func (m *Matcher) FutureEvent(Type string, rule ...Rule) *FutureEvent

FutureEvent 返回一个 FutureEvent 实例指针,用于获取满足 Rule 的 未来事件

func (*Matcher) Handle

func (m *Matcher) Handle(handler Handler) *Matcher

Handle 直接处理事件

func (*Matcher) SecondPriority

func (m *Matcher) SecondPriority() *Matcher

SecondPriority 设置当前 Matcher 优先级 - 1

func (*Matcher) SetBlock

func (m *Matcher) SetBlock(block bool) *Matcher

SetBlock 设置是否阻断后面的 Matcher 触发

func (*Matcher) SetPriority

func (m *Matcher) SetPriority(priority int) *Matcher

SetPriority 设置当前 Matcher 优先级

func (*Matcher) ThirdPriority

func (m *Matcher) ThirdPriority() *Matcher

ThirdPriority 设置当前 Matcher 优先级 - 2

type Message

type Message struct {
	Elements    message.Message
	MessageId   message.MessageID
	Sender      *User
	MessageType string
}

Message 消息

type Params

type Params map[string]interface{}

Params is the params of call api

type Rule

type Rule func(ctx *Ctx) bool

Rule filter the event

func CheckGroup

func CheckGroup(grpId ...int64) Rule

CheckGroup only triggered in specific group

func CheckUser

func CheckUser(userId ...int64) Rule

CheckUser only triggered by specific person

func CommandRule

func CommandRule(commands ...string) Rule

CommandRule check if the message is a command and trim the command name

func FullMatchRule

func FullMatchRule(src ...string) Rule

FullMatchRule check if src has the same copy of the message

func GroupHigherPermission

func GroupHigherPermission(gettarget func(ctx *Ctx) int64) Rule

GroupHigherPermission 群发送者权限高于 target

隐含 OnlyGroup 判断

func KeywordRule

func KeywordRule(src ...string) Rule

KeywordRule check if the message has a keyword or keywords

func PrefixRule

func PrefixRule(prefixes ...string) Rule

PrefixRule check if the message has the prefix and trim the prefix

检查消息前缀

func RegexRule

func RegexRule(regexPattern string) Rule

RegexRule check if the message can be matched by the regex pattern

func ReplyRule

func ReplyRule(messageID int64) Rule

ReplyRule check if the message is replying some message

func ShellRule

func ShellRule(cmd string, model interface{}) Rule

ShellRule 定义shell-like规则

func SuffixRule

func SuffixRule(suffixes ...string) Rule

SuffixRule check if the message has the suffix and trim the suffix

检查消息后缀

func Type

func Type(type_ string) Rule

Type check the ctx.Event's type

type State

type State map[string]interface{}

State store the context of a matcher.

type User

type User struct {
	// Private sender
	// https://github.com/botuniverse/onebot-11/blob/master/event/message.md#%E7%A7%81%E8%81%8A%E6%B6%88%E6%81%AF
	ID       int64  `json:"user_id"`
	TinyID   string `json:"tiny_id"` // TinyID 在 guild 下为 ID 的 string
	NickName string `json:"nickname"`
	Sex      string `json:"sex"` // "male"、"female"、"unknown"
	Age      int    `json:"age"`
	Area     string `json:"area"`
	// Group member
	// https://github.com/botuniverse/onebot-11/blob/master/event/message.md#%E7%BE%A4%E6%B6%88%E6%81%AF
	Card  string `json:"card"`
	Title string `json:"title"`
	Level string `json:"level"`
	Role  string `json:"role"` // "owner"、"admin"、"member"
	// Group anonymous
	AnonymousID   int64  `json:"anonymous_id" anonymous:"id"`
	AnonymousName string `json:"anonymous_name" anonymous:"name"`
	AnonymousFlag string `json:"anonymous_flag" anonymous:"flag"`
}

User is a user on QQ.

func (*User) Name

func (u *User) Name() string

Name displays a simple text version of a user.

func (*User) String

func (u *User) String() string

String displays a simple text version of a user. It is normally a user's card, but falls back to a nickname as available.

Directories

Path Synopsis
Package driver provides the default driver of zerobot
Package driver provides the default driver of zerobot
manager
Package manager provides a simple group plugin Manager.
Package manager provides a simple group plugin Manager.
kv
Package kv provides a simple wrap of goleveldb for multi bucket database
Package kv provides a simple wrap of goleveldb for multi bucket database
rate
Package rate provides a rate limiter hooker, this package is based on golang.org/x/time/rate
Package rate provides a rate limiter hooker, this package is based on golang.org/x/time/rate
utils

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL