package action import ( "encoding/json" "fmt" "log" "strconv" "sync" "time" "git.lxtend.com/qqbot/message" "git.lxtend.com/qqbot/model" "github.com/gorilla/websocket" ) func init() { } var ActionManager = actionManager{} type actionManager struct { botConn *websocket.Conn sendMtx sync.Mutex } func (am *actionManager) Started() bool { return am.botConn != nil } func (am *actionManager) SetConn(conn *websocket.Conn) { am.botConn = conn } func (am *actionManager) SendAction(action string) error { return am.botConn.WriteMessage(websocket.TextMessage, []byte(action)) } func (am *actionManager) SendMsg(reply *model.Reply) error { am.sendMtx.Lock() defer am.sendMtx.Unlock() if reply.ReferOriginMsg { replyMsg := message.ReplyMessage{ Type: "reply", Data: message.ReplyMessageData{ ID: int(reply.FromMsg.OriginMsgId), }, } reply.ReplyMsg = fmt.Sprintf("%s%s", replyMsg.ToCQString(), reply.ReplyMsg) } userID := strconv.FormatInt(reply.FromMsg.UserId, 10) if reply.FromMsg.UserId == 0 { userID = "" } groupID := strconv.FormatInt(reply.FromMsg.GroupInfo.GroupId, 10) if reply.FromMsg.GroupInfo.GroupId == 0 { groupID = "" } sendPkg := model.GenSendPkg(userID, groupID, reply.ReplyMsg, false, false) sendPkgJson, err := json.Marshal(sendPkg) if err != nil { return err } for !am.Started() { time.Sleep(100 * time.Millisecond) } if err = am.botConn.WriteMessage(websocket.TextMessage, sendPkgJson); err != nil { return err } return nil } func (am *actionManager) SendForward(reply *model.Reply) error { am.sendMtx.Lock() defer am.sendMtx.Unlock() userID := strconv.FormatInt(reply.FromMsg.UserId, 10) if reply.FromMsg.UserId == 0 { userID = "" } groupID := strconv.FormatInt(reply.FromMsg.GroupInfo.GroupId, 10) if reply.FromMsg.GroupInfo.GroupId == 0 { groupID = "" } sendPkg := model.GenSendPkg(userID, groupID, reply.ReplyMsg, false, true) sendPkgJson, err := json.Marshal(sendPkg) log.Println(string(sendPkgJson)) if err != nil { return err } if err = am.botConn.WriteMessage(websocket.TextMessage, sendPkgJson); err != nil { return err } return nil } func (am *actionManager) DrawbackMsg(msgId int32) error { withDrawPkg := model.GenDrawbackPkg(msgId) withDrawPkgJson, err := json.Marshal(withDrawPkg) if err != nil { return err } if err = am.botConn.WriteMessage(websocket.TextMessage, withDrawPkgJson); err != nil { return err } return nil } func (am *actionManager) GetGroupMemberList(groupId int64) ([]int64, error) { askGroupMemberListPkg := model.GenGetGroupMemberListPkg(groupId) askGroupMemberListPkgJson, err := json.Marshal(askGroupMemberListPkg) if err != nil { return nil, err } if err = am.botConn.WriteMessage(websocket.TextMessage, askGroupMemberListPkgJson); err != nil { return nil, err } return nil, nil //todo }