From 406b0f4be0112afc4c1f14d494c989131f329d37 Mon Sep 17 00:00:00 2001 From: eatmoreapple Date: Tue, 14 Dec 2021 12:40:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96stringer=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- appmessagetype_string.go | 62 ---------------- base_response.go | 27 +++++++ generate.go | 4 + global.go | 8 +- items.go | 95 ++---------------------- messagetype_string.go | 55 -------------- stringer.go | 153 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 194 insertions(+), 210 deletions(-) delete mode 100644 appmessagetype_string.go create mode 100644 base_response.go create mode 100644 generate.go delete mode 100644 messagetype_string.go create mode 100644 stringer.go diff --git a/appmessagetype_string.go b/appmessagetype_string.go deleted file mode 100644 index 9883419..0000000 --- a/appmessagetype_string.go +++ /dev/null @@ -1,62 +0,0 @@ -// Code generated by "stringer -type=AppMessageType -linecomment=true"; DO NOT EDIT. - -package openwechat - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[AppMsgTypeText-1] - _ = x[AppMsgTypeImg-2] - _ = x[AppMsgTypeAudio-3] - _ = x[AppMsgTypeVideo-4] - _ = x[AppMsgTypeUrl-5] - _ = x[AppMsgTypeAttach-6] - _ = x[AppMsgTypeOpen-7] - _ = x[AppMsgTypeEmoji-8] - _ = x[AppMsgTypeVoiceRemind-9] - _ = x[AppMsgTypeScanGood-10] - _ = x[AppMsgTypeGood-13] - _ = x[AppMsgTypeEmotion-15] - _ = x[AppMsgTypeCardTicket-16] - _ = x[AppMsgTypeRealtimeShareLocation-17] - _ = x[AppMsgTypeTransfers-2000] - _ = x[AppMsgTypeRedEnvelopes-2001] - _ = x[AppMsgTypeReaderType-100001] -} - -const ( - _AppMessageType_name_0 = "文本消息图片消息语音消息视频消息文章消息附件消息Open表情消息VoiceRemindScanGood" - _AppMessageType_name_1 = "Good" - _AppMessageType_name_2 = "Emotion名片消息地理位置消息" - _AppMessageType_name_3 = "转账消息红包消息" - _AppMessageType_name_4 = "自定义的消息" -) - -var ( - _AppMessageType_index_0 = [...]uint8{0, 12, 24, 36, 48, 60, 72, 76, 88, 99, 107} - _AppMessageType_index_2 = [...]uint8{0, 7, 19, 37} - _AppMessageType_index_3 = [...]uint8{0, 12, 24} -) - -func (i AppMessageType) String() string { - switch { - case 1 <= i && i <= 10: - i -= 1 - return _AppMessageType_name_0[_AppMessageType_index_0[i]:_AppMessageType_index_0[i+1]] - case i == 13: - return _AppMessageType_name_1 - case 15 <= i && i <= 17: - i -= 15 - return _AppMessageType_name_2[_AppMessageType_index_2[i]:_AppMessageType_index_2[i+1]] - case 2000 <= i && i <= 2001: - i -= 2000 - return _AppMessageType_name_3[_AppMessageType_index_3[i]:_AppMessageType_index_3[i+1]] - case i == 100001: - return _AppMessageType_name_4 - default: - return "AppMessageType(" + strconv.FormatInt(int64(i), 10) + ")" - } -} diff --git a/base_response.go b/base_response.go new file mode 100644 index 0000000..e6ff32b --- /dev/null +++ b/base_response.go @@ -0,0 +1,27 @@ +package openwechat + +type Ret int + +const ( + ticketError Ret = -14 // ticket error + paramError Ret = 1 // param error + failedLoginWarn Ret = 1100 // failed login warn + failedLoginCheck Ret = 1101 // failed login check + cookieInvalid Ret = 1102 // cookie invalid + loginEnvAbnormality Ret = 1203 // login environmental abnormality + optTooOften Ret = 1205 // operate too often +) + +// BaseResponse 大部分返回对象都携带该信息 +type BaseResponse struct { + Ret Ret + ErrMsg string +} + +func (b BaseResponse) Ok() bool { + return b.Ret == 0 +} + +func (b BaseResponse) Error() string { + return b.Ret.String() +} diff --git a/generate.go b/generate.go new file mode 100644 index 0000000..c863dca --- /dev/null +++ b/generate.go @@ -0,0 +1,4 @@ +package openwechat + + +//go:generate stringer -type=MessageType,Ret,AppMessageType -linecomment=true -output=stringer.go diff --git a/global.go b/global.go index 5851a93..55c0058 100644 --- a/global.go +++ b/global.go @@ -38,16 +38,13 @@ const ( AppMessage = 6 ) -// MessageType以Go惯用形式定义了PC微信所有的官方消息类型。 +// MessageType 以Go惯用形式定义了PC微信所有的官方消息类型。 // 详见 message_test.go type MessageType int -// AppMessageType以Go惯用形式定义了PC微信所有的官方App消息类型。 +// AppMessageType 以Go惯用形式定义了PC微信所有的官方App消息类型。 type AppMessageType int -//go:generate stringer -type=MessageType -linecomment=true -//go:generate stringer -type=AppMessageType -linecomment=true - // https://res.wx.qq.com/a/wx_fed/webwx/res/static/js/index_c7d281c.js // MSGTYPE_TEXT // MSGTYPE_IMAGE @@ -103,7 +100,6 @@ const ( AppMsgTypeTransfers AppMessageType = 2000 // 转账消息 AppMsgTypeRedEnvelopes AppMessageType = 2001 // 红包消息 AppMsgTypeReaderType AppMessageType = 100001 //自定义的消息 - ) // 登录状态 diff --git a/items.go b/items.go index 86c1d59..4f005ec 100644 --- a/items.go +++ b/items.go @@ -1,8 +1,7 @@ package openwechat import ( - "errors" - "fmt" + "strconv" ) /* @@ -12,7 +11,7 @@ import ( // LoginInfo 登录信息 type LoginInfo struct { Ret int `xml:"ret"` - WxUin int64 `xml:"wxuin"` + WxUin int64 `xml:"wxuin"` IsGrayScale int `xml:"isgrayscale"` Message string `xml:"message"` SKey string `xml:"skey"` @@ -20,28 +19,6 @@ type LoginInfo struct { PassTicket string `xml:"pass_ticket"` } -// errors -const ( - errParamError = "param error" - errTicketError = "ticket error" - errLoginEnvError = "login env error" - errLoginFailedWarn = "failed login warn" - errLoginFailedCheck = "failed login check" - errCookieInvalidError = "cookie invalid error" - errOptTooOften = "opt too often" -) - -var ( - ErrParamError = errors.New(errParamError) - ErrTicketError = errors.New(errTicketError) - ErrLoginEnvError = errors.New(errLoginEnvError) - ErrLoginFailedWarn = errors.New(errLoginFailedWarn) - ErrLoginFailedCheck = errors.New(errLoginFailedCheck) - ErrCookieInvalidError = errors.New(errCookieInvalidError) - ErrOptTooOften = errors.New(errOptTooOften) - ErrBaseResponseError error -) - func (l LoginInfo) Ok() bool { return l.Ret == 0 } @@ -57,47 +34,6 @@ type BaseRequest struct { Sid, Skey, DeviceID string } -// BaseResponse 大部分返回对象都携带该信息 -type BaseResponse struct { - Ret int - ErrMsg string -} - -func (b BaseResponse) Ok() bool { - return b.Ret == 0 -} - -func (b BaseResponse) Error() string { - if err := getResponseErrorWithRetCode(b.Ret); err != nil { - return err.Error() - } - return "" -} - -func getResponseErrorWithRetCode(code int) error { - switch code { - case 0: - return nil - case 1: - return ErrParamError - case -14: - return ErrTicketError - case 1100: - return ErrLoginFailedWarn - case 1101: - return ErrLoginFailedCheck - case 1102: - return ErrCookieInvalidError - case 1203: - return ErrLoginEnvError - case 1205: - return ErrOptTooOften - default: - ErrBaseResponseError = fmt.Errorf("base response ret code %d", code) - return ErrBaseResponseError - } -} - type SyncKey struct { Count int List []struct{ Key, Val int64 } @@ -156,36 +92,21 @@ type SyncCheckResponse struct { Selector string } -func (s *SyncCheckResponse) Success() bool { +func (s SyncCheckResponse) Success() bool { return s.RetCode == "0" } -func (s *SyncCheckResponse) NorMal() bool { +func (s SyncCheckResponse) NorMal() bool { return s.Success() && s.Selector == "0" } // 实现error接口 -func (s *SyncCheckResponse) Error() string { - switch s.RetCode { - case "0": +func (s SyncCheckResponse) Error() string { + i, err := strconv.ParseInt(s.RetCode, 16, 10) + if err != nil { return "" - case "1": - return errParamError - case "-14": - return errTicketError - case "1100": - return errLoginFailedWarn - case "1101": - return errLoginFailedCheck - case "1102": - return errCookieInvalidError - case "1203": - return errLoginEnvError - case "1205": - return errOptTooOften - default: - return fmt.Sprintf("sync check response error code %s", s.RetCode) } + return Ret(i).String() } type WebWxSyncResponse struct { diff --git a/messagetype_string.go b/messagetype_string.go deleted file mode 100644 index 0d44c33..0000000 --- a/messagetype_string.go +++ /dev/null @@ -1,55 +0,0 @@ -// Code generated by "stringer -type=MessageType -linecomment=true"; DO NOT EDIT. - -package openwechat - -import "strconv" - -func _() { - // An "invalid array index" compiler error signifies that the constant values have changed. - // Re-run the stringer command to generate them again. - var x [1]struct{} - _ = x[MsgTypeText-1] - _ = x[MsgTypeImage-3] - _ = x[MsgTypeVoice-34] - _ = x[MsgTypeVerify-37] - _ = x[MsgTypePossibleFriend-40] - _ = x[MsgTypeShareCard-42] - _ = x[MsgTypeVideo-43] - _ = x[MsgTypeEmoticon-47] - _ = x[MsgTypeLocation-48] - _ = x[MsgTypeApp-49] - _ = x[MsgTypeVoip-50] - _ = x[MsgTypeVoipNotify-52] - _ = x[MsgTypeVoipInvite-53] - _ = x[MsgTypeMicroVideo-62] - _ = x[MsgTypeSys-10000] - _ = x[MsgTypeRecalled-10002] -} - -const _MessageType_name = "文本消息图片消息语音消息认证消息好友推荐消息名片消息视频消息表情消息地理位置消息APP消息VOIP消息VOIP结束消息VOIP邀请小视频消息系统消息消息撤回" - -var _MessageType_map = map[MessageType]string{ - 1: _MessageType_name[0:12], - 3: _MessageType_name[12:24], - 34: _MessageType_name[24:36], - 37: _MessageType_name[36:48], - 40: _MessageType_name[48:66], - 42: _MessageType_name[66:78], - 43: _MessageType_name[78:90], - 47: _MessageType_name[90:102], - 48: _MessageType_name[102:120], - 49: _MessageType_name[120:129], - 50: _MessageType_name[129:139], - 52: _MessageType_name[139:155], - 53: _MessageType_name[155:165], - 62: _MessageType_name[165:180], - 10000: _MessageType_name[180:192], - 10002: _MessageType_name[192:204], -} - -func (i MessageType) String() string { - if str, ok := _MessageType_map[i]; ok { - return str - } - return "MessageType(" + strconv.FormatInt(int64(i), 10) + ")" -} diff --git a/stringer.go b/stringer.go new file mode 100644 index 0000000..80a7c80 --- /dev/null +++ b/stringer.go @@ -0,0 +1,153 @@ +// Code generated by "stringer -type=MessageType,Ret,AppMessageType -linecomment=true -output=stringer.go"; DO NOT EDIT. + +package openwechat + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[MsgTypeText-1] + _ = x[MsgTypeImage-3] + _ = x[MsgTypeVoice-34] + _ = x[MsgTypeVerify-37] + _ = x[MsgTypePossibleFriend-40] + _ = x[MsgTypeShareCard-42] + _ = x[MsgTypeVideo-43] + _ = x[MsgTypeEmoticon-47] + _ = x[MsgTypeLocation-48] + _ = x[MsgTypeApp-49] + _ = x[MsgTypeVoip-50] + _ = x[MsgTypeVoipNotify-52] + _ = x[MsgTypeVoipInvite-53] + _ = x[MsgTypeMicroVideo-62] + _ = x[MsgTypeSys-10000] + _ = x[MsgTypeRecalled-10002] +} + +const _MessageType_name = "文本消息图片消息语音消息认证消息好友推荐消息名片消息视频消息表情消息地理位置消息APP消息VOIP消息VOIP结束消息VOIP邀请小视频消息系统消息消息撤回" + +var _MessageType_map = map[MessageType]string{ + 1: _MessageType_name[0:12], + 3: _MessageType_name[12:24], + 34: _MessageType_name[24:36], + 37: _MessageType_name[36:48], + 40: _MessageType_name[48:66], + 42: _MessageType_name[66:78], + 43: _MessageType_name[78:90], + 47: _MessageType_name[90:102], + 48: _MessageType_name[102:120], + 49: _MessageType_name[120:129], + 50: _MessageType_name[129:139], + 52: _MessageType_name[139:155], + 53: _MessageType_name[155:165], + 62: _MessageType_name[165:180], + 10000: _MessageType_name[180:192], + 10002: _MessageType_name[192:204], +} + +func (i MessageType) String() string { + if str, ok := _MessageType_map[i]; ok { + return str + } + return "MessageType(" + strconv.FormatInt(int64(i), 10) + ")" +} +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[ticketError - -14] + _ = x[paramError-1] + _ = x[failedLoginWarn-1100] + _ = x[failedLoginCheck-1101] + _ = x[cookieInvalid-1102] + _ = x[loginEnvAbnormality-1203] + _ = x[optTooOften-1205] +} + +const ( + _Ret_name_0 = "ticket error" + _Ret_name_1 = "param error" + _Ret_name_2 = "failed login warnfailed login Checkcookie invalid" + _Ret_name_3 = "login environmental abnormality" + _Ret_name_4 = "operate too often" +) + +var ( + _Ret_index_2 = [...]uint8{0, 17, 35, 49} +) + +func (r Ret) String() string { + switch { + case r == -14: + return _Ret_name_0 + case r == 1: + return _Ret_name_1 + case 1100 <= r && r <= 1102: + r -= 1100 + return _Ret_name_2[_Ret_index_2[r]:_Ret_index_2[r+1]] + case r == 1203: + return _Ret_name_3 + case r == 1205: + return _Ret_name_4 + default: + return "Ret(" + strconv.FormatInt(int64(r), 10) + ")" + } +} +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[AppMsgTypeText-1] + _ = x[AppMsgTypeImg-2] + _ = x[AppMsgTypeAudio-3] + _ = x[AppMsgTypeVideo-4] + _ = x[AppMsgTypeUrl-5] + _ = x[AppMsgTypeAttach-6] + _ = x[AppMsgTypeOpen-7] + _ = x[AppMsgTypeEmoji-8] + _ = x[AppMsgTypeVoiceRemind-9] + _ = x[AppMsgTypeScanGood-10] + _ = x[AppMsgTypeGood-13] + _ = x[AppMsgTypeEmotion-15] + _ = x[AppMsgTypeCardTicket-16] + _ = x[AppMsgTypeRealtimeShareLocation-17] + _ = x[AppMsgTypeTransfers-2000] + _ = x[AppMsgTypeRedEnvelopes-2001] + _ = x[AppMsgTypeReaderType-100001] +} + +const ( + _AppMessageType_name_0 = "文本消息图片消息语音消息视频消息文章消息附件消息Open表情消息VoiceRemindScanGood" + _AppMessageType_name_1 = "Good" + _AppMessageType_name_2 = "Emotion名片消息地理位置消息" + _AppMessageType_name_3 = "转账消息红包消息" + _AppMessageType_name_4 = "自定义的消息" +) + +var ( + _AppMessageType_index_0 = [...]uint8{0, 12, 24, 36, 48, 60, 72, 76, 88, 99, 107} + _AppMessageType_index_2 = [...]uint8{0, 7, 19, 37} + _AppMessageType_index_3 = [...]uint8{0, 12, 24} +) + +func (i AppMessageType) String() string { + switch { + case 1 <= i && i <= 10: + i -= 1 + return _AppMessageType_name_0[_AppMessageType_index_0[i]:_AppMessageType_index_0[i+1]] + case i == 13: + return _AppMessageType_name_1 + case 15 <= i && i <= 17: + i -= 15 + return _AppMessageType_name_2[_AppMessageType_index_2[i]:_AppMessageType_index_2[i+1]] + case 2000 <= i && i <= 2001: + i -= 2000 + return _AppMessageType_name_3[_AppMessageType_index_3[i]:_AppMessageType_index_3[i+1]] + case i == 100001: + return _AppMessageType_name_4 + default: + return "AppMessageType(" + strconv.FormatInt(int64(i), 10) + ")" + } +}