Files
cellbot/internal/adapter/onebot11/action.go
lafay 64cd81b7f1 feat: enhance event handling and add scheduling capabilities
- Introduced a new scheduler to manage timed tasks within the event dispatcher.
- Updated the dispatcher to support the new scheduler, allowing for improved event processing.
- Enhanced action serialization in the OneBot11 adapter to convert message chains to the appropriate format.
- Added new dependencies for cron scheduling and other indirect packages in go.mod and go.sum.
- Improved logging for event publishing and handler matching, providing better insights during execution.
- Refactored plugin loading to include scheduled job management.
2026-01-05 04:33:30 +08:00

307 lines
9.3 KiB
Go
Raw 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.

package onebot11
import (
"cellbot/internal/protocol"
)
// OneBot11 API动作常量
const (
ActionSendPrivateMsg = "send_private_msg"
ActionSendGroupMsg = "send_group_msg"
ActionSendMsg = "send_msg"
ActionDeleteMsg = "delete_msg"
ActionGetMsg = "get_msg"
ActionGetForwardMsg = "get_forward_msg"
ActionSendLike = "send_like"
ActionSetGroupKick = "set_group_kick"
ActionSetGroupBan = "set_group_ban"
ActionSetGroupAnonymousBan = "set_group_anonymous_ban"
ActionSetGroupWholeBan = "set_group_whole_ban"
ActionSetGroupAdmin = "set_group_admin"
ActionSetGroupAnonymous = "set_group_anonymous"
ActionSetGroupCard = "set_group_card"
ActionSetGroupName = "set_group_name"
ActionSetGroupLeave = "set_group_leave"
ActionSetGroupSpecialTitle = "set_group_special_title"
ActionSetFriendAddRequest = "set_friend_add_request"
ActionSetGroupAddRequest = "set_group_add_request"
ActionGetLoginInfo = "get_login_info"
ActionGetStrangerInfo = "get_stranger_info"
ActionGetFriendList = "get_friend_list"
ActionGetGroupInfo = "get_group_info"
ActionGetGroupList = "get_group_list"
ActionGetGroupMemberInfo = "get_group_member_info"
ActionGetGroupMemberList = "get_group_member_list"
ActionGetGroupHonorInfo = "get_group_honor_info"
ActionGetCookies = "get_cookies"
ActionGetCsrfToken = "get_csrf_token"
ActionGetCredentials = "get_credentials"
ActionGetRecord = "get_record"
ActionGetImage = "get_image"
ActionCanSendImage = "can_send_image"
ActionCanSendRecord = "can_send_record"
ActionGetStatus = "get_status"
ActionGetVersionInfo = "get_version_info"
ActionSetRestart = "set_restart"
ActionCleanCache = "clean_cache"
)
// ConvertAction 将通用Action转换为OneBot11 Action
func ConvertAction(action protocol.Action) string {
switch action.GetType() {
case protocol.ActionTypeSendPrivateMessage:
return ActionSendPrivateMsg
case protocol.ActionTypeSendGroupMessage:
return ActionSendGroupMsg
case protocol.ActionTypeDeleteMessage:
return ActionDeleteMsg
case protocol.ActionTypeGetUserInfo:
return ActionGetStrangerInfo
case protocol.ActionTypeGetFriendList:
return ActionGetFriendList
case protocol.ActionTypeGetGroupInfo:
return ActionGetGroupInfo
case protocol.ActionTypeGetGroupMemberList:
return ActionGetGroupMemberList
case protocol.ActionTypeSetGroupKick:
return ActionSetGroupKick
case protocol.ActionTypeSetGroupBan:
return ActionSetGroupBan
case protocol.ActionTypeSetGroupAdmin:
return ActionSetGroupAdmin
case protocol.ActionTypeSetGroupWholeBan:
return ActionSetGroupWholeBan
case protocol.ActionTypeGetStatus:
return ActionGetStatus
case protocol.ActionTypeGetVersion:
return ActionGetVersionInfo
default:
return string(action.GetType())
}
}
// SendPrivateMessageAction 发送私聊消息动作
type SendPrivateMessageAction struct {
UserID int64 `json:"user_id"`
Message interface{} `json:"message"`
AutoEscape bool `json:"auto_escape,omitempty"`
}
// SendGroupMessageAction 发送群消息动作
type SendGroupMessageAction struct {
GroupID int64 `json:"group_id"`
Message interface{} `json:"message"`
AutoEscape bool `json:"auto_escape,omitempty"`
}
// DeleteMessageAction 撤回消息动作
type DeleteMessageAction struct {
MessageID int32 `json:"message_id"`
}
// GetMessageAction 获取消息动作
type GetMessageAction struct {
MessageID int32 `json:"message_id"`
}
// SendLikeAction 发送好友赞动作
type SendLikeAction struct {
UserID int64 `json:"user_id"`
Times int `json:"times,omitempty"`
}
// SetGroupKickAction 群组踢人动作
type SetGroupKickAction struct {
GroupID int64 `json:"group_id"`
UserID int64 `json:"user_id"`
RejectAddRequest bool `json:"reject_add_request,omitempty"`
}
// SetGroupBanAction 群组禁言动作
type SetGroupBanAction struct {
GroupID int64 `json:"group_id"`
UserID int64 `json:"user_id"`
Duration int64 `json:"duration,omitempty"` // 禁言时长单位秒0表示取消禁言
}
// SetGroupWholeBanAction 群组全员禁言动作
type SetGroupWholeBanAction struct {
GroupID int64 `json:"group_id"`
Enable bool `json:"enable,omitempty"`
}
// SetGroupAdminAction 设置群管理员动作
type SetGroupAdminAction struct {
GroupID int64 `json:"group_id"`
UserID int64 `json:"user_id"`
Enable bool `json:"enable,omitempty"`
}
// SetGroupCardAction 设置群名片动作
type SetGroupCardAction struct {
GroupID int64 `json:"group_id"`
UserID int64 `json:"user_id"`
Card string `json:"card,omitempty"`
}
// SetGroupNameAction 设置群名动作
type SetGroupNameAction struct {
GroupID int64 `json:"group_id"`
GroupName string `json:"group_name"`
}
// SetGroupLeaveAction 退出群组动作
type SetGroupLeaveAction struct {
GroupID int64 `json:"group_id"`
IsDismiss bool `json:"is_dismiss,omitempty"`
}
// SetFriendAddRequestAction 处理加好友请求动作
type SetFriendAddRequestAction struct {
Flag string `json:"flag"`
Approve bool `json:"approve,omitempty"`
Remark string `json:"remark,omitempty"`
}
// SetGroupAddRequestAction 处理加群请求动作
type SetGroupAddRequestAction struct {
Flag string `json:"flag"`
SubType string `json:"sub_type,omitempty"` // add 或 invite
Approve bool `json:"approve,omitempty"`
Reason string `json:"reason,omitempty"`
}
// GetStrangerInfoAction 获取陌生人信息动作
type GetStrangerInfoAction struct {
UserID int64 `json:"user_id"`
NoCache bool `json:"no_cache,omitempty"`
}
// GetGroupInfoAction 获取群信息动作
type GetGroupInfoAction struct {
GroupID int64 `json:"group_id"`
NoCache bool `json:"no_cache,omitempty"`
}
// GetGroupMemberInfoAction 获取群成员信息动作
type GetGroupMemberInfoAction struct {
GroupID int64 `json:"group_id"`
UserID int64 `json:"user_id"`
NoCache bool `json:"no_cache,omitempty"`
}
// GetGroupMemberListAction 获取群成员列表动作
type GetGroupMemberListAction struct {
GroupID int64 `json:"group_id"`
}
// GetGroupHonorInfoAction 获取群荣誉信息动作
type GetGroupHonorInfoAction struct {
GroupID int64 `json:"group_id"`
Type string `json:"type"` // talkative, performer, legend, strong_newbie, emotion, all
}
// GetCookiesAction 获取Cookies动作
type GetCookiesAction struct {
Domain string `json:"domain,omitempty"`
}
// GetRecordAction 获取语音动作
type GetRecordAction struct {
File string `json:"file"`
OutFormat string `json:"out_format"`
}
// GetImageAction 获取图片动作
type GetImageAction struct {
File string `json:"file"`
}
// SetRestartAction 重启OneBot实现动作
type SetRestartAction struct {
Delay int `json:"delay,omitempty"` // 延迟毫秒数
}
// ActionResponse API响应
type ActionResponse struct {
Status string `json:"status"`
RetCode int `json:"retcode"`
Data map[string]interface{} `json:"data,omitempty"`
Echo string `json:"echo,omitempty"`
Message string `json:"message,omitempty"`
Wording string `json:"wording,omitempty"`
}
// 响应状态码常量
const (
RetCodeOK = 0
RetCodeAsyncStarted = 1 // 异步操作已开始
RetCodeBadRequest = 1400 // 请求格式错误
RetCodeUnauthorized = 1401 // 未授权
RetCodeForbidden = 1403 // 禁止访问
RetCodeNotFound = 1404 // 接口不存在
RetCodeMethodNotAllowed = 1405 // 请求方法不支持
RetCodeInternalError = 1500 // 内部错误
)
// BuildActionRequest 构建动作请求
func BuildActionRequest(action string, params map[string]interface{}, echo string) *OB11Action {
return &OB11Action{
Action: action,
Params: params,
Echo: echo,
}
}
// BuildSendPrivateMsg 构建发送私聊消息请求
func BuildSendPrivateMsg(userID int64, message interface{}, autoEscape bool) map[string]interface{} {
return map[string]interface{}{
"user_id": userID,
"message": message,
"auto_escape": autoEscape,
}
}
// BuildSendGroupMsg 构建发送群消息请求
func BuildSendGroupMsg(groupID int64, message interface{}, autoEscape bool) map[string]interface{} {
return map[string]interface{}{
"group_id": groupID,
"message": message,
"auto_escape": autoEscape,
}
}
// BuildDeleteMsg 构建撤回消息请求
func BuildDeleteMsg(messageID int32) map[string]interface{} {
return map[string]interface{}{
"message_id": messageID,
}
}
// BuildSetGroupBan 构建群组禁言请求
func BuildSetGroupBan(groupID, userID int64, duration int64) map[string]interface{} {
return map[string]interface{}{
"group_id": groupID,
"user_id": userID,
"duration": duration,
}
}
// BuildSetGroupKick 构建群组踢人请求
func BuildSetGroupKick(groupID, userID int64, rejectAddRequest bool) map[string]interface{} {
return map[string]interface{}{
"group_id": groupID,
"user_id": userID,
"reject_add_request": rejectAddRequest,
}
}
// BuildSetGroupCard 构建设置群名片请求
func BuildSetGroupCard(groupID, userID int64, card string) map[string]interface{} {
return map[string]interface{}{
"group_id": groupID,
"user_id": userID,
"card": card,
}
}