优化微信的处理流程

This commit is contained in:
johlanse 2022-08-12 09:32:37 +08:00
parent 050ab4ed41
commit d76db7d81e
1 changed files with 55 additions and 94 deletions

149
web/wx.go
View File

@ -32,7 +32,7 @@ var (
const ( const (
login = "login" login = "login"
StartStudy = "start_study" StartStudy = "start_study"
getUser = "stop_study" getUser = "get_user"
SCORE = "score" SCORE = "score"
checkUpdate = "check_update" checkUpdate = "check_update"
@ -40,12 +40,31 @@ const (
restart = "restart" restart = "restart"
) )
type WechatHandler func(id string)
var (
handlers sync.Map
)
func RegisterHandler(key string, action WechatHandler) {
handlers.Store(key, action)
}
func initWechat() { func initWechat() {
config := conf.GetConfig() config := conf.GetConfig()
if !config.Wechat.Enable { if !config.Wechat.Enable {
return return
} }
log.Infoln(config.Wechat)
// 注册插件
RegisterHandler(login, handleLogin)
RegisterHandler(StartStudy, handleStartStudy)
RegisterHandler(getUser, handleGetUser)
RegisterHandler(SCORE, handleScore)
RegisterHandler(checkUpdate, handleCheckUpdate)
RegisterHandler(updateBtn, handleUpdate)
RegisterHandler(restart, handleRestart)
wx = mp.New(config.Wechat.Token, config.Wechat.AppID, config.Wechat.Secret, "123", "123") wx = mp.New(config.Wechat.Token, config.Wechat.AppID, config.Wechat.Secret, "123", "123")
err := wx.CreateMenu(&mp.Menu{Buttons: []mp.MenuButton{ err := wx.CreateMenu(&mp.Menu{Buttons: []mp.MenuButton{
{ {
@ -64,61 +83,40 @@ func initWechat() {
MediaId: "", MediaId: "",
SubButtons: []mp.MenuButton{ SubButtons: []mp.MenuButton{
{ {
Name: "开始学习", Name: "开始学习",
Type: "click", Type: "click",
Key: StartStudy, Key: StartStudy,
Url: "",
MediaId: "",
SubButtons: nil,
}, },
{ {
Name: "获取用户", Name: "获取用户",
Type: "click", Type: "click",
Key: getUser, Key: getUser,
Url: "",
MediaId: "",
SubButtons: nil,
}, },
{ {
Name: "积分查询", Name: "积分查询",
Type: "click", Type: "click",
Key: SCORE, Key: SCORE,
Url: "",
MediaId: "",
SubButtons: nil,
}, },
}, },
}, },
{ {
Name: "关于", Name: "关于",
Type: "click", Type: "click",
Key: "",
Url: "",
MediaId: "",
SubButtons: []mp.MenuButton{ SubButtons: []mp.MenuButton{
{ {
Name: "检查更新", Name: "检查更新",
Type: "click", Type: "click",
Key: checkUpdate, Key: checkUpdate,
Url: "",
MediaId: "",
SubButtons: nil,
}, },
{ {
Name: "重启程序", Name: "重启程序",
Type: "click", Type: "click",
Key: restart, Key: restart,
Url: "",
MediaId: "",
SubButtons: nil,
}, },
{ {
Name: "更新程序", Name: "更新程序",
Type: "click", Type: "click",
Key: updateBtn, Key: updateBtn,
Url: "",
MediaId: "",
SubButtons: nil,
}, },
}, },
}, },
@ -135,22 +133,21 @@ func initWechat() {
return return
} }
lastNonce = nonce lastNonce = nonce
switch r.EventKey { value, ok := handlers.Load(r.EventKey)
case login: if !ok {
go handleLogin(r.FromUserName) log.Warningln("未注册key为" + r.EventKey + "的调用方法")
case StartStudy: return
go handleStartStudy(r.FromUserName)
case getUser:
go handleGetUser(r.FromUserName)
case SCORE:
go handleScore(r.FromUserName)
case checkUpdate:
handleCheckUpdate(r.FromUserName)
case updateBtn:
handleUpdate(r.FromUserName)
case restart:
handleRestart(r.FromUserName)
} }
go func() {
defer func() {
err := recover()
if err != nil {
log.Errorln("处理微信事件错误")
log.Errorln(err)
}
}()
(value.(WechatHandler))(r.FromUserName)
}()
}) })
} }
@ -199,13 +196,6 @@ func HandleWechat(rep http.ResponseWriter, req *http.Request) {
} }
func handleLogin(id string) { func handleLogin(id string) {
defer func() {
err := recover()
if err != nil {
log.Errorln("处理微信事件错误")
log.Errorln(err)
}
}()
core := &lib.Core{Push: func(kind, message string) { core := &lib.Core{Push: func(kind, message string) {
if kind == "flush" && strings.HasPrefix(message, "登录链接") { if kind == "flush" && strings.HasPrefix(message, "登录链接") {
l := strings.ReplaceAll(message, "登录链接:\r\n", "") l := strings.ReplaceAll(message, "登录链接:\r\n", "")
@ -230,13 +220,6 @@ func handleLogin(id string) {
} }
func handleStartStudy(id string) { func handleStartStudy(id string) {
defer func() {
err := recover()
if err != nil {
log.Errorln("处理微信事件错误")
log.Errorln(err)
}
}()
users, err := model.QueryByPushID(id) users, err := model.QueryByPushID(id)
if err != nil { if err != nil {
return return
@ -271,13 +254,6 @@ func handleStartStudy(id string) {
} }
func handleGetUser(id string) { func handleGetUser(id string) {
defer func() {
err := recover()
if err != nil {
log.Errorln("处理微信事件错误")
log.Errorln(err)
}
}()
users, err := model.Query() users, err := model.Query()
if err != nil { if err != nil {
return return
@ -298,21 +274,6 @@ func handleGetUser(id string) {
} }
func handleScore(id string) { func handleScore(id string) {
defer func() {
err := recover()
if err != nil {
log.Errorln("处理微信事件错误")
log.Errorln(err)
}
}()
defer func() {
err := recover()
if err != nil {
log.Errorln("处理微信事件错误")
log.Errorln(err)
}
}()
users, err := model.Query() users, err := model.Query()
if err != nil { if err != nil {
return return