def DoBet(userobj, chatid, st): uid = userobj["id"] global AliveGame, UserInfo, SendReqIDMap if st == "sh": st = str(GetUserInfo(uid)) if re.match("(^[1-9][0-9]{0,1}%$|^100%$)", st): fa = int(int(st[:-1]) / 100.0 * GetUserInfo(uid)) st = str(fa) if not re.match("^[1-9][0-9]*$", st): return (-1, "无法识别投注金额") if not chatid in AliveGame: return (-1, "无进行中游戏") if not AliveGame[chatid]["status"] == 0: return (-1, "游戏状态错误") mon = int(st) if mon > GetUserInfo(uid): return (-1, "余额不足") ChangeUserInfo(uid, -mon) if not uid in AliveGame[chatid]["player"]: AliveGame[chatid]["player"][uid] = { "money": 0, "name": userobj["first_name"] } AliveGame[chatid]["player"][uid]["money"] += mon if AliveGame[chatid]["messid"] < 0: sbsb = AliveGame[chatid]["messid"] if not sbsb in SendReqIDMap: return (-1, "消息未发出") AliveGame[chatid]["messid"] = SendReqIDMap[AliveGame[chatid]["messid"]] SendReqIDMap.pop(sbsb) typ = AliveGame[chatid]["typ"] mess = GameObjList[typ]["name"] + "\n玩家" for i in AliveGame[chatid]["player"]: mess += "\n" + AliveGame[chatid]["player"][i]["name"] + ": " + str( AliveGame[chatid]["player"][i]["money"]) + "(" + str( GetUserInfo(i)) + ")" UpdateMessage(mess, chatid, AliveGame[chatid]["messid"], button={"inline_keyboard": GenBetButton(chatid)}) return (0, "下注成功")
def EndGame(chatid): global AliveGame (mess, chang) = AliveGame[chatid]["game"].EndGame() AliveGame[chatid]["game"].NeedUpdate = False #player for i in chang: ChangeUserInfo(i, chang[i]["money"]) usm = GetUserInfo(i) mess += "\n" + AliveGame[chatid]["player"][i]["name"] + "(" + str( AliveGame[chatid]["player"][i] ["money"]) + "): " + chang[i]["mess"] + " +" + str( chang[i]["money"]) + "(" + str(usm) + ")" UpdateMessage(mess, chatid, AliveGame[chatid]["messid"]) return
def DoButton(obj): global AliveGame if (not "data" in obj) or len(obj["data"]) < 1: return dat = obj["data"].split('+') if len(dat) < 2 or (not re.match("^[-]*[1-9][0-9]*$", dat[0])): AnswerCallback(obj["id"], "非法请求") return cid = int(dat[0]) if not cid in AliveGame: AnswerCallback(obj["id"], "无进行中的游戏") return txt = dat[1] if AliveGame[cid]["status"] == 0: if txt[0] != '*': return if txt[1] == 'X': res = DoBet(obj["from"], cid, txt[2:]) sta = False if res[0] == 0: retx = "成功 " else: retx = "错误 " sta = True retx += res[1] AnswerCallback(obj["id"], retx, isalert=sta) elif txt[1] == 'M': AnswerCallback(obj["id"], "余额: " + str(GetUserInfo(obj["from"]["id"])), isalert=True) elif txt[1] == 'S': if not AliveGame[cid]["player"]: AnswerCallback(obj["id"], "没人上车") return AliveGame[cid]["game"] = GameObjList[AliveGame[cid]["typ"]]["obj"]( AliveGame[cid]["player"]) AliveGame[cid]["status"] = 1 AnswerCallback(obj["id"]) else: ret = AliveGame[cid]["game"].UserCmd(obj["from"]["id"], txt) if ret is None: AnswerCallback(obj["id"]) else: AnswerCallback(obj["id"], ret[0], ret[1]) return
def DoCommand(obj): if not "text" in obj: return txt = obj["text"] if len(txt) < 1 or txt[0] != '/': return cmdall = txt.split(' ') cmd = cmdall[0] if cmd.find("@") != -1: botname = cmd[cmd.find("@"):] if botname != "@" + BOTNAME: return cmd = cmd.replace("@" + BOTNAME, "") if cmd == "/help" or cmd == "/start": SendMessage(HELPMESSAGE, obj["chat"]["id"]) if cmd in Cmd2Game: StartGame(obj["chat"]["id"], Cmd2Game[cmd]) if cmd == "/bet": if len(cmdall) > 1: res = DoBet(obj["from"], obj["chat"]["id"], cmdall[1]) if res[0] == 0: retx = "成功 " else: retx = "错误 " retx += res[1] SendMessage(retx, obj["chat"]["id"], reply=obj["message_id"]) if cmd == '/del': global AliveGame if obj["chat"]["id"] in AliveGame: AliveGame.pop(obj["chat"]["id"]) SendMessage("已重置", obj["chat"]["id"]) if PY: if cmd == '/py': mm = __import__("random").randint(-100, 1000) GetUserInfo(obj["from"]["id"]) ChangeUserInfo(obj["from"]["id"], mm) SendMessage("pyed: " + str(mm), obj["chat"]["id"], reply=obj["message_id"]) return