mirror of
https://github.com/FloatTech/ZeroBot-Plugin.git
synced 2025-12-19 13:59:39 +08:00
[BUG FIX] 国际象棋插件 bug 修复 (#722)
* 只有正确安装 inkscape 时才需要清理临时文件 * fix lint && bug
This commit is contained in:
parent
ba0ef37b74
commit
5485cc3be9
@ -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,9 +104,11 @@ func draw(groupCode, senderUin int64) message.Message {
|
|||||||
eloString = elo
|
eloString = elo
|
||||||
}
|
}
|
||||||
replyMsg := textWithAt(senderUin, "接受和棋,游戏结束。\n"+eloString+chessString)
|
replyMsg := textWithAt(senderUin, "接受和棋,游戏结束。\n"+eloString+chessString)
|
||||||
if err := cleanTempFiles(groupCode); err != nil {
|
if inkscapeExists() {
|
||||||
log.Debugln("[chess]", "Fail to clean temp files", err)
|
if err := cleanTempFiles(groupCode); err != nil {
|
||||||
return message.Message{message.Text("ERROR: ", err)}
|
log.Debugln("[chess]", "Fail to clean temp files", err)
|
||||||
|
return message.Message{message.Text("ERROR: ", err)}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chessRoomMap.Delete(groupCode)
|
chessRoomMap.Delete(groupCode)
|
||||||
return replyMsg
|
return replyMsg
|
||||||
@ -169,9 +172,11 @@ func resign(groupCode, senderUin int64) message.Message {
|
|||||||
replyMsg = textWithAt(senderUin, "对手认输,游戏结束,你胜利了。\n"+eloString+chessString)
|
replyMsg = textWithAt(senderUin, "对手认输,游戏结束,你胜利了。\n"+eloString+chessString)
|
||||||
}
|
}
|
||||||
// 删除临时文件
|
// 删除临时文件
|
||||||
if err := cleanTempFiles(groupCode); err != nil {
|
if inkscapeExists() {
|
||||||
log.Debugln("[chess]", "Fail to clean temp files", err)
|
if err := cleanTempFiles(groupCode); err != nil {
|
||||||
return message.Message{message.Text("ERROR: ", err)}
|
log.Debugln("[chess]", "Fail to clean temp files", err)
|
||||||
|
return message.Message{message.Text("ERROR: ", err)}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chessRoomMap.Delete(groupCode)
|
chessRoomMap.Delete(groupCode)
|
||||||
return replyMsg
|
return replyMsg
|
||||||
@ -231,9 +236,11 @@ 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 err := cleanTempFiles(groupCode); err != nil {
|
if inkscapeExists() {
|
||||||
log.Debugln("[chess]", "Fail to clean temp files", err)
|
if err := cleanTempFiles(groupCode); err != nil {
|
||||||
return message.Message{message.Text("ERROR: ", err)}
|
log.Debugln("[chess]", "Fail to clean temp files", err)
|
||||||
|
return message.Message{message.Text("ERROR: ", err)}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chessRoomMap.Delete(groupCode)
|
chessRoomMap.Delete(groupCode)
|
||||||
return replyMsg
|
return replyMsg
|
||||||
@ -309,9 +316,11 @@ 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 err := cleanTempFiles(groupCode); err != nil {
|
if inkscapeExists() {
|
||||||
log.Debugln("[chess]", "Fail to clean temp files", err)
|
if err := cleanTempFiles(groupCode); err != nil {
|
||||||
return message.Message{message.Text("ERROR: ", err)}
|
log.Debugln("[chess]", "Fail to clean temp files", err)
|
||||||
|
return message.Message{message.Text("ERROR: ", err)}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chessRoomMap.Delete(groupCode)
|
chessRoomMap.Delete(groupCode)
|
||||||
return replyMsg
|
return replyMsg
|
||||||
@ -445,9 +454,11 @@ 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 err := cleanTempFiles(groupCode); err != nil {
|
if inkscapeExists() {
|
||||||
log.Debugln("[chess]", "Fail to clean temp files", err)
|
if err := cleanTempFiles(groupCode); err != nil {
|
||||||
return message.Message{message.Text("ERROR: ", err)}
|
log.Debugln("[chess]", "Fail to clean temp files", err)
|
||||||
|
return message.Message{message.Text("ERROR: ", err)}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
chessRoomMap.Delete(groupCode)
|
chessRoomMap.Delete(groupCode)
|
||||||
msg := simpleText(hint)
|
msg := simpleText(hint)
|
||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user