package robot import ( "errors" "fmt" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" ) //用户模块 机器人 type ModuleRobot_Friend struct { friend *pb.DBFriend applylist []*pb.FriendBase } func (this *ModuleRobot_Friend) Init() (err error) { return } //接收到消息 func (this *ModuleRobot_Friend) Receive(robot IRobot, stype string, message proto.Message) (err error) { switch stype { case "list": resp := message.(*pb.FriendListResp) this.friend = resp.Friend break case "applylist": resp := message.(*pb.FriendApplyListResp) this.applylist = resp.List break } return } func (this *ModuleRobot_Friend) OncePipeline(robot IRobot) (err error) { var ( errdata *pb.ErrorData ) if _, errdata = robot.SendMessage("friend", "list", &pb.FriendListReq{}); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } return } //机器人执行流 func (this *ModuleRobot_Friend) DoPipeline(robot IRobot) (err error) { var ( resp protoreflect.ProtoMessage errdata *pb.ErrorData ) if _, errdata = robot.SendMessage("friend", "applylist", &pb.FriendApplyListReq{}); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } if this.applylist != nil && len(this.applylist) > 0 { friendIds := make([]string, 0) for _, v := range this.applylist { friendIds = append(friendIds, v.UserId) } if _, errdata = robot.SendMessage("friend", "agree", &pb.FriendAgreeReq{ FriendIds: friendIds, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } } else { if resp, errdata = robot.SendMessage("friend", "randlist", &pb.FriendRandlistReq{}); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } for _, v := range resp.(*pb.FriendRandlistResp).List { if _, errdata = robot.SendMessage("friend", "apply", &pb.FriendApplyReq{ FriendId: v.UserId, }); errdata != nil { err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message)) return } break } } return } //做任务 func (this *ModuleRobot_Friend) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) { return }