Files
cellbot/internal/adapter/onebot11/action.go

306 lines
9.3 KiB
Go
Raw Normal View History

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,
}
}