[BUG FIX] 国际象棋插件 bug 修复 (#722)

* 只有正确安装 inkscape 时才需要清理临时文件

* fix lint && bug
This commit is contained in:
Aimer Neige 2023-09-02 23:09:34 +08:00 committed by GitHub
parent ba0ef37b74
commit 5485cc3be9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -16,6 +16,7 @@ import (
"github.com/FloatTech/floatbox/file" "github.com/FloatTech/floatbox/file"
"github.com/FloatTech/gg" "github.com/FloatTech/gg"
"github.com/FloatTech/zbputils/control" "github.com/FloatTech/zbputils/control"
"github.com/FloatTech/zbputils/img/text"
"github.com/RomiChan/syncx" "github.com/RomiChan/syncx"
"github.com/jinzhu/gorm" "github.com/jinzhu/gorm"
"github.com/notnil/chess" "github.com/notnil/chess"
@ -103,10 +104,12 @@ func draw(groupCode, senderUin int64) message.Message {
eloString = elo eloString = elo
} }
replyMsg := textWithAt(senderUin, "接受和棋,游戏结束。\n"+eloString+chessString) replyMsg := textWithAt(senderUin, "接受和棋,游戏结束。\n"+eloString+chessString)
if inkscapeExists() {
if err := cleanTempFiles(groupCode); err != nil { if err := cleanTempFiles(groupCode); err != nil {
log.Debugln("[chess]", "Fail to clean temp files", err) log.Debugln("[chess]", "Fail to clean temp files", err)
return message.Message{message.Text("ERROR: ", err)} return message.Message{message.Text("ERROR: ", err)}
} }
}
chessRoomMap.Delete(groupCode) chessRoomMap.Delete(groupCode)
return replyMsg return replyMsg
} }
@ -169,10 +172,12 @@ func resign(groupCode, senderUin int64) message.Message {
replyMsg = textWithAt(senderUin, "对手认输,游戏结束,你胜利了。\n"+eloString+chessString) replyMsg = textWithAt(senderUin, "对手认输,游戏结束,你胜利了。\n"+eloString+chessString)
} }
// 删除临时文件 // 删除临时文件
if inkscapeExists() {
if err := cleanTempFiles(groupCode); err != nil { if err := cleanTempFiles(groupCode); err != nil {
log.Debugln("[chess]", "Fail to clean temp files", err) log.Debugln("[chess]", "Fail to clean temp files", err)
return message.Message{message.Text("ERROR: ", err)} return message.Message{message.Text("ERROR: ", err)}
} }
}
chessRoomMap.Delete(groupCode) chessRoomMap.Delete(groupCode)
return replyMsg return replyMsg
} }
@ -231,10 +236,12 @@ func play(senderUin int64, groupCode int64, moveStr string) message.Message {
chessString := getChessString(*room) chessString := getChessString(*room)
replyMsg := textWithAt(senderUin, "违例两次,游戏结束。\n"+chessString) replyMsg := textWithAt(senderUin, "违例两次,游戏结束。\n"+chessString)
// 删除临时文件 // 删除临时文件
if inkscapeExists() {
if err := cleanTempFiles(groupCode); err != nil { if err := cleanTempFiles(groupCode); err != nil {
log.Debugln("[chess]", "Fail to clean temp files", err) log.Debugln("[chess]", "Fail to clean temp files", err)
return message.Message{message.Text("ERROR: ", err)} return message.Message{message.Text("ERROR: ", err)}
} }
}
chessRoomMap.Delete(groupCode) chessRoomMap.Delete(groupCode)
return replyMsg return replyMsg
} }
@ -309,10 +316,12 @@ func play(senderUin int64, groupCode int64, moveStr string) message.Message {
if !room.isBlindfold { if !room.isBlindfold {
replyMsg = append(replyMsg, boardImgEle) replyMsg = append(replyMsg, boardImgEle)
} }
if inkscapeExists() {
if err := cleanTempFiles(groupCode); err != nil { if err := cleanTempFiles(groupCode); err != nil {
log.Debugln("[chess]", "Fail to clean temp files", err) log.Debugln("[chess]", "Fail to clean temp files", err)
return message.Message{message.Text("ERROR: ", err)} return message.Message{message.Text("ERROR: ", err)}
} }
}
chessRoomMap.Delete(groupCode) chessRoomMap.Delete(groupCode)
return replyMsg return replyMsg
} }
@ -445,10 +454,12 @@ func abortGame(room chessRoom, groupCode int64, hint string) message.Message {
return message.Message{message.Text("ERROR: ", err)} return message.Message{message.Text("ERROR: ", err)}
} }
} }
if inkscapeExists() {
if err := cleanTempFiles(groupCode); err != nil { if err := cleanTempFiles(groupCode); err != nil {
log.Debugln("[chess]", "Fail to clean temp files", err) log.Debugln("[chess]", "Fail to clean temp files", err)
return message.Message{message.Text("ERROR: ", err)} return message.Message{message.Text("ERROR: ", err)}
} }
}
chessRoomMap.Delete(groupCode) chessRoomMap.Delete(groupCode)
msg := simpleText(hint) msg := simpleText(hint)
if room.whitePlayer != 0 { if room.whitePlayer != 0 {
@ -470,7 +481,7 @@ func getBoardElement(groupCode int64) (message.MessageSegment, bool, string) {
} }
// 未安装 inkscape 直接返回对局字符串 // 未安装 inkscape 直接返回对局字符串
// TODO: 使用原生 go 库渲染 svg // TODO: 使用原生 go 库渲染 svg
if !commandExists("inkscape") { if !inkscapeExists() {
boardString := room.chessGame.Position().Board().Draw() boardString := room.chessGame.Position().Board().Draw()
boardImageB64, err := generateCharBoardImage(boardString) boardImageB64, err := generateCharBoardImage(boardString)
if err != nil { if err != nil {
@ -618,8 +629,7 @@ func generateCharBoardImage(boardString string) (string, error) {
dc.SetRGB(1, 1, 1) dc.SetRGB(1, 1, 1)
dc.Clear() dc.Clear()
dc.SetRGB(0, 0, 0) dc.SetRGB(0, 0, 0)
// fnt := text.GNUUnifontFontFile fontdata, err := file.GetLazyData(text.GNUUnifontFontFile, control.Md5File, true)
fontdata, err := file.GetLazyData("text.GNUUnifontFontFile", control.Md5File, true)
if err != nil { if err != nil {
// TODO: err solve // TODO: err solve
panic(err) panic(err)
@ -694,9 +704,9 @@ func getELORate(whiteUin, blackUin int64, dbService *chessDBService) (whiteRate
return return
} }
// commandExists 判断 指令是否存在 // inkscapeExists 判断 inkscape 是否存在
func commandExists(cmd string) bool { func inkscapeExists() bool {
_, err := exec.LookPath(cmd) _, err := exec.LookPath("inkscape")
return err == nil return err == nil
} }