def draw_ten_card(user_id): """ 十连抽 :param user_id: :return: """ score = select_score(user_id) if score < CARD_PRICE * 9: return get_return('爬', code=1) add_score(user_id, -9 * CARD_PRICE) str1 = f'花费{CARD_PRICE * 9}积分。\n' n_NUM = 0 lv_num = {'UR': 0, "SSR": 0, 'SR': 0, 'R': 0, 'N': 0} card_num = {'N': [], 'R': [], 'SR': [], "SSR": [], 'UR': []} imgs = {} for i in range(10): img, str2, lv = get_random_card() n_NUM += 1 if lv == 'N' else 0 if n_NUM == 10: while lv == 'N': img, str2, lv = get_random_card() str1 += '触发保底:\n' lv_num[lv] += 1 if imgs.get(img): imgs[img] += 1 else: imgs[img] = 1 card_num[lv].append(img) if str2: str1 += str2 + '\n' archive_cards(user_id, imgs, lv_num) return get_return(str1)
def draw_hundred_card(user_id): """ 百连抽 :param user_id: :return: """ score = select_score(user_id) if score < CARD_PRICE * 80: return get_return('爬') lv_num = {'UR': 0, "SSR": 0, 'SR': 0, 'R': 0, 'N': 0} card_num = {'N': [], 'R': [], 'SR': [], "SSR": [], 'UR': []} imgs = {} for i in range(100): img, str1, lv = get_random_card() lv_num[lv] += 1 if imgs.get(img): imgs[img] += 1 else: imgs[img] = 1 card_num[lv].append(img) archive_cards(user_id, imgs, lv_num) str1 = f'扣除{CARD_PRICE * 80}积分\n获得UR卡{lv_num["UR"]}张\n获得SSR卡{lv_num["SSR"]}张\n获得SR卡{lv_num["SR"]}张\n' \ f'获得R卡{lv_num["R"]}张\n获得N卡{lv_num["N"]}张\n详细抽卡结果已私聊发送' str3 = '' # str3 为私聊发送 for i in card_num: if i == 'N': str3 += '获得N卡若干\n' continue if not card_num[i]: continue for _ in card_num[i]: str3 += f'获得{i}——{_}\n' return get_return(str1, str3)
def new_user_boom(user_id, user_self_boom=0, group_id=''): """ 玩家开启数字炸弹,并且将boom设置为玩家定好的数字 要是存在group_id,则随机设定boom 同时设定boom_owner和boom_type :param user_id: :param user_self_boom:用户自定义boom :param group_id: :return: """ global boom, boom_owner, boom_type user_self_boom = can_to_int(user_self_boom) if boom_type: return get_return('已经有游戏正在进行!') to_zero() if not 0 < user_self_boom < 100: return get_return('给爷爬!游戏范围都不知道了?') to_zero() boom = user_self_boom if group_id: boom = random.randint(1, 99) score = enough_score(user_id, USER_BOOM_PRICE) if not score: # 此处预留银行贷款功能,等银行写好后再补充 return pa add_score(user_id, -USER_BOOM_PRICE) boom_owner = user_id boom_type = 2 return get_return('创建成功')
def daily_score(user_id): """ 签到,检查是否已签到,未签到则产生随机积分,并将积分赋给该用户,更改该用户的"score"积分字段以及"da"签到日期字段 :param user_id: :return: """ score, da = select_u(user_id, 'score', 'da') today = str(datetime.date.today()) if da == today: return get_return('您已签到!', 1) a = random.randint(20, 50) score += a change_score(user_id, score, today) str1 = f'获得:{a}积分!总积分:{score}' # if a <= 24: # str2 = '不会真有人觉得自己签个到就能欧皇吧?不会吧不会吧?\n非酋签个到也才' # elif a >= 41: # str2 = '欧皇ohhh!!\n签到居然有' # else: # str2 = '...\n获得:' # # if score >= 500: # # a = int(a*0.1) # # str1 = '\n积分超过五百,签到积分减少90%,' # # elif score >= 400: # # a = int(a*0.6) # # str1 = '\n积分超过四百,签到积分减少60%,' # # elif score >= 300: # # a = int(a*0.5) # # str1 = '\n积分超过三百,签到积分减少50%,' # # elif score >= 200: # # a = int(a*0.6) # # str1 = '\n积分超过二百,签到积分减少40%,' # # return get_return(str2 + f'') return get_return(str1)
def is_wx_regis(openid): """ 查询是否已经绑定小程序 :param openid: :return: """ res = select_any_in_wx({'openid': openid}, 'id') if not res: return get_return('', need={'user_id': None}, code=0) return get_return('', need={'user_id': res[0]})
def wx_regis(user_id, code, openid): if not code: return pa verify_code = select_wx(user_id, 'code')[0] if not verify_code: return pa if verify_code != code: update_wx(user_id, {'code': ''}) return get_return('您输入的验证码不正确,请是重新获取', code=1) update_wx(user_id, {"openid": openid, 'code': ''}) return get_return(f'绑定成功,您的QQ号为:{user_id}')
def get_login_openid(data): url = 'https://api.weixin.qq.com/sns/jscode2session' params = data res = requests.get(url, params=params) if res.status_code != 200: return get_return('获取失败', code=1) data_json = res.json() if data_json.get('openid'): return get_return('获取成功', need=res.json()) else: return get_return('获取失败', code=1)
def is_not_continue(user_id): """ 验证游戏是否可以继续玩 :param user_id: :return: """ time_remain = cannot_play_secondary(user_id) if not boom: return get_return('没有游戏进行') if not enough_score(user_id, BOOM_PRICE): return get_return('积分不足!') if time_remain: return get_return(time_remain) return False
def draw_card(user_id): """ 抽卡 :param user_id: :return: """ score = select_score(user_id) if score < CARD_PRICE: return get_return('爬', code=1) add_score(user_id, -CARD_PRICE) img, str1, lv = get_random_card() str1 = f'花费{CARD_PRICE}积分,获得{lv}卡:{img}。' archive_card(user_id, img, lv, 1) return get_return(str1, need={'card': img})
def get_verify_code(user_id): verify_code = str(randint(1000, 9999)) if not select_wx(user_id, 'Id'): insert_wx(user_id) update_wx(user_id, {'code': verify_code}) private_msg = f'您的验证码为:{verify_code}, 注意,验证码仅一次有效,请慎重输入' return get_return('', private_msg=private_msg, private_id=user_id)
def increase_score(user_id, score): """ 直接插入积分, 管理员专用 :param user_id: :param score: :return: """ add_score(user_id, score) return get_return('增加成功')
def search_card(user_id): """ 查询用户拥有的卡牌 :param user_id: :return: """ res = select_u(user_id, 'N', 'R', 'SR', "SSR", 'UR') str1 = f'N:{res[0]} R:{res[1]} SR:{res[2]} SSR:{res[3]} UR:{res[4]}' return get_return(str1)
def new_boom(user_id): """ 新建一个boom数,并将它设为全局变量 但是,在boom不为0的时候,要拒绝这个请求 同时每个玩家一天只能开启一次系统游戏,所以: 在开启游戏前需要检测game的boom字段,若不为0,则代表当前玩家今日开启过数字炸弹,拒绝该请求 开启游戏后将数据库game表中的"boom"字段设为1 :return: """ global boom, boom_type if not boom_type: if select_game_for_sql(user_id, 'boom'): return pa to_zero() boom = random.randint(1, 99) boom_type = 1 update_game_for_sql(user_id, {'boom': 1}) return get_return('游戏创建成功!') return get_return('已经有游戏正在进行!')
def search_score(user_id): """ 查询用户积分 :param user_id: :return: """ score = select_score(user_id) if score: return get_return(f'积分:{score}', need={'score': score}) return '穷鬼爬'
def rumor(user_id, message): """ 制造谣言 :param user_id: :param message: 谣言内容 :return: """ score = enough_score(user_id, RUMOR_PRICE) if not score: return get_return('爬', code=1)
def select_achievement(user_id): """ 查询用户成就 :param user_id: :return: """ achievement = select_u(user_id, 'achievement')[0] achievement_num = len(achievement.split(' ')) - 1 str1 = f'您的成就有:{achievement}, 共{achievement_num}个' return get_return(str1)
def achievement_progress(user_id): """ 检查某用户获得的所有成就 :param user_id: :return: """ str1 = '' for _ in achieve_list: achieve_name, progress = one_achievement_progress(user_id, _) str1 += progress return get_return('', str1)
def get_user_restaurant(user_id): """ 获取用户食府数据 :param user_id: :return: """ restaurant_id = get_restaurant_id(user_id) restaurant = get_restaurant(user_id) name = restaurant.get('name') food = restaurant.get('food') str1 = f'您当前食府为{restaurant_id}号食府{name},食物为:{"、".join(food.keys())}' return get_return(public_msg=str1, need={'restaurant': restaurant})
def boom_play(user_id, boom_num): """ 判断boom_num与boom的大小,并提示接下来的游戏范围,当一个人猜对时,置零所有参数 time_start:开始游戏时的时间戳 :param user_id: :param boom_num: :return: """ global boom, left, right, boom_type, boom_consume boom_num = can_to_int(boom_num) res = is_not_continue(user_id) if res: return res boom_consume += BOOM_PRICE add_score(user_id, -BOOM_PRICE) if not left < boom_num < right: player.append({"user_id": user_id, "time": time.time()}) return get_return(f'猜错了,接下请从[{left}-{right}]选择') if boom_num < boom: left = boom_num str1 = get_return(f'猜错了,接下请从[{left}-{right}]选择') elif boom_num > boom: right = boom_num str1 = get_return(f'猜错了,接下请从[{left}-{right}]选择') else: reward_score = get_reward_score(left, right) add_score(user_id, reward_score) if boom_type == 2: owner_score = USER_BOOM_PRICE + boom_consume - reward_score - USER_BOOM_TAX str1 = get_return( public_msg=f'恭喜你答对了, 获得积分{BOOM_SCORE}', private_msg=f'您做庄的数游戏已结束,扣除4积分启动分,玩家获胜分{reward_score}\n' f'玩家总参与积分{boom_consume}\n返还给您{owner_score}积分。', private_id=boom_owner) add_score(boom_owner, owner_score) else: str1 = get_return(public_msg=f'恭喜你答对了, 获得积分{BOOM_SCORE}') to_zero() player.append({"user_id": user_id, "time": time.time()}) return str1
def next_restaurant(user_id): restaurants_data = get_restaurants_data(user_id) restaurant_id = get_restaurant_id(user_id) now = time.time() go = restaurants_data['go'] if go: restaurants_data[restaurant_id]['food'][go] += NEXT_WEIGHT food_dic = restaurants_data[restaurant_id]['food'] did = get_restaurants_did(user_id) if (len(did) > 2) and (did[-1]['food'] == did[-2]['food']) and (did[-1]['time'] - did[-2]['time'] < 86400) \ and (now - did[-1]['time'] < 86400): ignore = restaurants_data['go'] else: ignore = None food = get_random_food(food_dic, ignore) restaurants_data['go'] = food restaurants_data['active'] = now save_restaurants_data(user_id, restaurants_data) return get_return(public_msg=f'当前食物为:{food}', need={'food': food})
def delete_wx_regis(user_id): update_wx(user_id, {'code': '', 'openid': ''}) return get_return(f'删除成功:{user_id}')