github.com/Mrs4s/MiraiGo@v0.0.0-20240226124653-54bdd873e3fe/client/entities.go (about)

     1  package client
     2  
     3  import (
     4  	"github.com/pkg/errors"
     5  
     6  	"github.com/Mrs4s/MiraiGo/binary/jce"
     7  	"github.com/Mrs4s/MiraiGo/client/internal/auth"
     8  	"github.com/Mrs4s/MiraiGo/message"
     9  )
    10  
    11  var (
    12  	ErrAlreadyOnline  = errors.New("already online")
    13  	ErrMemberNotFound = errors.New("member not found")
    14  	ErrNotExists      = errors.New("not exists")
    15  )
    16  
    17  type (
    18  	LoginError int
    19  
    20  	QRCodeLoginState int
    21  
    22  	MemberPermission int
    23  
    24  	UserOnlineStatus int
    25  
    26  	ClientProtocol = auth.ProtocolType
    27  
    28  	LoginResponse struct {
    29  		Success bool
    30  		Code    byte
    31  		Error   LoginError
    32  
    33  		// Captcha info
    34  		CaptchaImage []byte
    35  		CaptchaSign  []byte
    36  
    37  		// Unsafe device
    38  		VerifyUrl string
    39  
    40  		// SMS needed
    41  		SMSPhone string
    42  
    43  		// other error
    44  		ErrorMessage string
    45  	}
    46  
    47  	QRCodeLoginResponse struct {
    48  		State QRCodeLoginState
    49  
    50  		ImageData []byte
    51  		Sig       []byte
    52  
    53  		LoginInfo *QRCodeLoginInfo
    54  	}
    55  
    56  	QRCodeLoginInfo struct {
    57  		tmpPwd      []byte
    58  		tmpNoPicSig []byte
    59  		tgtQR       []byte
    60  	}
    61  
    62  	FriendInfo struct {
    63  		Uin      int64
    64  		Nickname string
    65  		Remark   string
    66  		FaceId   int16
    67  		// msgSeqList *utils.Cache
    68  	}
    69  
    70  	SummaryCardInfo struct {
    71  		Uin       int64
    72  		Sex       byte
    73  		Age       uint8
    74  		Nickname  string
    75  		Level     int32
    76  		City      string
    77  		Sign      string
    78  		Mobile    string
    79  		LoginDays int64
    80  		Qid       string
    81  		VipLevel  string
    82  	}
    83  
    84  	OtherClientInfo struct {
    85  		AppId      int64
    86  		DeviceName string
    87  		DeviceKind string
    88  	}
    89  
    90  	FriendListResponse struct {
    91  		TotalCount int32
    92  		List       []*FriendInfo
    93  	}
    94  
    95  	OtherClientStatusChangedEvent struct {
    96  		Client *OtherClientInfo
    97  		Online bool
    98  	}
    99  
   100  	GroupMuteEvent struct {
   101  		GroupCode   int64
   102  		OperatorUin int64
   103  		TargetUin   int64
   104  		Time        int32
   105  	}
   106  
   107  	GroupMessageRecalledEvent struct {
   108  		GroupCode   int64
   109  		OperatorUin int64
   110  		AuthorUin   int64
   111  		MessageId   int32
   112  		Time        int32
   113  	}
   114  
   115  	FriendMessageRecalledEvent struct {
   116  		FriendUin int64
   117  		MessageId int32
   118  		Time      int64
   119  	}
   120  
   121  	TempMessageEvent struct {
   122  		Message *message.TempMessage
   123  		Session *TempSessionInfo
   124  	}
   125  
   126  	GroupLeaveEvent struct {
   127  		Group    *GroupInfo
   128  		Operator *GroupMemberInfo
   129  	}
   130  
   131  	MemberJoinGroupEvent struct {
   132  		Group  *GroupInfo
   133  		Member *GroupMemberInfo
   134  	}
   135  
   136  	GroupNameUpdatedEvent struct {
   137  		Group       *GroupInfo
   138  		OldName     string
   139  		NewName     string
   140  		OperatorUin int64
   141  	}
   142  
   143  	MemberCardUpdatedEvent struct {
   144  		Group   *GroupInfo
   145  		OldCard string
   146  		Member  *GroupMemberInfo
   147  	}
   148  
   149  	INotifyEvent interface {
   150  		From() int64
   151  		Content() string
   152  	}
   153  
   154  	MemberLeaveGroupEvent struct {
   155  		Group    *GroupInfo
   156  		Member   *GroupMemberInfo
   157  		Operator *GroupMemberInfo
   158  	}
   159  
   160  	MemberPermissionChangedEvent struct {
   161  		Group         *GroupInfo
   162  		Member        *GroupMemberInfo
   163  		OldPermission MemberPermission
   164  		NewPermission MemberPermission
   165  	}
   166  
   167  	ClientDisconnectedEvent struct {
   168  		Message string
   169  	}
   170  
   171  	NewFriendRequest struct {
   172  		RequestId     int64
   173  		Message       string
   174  		RequesterUin  int64
   175  		RequesterNick string
   176  
   177  		client *QQClient
   178  	}
   179  
   180  	ServerUpdatedEvent struct {
   181  		Servers []jce.SsoServerInfo
   182  	}
   183  
   184  	NewFriendEvent struct {
   185  		Friend *FriendInfo
   186  	}
   187  
   188  	OfflineFileEvent struct {
   189  		FileName    string
   190  		FileSize    int64
   191  		Sender      int64
   192  		DownloadUrl string
   193  	}
   194  
   195  	GroupDisbandEvent struct {
   196  		Group    *GroupInfo
   197  		Time     int64
   198  		Operator *GroupMemberInfo
   199  	}
   200  
   201  	DeleteFriendEvent struct {
   202  		Uin      int64
   203  		Nickname string
   204  	}
   205  
   206  	// GroupDigest 群精华消息
   207  	GroupDigest struct {
   208  		GroupCode         int64  `json:"group_code,string"`
   209  		MessageID         uint32 `json:"msg_seq"`
   210  		InternalMessageID uint32 `json:"msg_random"`
   211  		SenderUin         int64  `json:"sender_uin,string"`
   212  		SenderNick        string `json:"sender_nick"`
   213  		SenderTime        int64  `json:"sender_time"`
   214  		AddDigestUin      int64  `json:"add_digest_uin,string"`
   215  		AddDigestNick     string `json:"add_digest_nick"`
   216  		AddDigestTime     int64  `json:"add_digest_time"`
   217  	}
   218  
   219  	// GroupDigestEvent 群精华消息 不知道tx为什么搞两种名字
   220  	GroupDigestEvent struct {
   221  		GroupCode         int64
   222  		MessageID         int32
   223  		InternalMessageID int32
   224  		OperationType     int32 // 1 -> 设置精华消息, 2 -> 移除精华消息
   225  		OperateTime       uint32
   226  		SenderUin         int64
   227  		OperatorUin       int64
   228  		SenderNick        string
   229  		OperatorNick      string
   230  	}
   231  
   232  	GuildMessageReactionsUpdatedEvent struct {
   233  		OperatorId uint64 // OperatorId 操作者TinyId, 删除贴表情的事件下不会有值
   234  		EmojiId    int32  // EmojiId 被贴的表情, 只有自身消息被贴表情才会有值
   235  		GuildId    uint64
   236  		ChannelId  uint64
   237  		MessageId  uint64
   238  		// MessageSenderUin int64 // MessageSenderUin 被贴表情的消息发送者QQ号
   239  		CurrentReactions []*message.GuildMessageEmojiReaction
   240  	}
   241  
   242  	GuildChannelUpdatedEvent struct {
   243  		OperatorId     uint64
   244  		GuildId        uint64
   245  		ChannelId      uint64
   246  		OldChannelInfo *ChannelInfo
   247  		NewChannelInfo *ChannelInfo
   248  	}
   249  
   250  	GuildMessageRecalledEvent struct {
   251  		OperatorId uint64
   252  		GuildId    uint64
   253  		ChannelId  uint64
   254  		MessageId  uint64
   255  		RecallTime int64
   256  	}
   257  
   258  	GuildChannelOperationEvent struct {
   259  		OperatorId  uint64
   260  		GuildId     uint64
   261  		ChannelInfo *ChannelInfo
   262  	}
   263  
   264  	MemberJoinGuildEvent struct {
   265  		Guild  *GuildInfo
   266  		Member *GuildMemberInfo
   267  	}
   268  
   269  	OcrResponse struct {
   270  		Texts    []*TextDetection `json:"texts"`
   271  		Language string           `json:"language"`
   272  	}
   273  
   274  	TextDetection struct {
   275  		Text        string        `json:"text"`
   276  		Confidence  int32         `json:"confidence"`
   277  		Coordinates []*Coordinate `json:"coordinates"`
   278  	}
   279  
   280  	Coordinate struct {
   281  		X int32 `json:"x"`
   282  		Y int32 `json:"y"`
   283  	}
   284  
   285  	AtAllRemainInfo struct {
   286  		CanAtAll                 bool   `json:"can_at_all"`
   287  		RemainAtAllCountForGroup uint32 `json:"remain_at_all_count_for_group"`
   288  		RemainAtAllCountForUin   uint32 `json:"remain_at_all_count_for_uin"`
   289  	}
   290  
   291  	groupMemberListResponse struct {
   292  		NextUin int64
   293  		list    []*GroupMemberInfo
   294  	}
   295  
   296  	groupMessageReceiptEvent struct {
   297  		Rand int32
   298  		Seq  int32
   299  		Msg  *message.GroupMessage
   300  	}
   301  
   302  	bigDataSessionInfo struct {
   303  		SigSession []byte
   304  		SessionKey []byte
   305  	}
   306  
   307  	// unit is an alias for struct{}, like `()` in rust
   308  	unit = struct{}
   309  )
   310  
   311  //go:generate stringer -type=LoginError
   312  const (
   313  	NeedCaptcha            LoginError = 1
   314  	OtherLoginError        LoginError = 3
   315  	UnsafeDeviceError      LoginError = 4
   316  	SMSNeededError         LoginError = 5
   317  	TooManySMSRequestError LoginError = 6
   318  	SMSOrVerifyNeededError LoginError = 7
   319  	SliderNeededError      LoginError = 8
   320  	UnknownLoginError      LoginError = -1
   321  
   322  	QRCodeImageFetch        QRCodeLoginState = 1
   323  	QRCodeWaitingForScan    QRCodeLoginState = 2
   324  	QRCodeWaitingForConfirm QRCodeLoginState = 3
   325  	QRCodeTimeout           QRCodeLoginState = 4
   326  	QRCodeConfirmed         QRCodeLoginState = 5
   327  	QRCodeCanceled          QRCodeLoginState = 6
   328  
   329  	StatusOnline        UserOnlineStatus = 11   // 在线
   330  	StatusOffline       UserOnlineStatus = 21   // 离线
   331  	StatusAway          UserOnlineStatus = 31   // 离开
   332  	StatusInvisible     UserOnlineStatus = 41   // 隐身
   333  	StatusBusy          UserOnlineStatus = 50   // 忙
   334  	StatusBattery       UserOnlineStatus = 1000 // 当前电量
   335  	StatusListening     UserOnlineStatus = 1028 // 听歌中
   336  	StatusConstellation UserOnlineStatus = 1040 // 星座运势
   337  	StatusWeather       UserOnlineStatus = 1030 // 今日天气
   338  	StatusMeetSpring    UserOnlineStatus = 1069 // 遇见春天
   339  	StatusTimi          UserOnlineStatus = 1027 // Timi中
   340  	StatusEatChicken    UserOnlineStatus = 1064 // 吃鸡中
   341  	StatusLoving        UserOnlineStatus = 1051 // 恋爱中
   342  	StatusWangWang      UserOnlineStatus = 1053 // 汪汪汪
   343  	StatusCookedRice    UserOnlineStatus = 1019 // 干饭中
   344  	StatusStudy         UserOnlineStatus = 1018 // 学习中
   345  	StatusStayUp        UserOnlineStatus = 1032 // 熬夜中
   346  	StatusPlayBall      UserOnlineStatus = 1050 // 打球中
   347  	StatusSignal        UserOnlineStatus = 1011 // 信号弱
   348  	StatusStudyOnline   UserOnlineStatus = 1024 // 在线学习
   349  	StatusGaming        UserOnlineStatus = 1017 // 游戏中
   350  	StatusVacationing   UserOnlineStatus = 1022 // 度假中
   351  	StatusWatchingTV    UserOnlineStatus = 1021 // 追剧中
   352  	StatusFitness       UserOnlineStatus = 1020 // 健身中
   353  
   354  	Owner         MemberPermission = 1
   355  	Administrator MemberPermission = 2
   356  	Member        MemberPermission = 3
   357  
   358  	Unset        = auth.Unset
   359  	AndroidPhone = auth.AndroidPhone
   360  	AndroidWatch = auth.AndroidWatch
   361  	MacOS        = auth.MacOS
   362  	QiDian       = auth.QiDian
   363  	IPad         = auth.IPad
   364  	AndroidPad   = auth.AndroidPad
   365  )
   366  
   367  func (r *UserJoinGroupRequest) Accept() {
   368  	r.client.SolveGroupJoinRequest(r, true, false, "")
   369  }
   370  
   371  func (r *UserJoinGroupRequest) Reject(block bool, reason string) {
   372  	r.client.SolveGroupJoinRequest(r, false, block, reason)
   373  }
   374  
   375  func (r *GroupInvitedRequest) Accept() {
   376  	r.client.SolveGroupJoinRequest(r, true, false, "")
   377  }
   378  
   379  func (r *GroupInvitedRequest) Reject(block bool, reason string) {
   380  	r.client.SolveGroupJoinRequest(r, false, block, reason)
   381  }
   382  
   383  func (r *NewFriendRequest) Accept() {
   384  	r.client.SolveFriendRequest(r, true)
   385  }
   386  
   387  func (r *NewFriendRequest) Reject() {
   388  	r.client.SolveFriendRequest(r, false)
   389  }