qq_bot/handler/blackjack/blackjack.go

106 lines
3.1 KiB
Go

package blackjack
import (
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/handler"
"git.lxtend.com/qqbot/handler/blackjack/controller"
"git.lxtend.com/qqbot/handler/blackjack/core"
"git.lxtend.com/qqbot/handler/blackjack/view"
"git.lxtend.com/qqbot/model"
"git.lxtend.com/qqbot/util"
)
var userGameMap map[string]*core.BackJackGame
func init() {
handler.RegisterHandler("bj", blackJack, constants.LEVEL_USER)
handler.RegisterHelpInform("bj", "blackjack", "bj start 开始玩黑杰克")
userGameMap = make(map[string]*core.BackJackGame)
}
func blackJack(msg model.Message) *model.Reply {
tokens := util.SplitN(msg.RawMsg, 2)
if len(tokens) < 2 {
return &model.Reply{
ReplyMsg: "Invalid command",
ReferOriginMsg: true,
FromMsg: msg,
}
}
if tokens[1] == "exit" {
delete(userGameMap, util.From(msg.GroupInfo.GroupId, msg.UserId))
return &model.Reply{
ReplyMsg: "Bye",
ReferOriginMsg: false,
FromMsg: msg,
}
}
if tokens[1] == "start" {
userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)] = core.NewBlackJackGame(controller.NewBlackJackSimulator(), view.NewLiteralViewer(controller.NewBlackJackSimulator()))
}
if _, ok := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)]; !ok {
return &model.Reply{
ReplyMsg: "Please start a game first",
ReferOriginMsg: true,
FromMsg: msg,
}
}
response, _ := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)].AddCommand(tokens[1])
handler.RegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId, blackJackWithNoBj)
if response[len(response)-1:] == "\n" {
response = response[:len(response)-1]
}
return &model.Reply{
ReplyMsg: response,
ReferOriginMsg: false,
FromMsg: msg,
}
}
func blackJackWithNoBj(msg model.Message) (reply *model.Reply, ok bool) {
if msg.RawMsg == "exit" {
delete(userGameMap, util.From(msg.GroupInfo.GroupId, msg.UserId))
handler.UnRegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId)
return &model.Reply{
ReplyMsg: "Bye",
ReferOriginMsg: false,
FromMsg: msg,
}, true
}
if msg.RawMsg == "start" {
userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)] = core.NewBlackJackGame(controller.NewBlackJackSimulator(), view.NewLiteralViewer(controller.NewBlackJackSimulator()))
}
if _, ok := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)]; !ok {
return &model.Reply{
ReplyMsg: "Please start a game first",
ReferOriginMsg: true,
FromMsg: msg,
}, true
}
response, err := userGameMap[util.From(msg.GroupInfo.GroupId, msg.UserId)].AddCommand(msg.RawMsg)
if err != nil {
if err.Error() == "invalid command" {
return &model.Reply{
ReplyMsg: "",
ReferOriginMsg: false,
FromMsg: msg,
}, false
} else if err.Error() == "game over" {
delete(userGameMap, util.From(msg.GroupInfo.GroupId, msg.UserId))
handler.UnRegisterLiveHandler(msg.GroupInfo.GroupId, msg.UserId)
}
}
if len(response) > 1 && response[len(response)-1:] == "\n" {
response = response[:len(response)-1]
}
return &model.Reply{
ReplyMsg: response,
ReferOriginMsg: false,
FromMsg: msg,
}, true
}