106 lines
2.5 KiB
Go
106 lines
2.5 KiB
Go
package protocol
|
||
|
||
import "time"
|
||
|
||
// EventType 事件类型
|
||
type EventType string
|
||
|
||
const (
|
||
// 事件类型常量
|
||
EventTypeMessage EventType = "message"
|
||
EventTypeNotice EventType = "notice"
|
||
EventTypeRequest EventType = "request"
|
||
EventTypeMeta EventType = "meta"
|
||
EventTypeMessageSent EventType = "message_sent"
|
||
EventTypeNoticeSent EventType = "notice_sent"
|
||
EventTypeRequestSent EventType = "request_sent"
|
||
)
|
||
|
||
// Event 通用事件接口
|
||
// 参考OneBot12协议设计,提供统一的事件抽象
|
||
type Event interface {
|
||
// GetType 获取事件类型
|
||
GetType() EventType
|
||
// GetDetailType 获取详细类型
|
||
GetDetailType() string
|
||
// GetSubType 获取子类型
|
||
GetSubType() string
|
||
// GetTimestamp 获取时间戳
|
||
GetTimestamp() time.Time
|
||
// GetSelfID 获取机器人自身ID
|
||
GetSelfID() string
|
||
// GetData 获取事件数据
|
||
GetData() map[string]interface{}
|
||
}
|
||
|
||
// BaseEvent 基础事件结构
|
||
type BaseEvent struct {
|
||
Type EventType `json:"type"`
|
||
DetailType string `json:"detail_type"`
|
||
SubType string `json:"sub_type,omitempty"`
|
||
Timestamp int64 `json:"timestamp"`
|
||
SelfID string `json:"self_id"`
|
||
Data map[string]interface{} `json:"data"`
|
||
}
|
||
|
||
// GetType 获取事件类型
|
||
func (e *BaseEvent) GetType() EventType {
|
||
return e.Type
|
||
}
|
||
|
||
// GetDetailType 获取详细类型
|
||
func (e *BaseEvent) GetDetailType() string {
|
||
return e.DetailType
|
||
}
|
||
|
||
// GetSubType 获取子类型
|
||
func (e *BaseEvent) GetSubType() string {
|
||
return e.SubType
|
||
}
|
||
|
||
// GetTimestamp 获取时间戳
|
||
func (e *BaseEvent) GetTimestamp() time.Time {
|
||
return time.Unix(e.Timestamp, 0)
|
||
}
|
||
|
||
// GetSelfID 获取机器人自身ID
|
||
func (e *BaseEvent) GetSelfID() string {
|
||
return e.SelfID
|
||
}
|
||
|
||
// GetData 获取事件数据
|
||
func (e *BaseEvent) GetData() map[string]interface{} {
|
||
return e.Data
|
||
}
|
||
|
||
// MessageEvent 消息事件
|
||
type MessageEvent struct {
|
||
BaseEvent
|
||
MessageID string `json:"message_id"`
|
||
Message string `json:"message"`
|
||
AltText string `json:"alt_text,omitempty"`
|
||
}
|
||
|
||
// NoticeEvent 通知事件
|
||
type NoticeEvent struct {
|
||
BaseEvent
|
||
GroupID string `json:"group_id,omitempty"`
|
||
UserID string `json:"user_id,omitempty"`
|
||
Operator string `json:"operator,omitempty"`
|
||
}
|
||
|
||
// RequestEvent 请求事件
|
||
type RequestEvent struct {
|
||
BaseEvent
|
||
RequestID string `json:"request_id"`
|
||
UserID string `json:"user_id"`
|
||
Comment string `json:"comment"`
|
||
Flag string `json:"flag"`
|
||
}
|
||
|
||
// MetaEvent 元事件
|
||
type MetaEvent struct {
|
||
BaseEvent
|
||
Status string `json:"status"`
|
||
}
|