Exemplo n.º 1
0
def get_bp5info(uid):
    try:
        u = osu_user.Osuer()
        bp5 = u.get_user_bp(uid, m=0, limit=5)
        if not bp5:
            return '没有Bp,下一个!!'
        # TODO uid转uname
        s_msg = "%s's bp!!\n" % uid
        for i, r in enumerate(bp5[0:5]):
            msg = 'bp{x},{pp}pp,{acc}%,{rank},+{mod}'
            c50 = float(r['count50'])
            c100 = float(r['count100'])
            c300 = float(r['count300'])
            cmiss = float(r['countmiss'])
            acc = round((c50 * 50 + c100 * 100 + c300 * 300) /
                        (c50 + c100 + c300 + cmiss) / 300 * 100, 2)
            msg = msg.format(x=i + 1,
                             pp=round(float(r['pp'])),
                             acc=acc,
                             rank=r['rank'],
                             mod=','.join(mods.getMod(int(r['enabled_mods']))))
            s_msg = s_msg + msg + '\n'
        return s_msg[0:-1]
    except:
        traceback.print_exc()
        return '没有Bp,下一个!!'
Exemplo n.º 2
0
def setid(uid, qq, groupid):
    uinfo = get_osuer_info(uid)
    if not uinfo:
        return '绑定失败!(why?你自己猜吧'
    u = osu_user.Osuer()
    if not u.insert2DB(qq, uinfo['user_id'], groupid, uinfo['username']):
        return '绑定失败,interBot数据库被玩坏了!'
    return '绑定成功,使用myinfo查询信息!'
Exemplo n.º 3
0
def send2qq(bid, groupid, name, hid=1, mods=-1):
    o = osu_user.Osuer()
    ret = o.get_user_from_db2(name)
    uid = ret['osuid'] if ret else -1
    try:
        drawRank.start(bid, groupid, hid, mods, uid)
    except:
        traceback.print_exc()
        return '打了就是你的top\nosu.ppy.sh/b/%s' % bid, -1
    return '[CQ:image,file=file://%s\%s]' % (Config.IMAGE_PATH, 'rank.png'), 1
Exemplo n.º 4
0
def myinfo(qq, gid=None):
    u = osu_user.Osuer()
    ret = u.get_user_from_db(qq, gid)
    if not ret:
        return '未绑定,请使用setid!'

    home_url = 'https://osu.ppy.sh/u/%s' % (ret['osuname'])
    msg = "osu:%s\nosuid:%s\nmoney:%s\nbagnum:%s\n%s" % (
        ret['osuname'], ret['osuid'], ret['money'], ret['bagnum'], home_url)
    return msg
Exemplo n.º 5
0
def uid_uname(uname=None, qq=None):
    u = osu_user.Osuer()
    if uname:
        ret = u.get_user_from_db2(uname)
        if ret:
            return ret['osuid'],ret['osuname']

    ret = u.get_user_from_db(qq)
    if not ret:
        return 0,0
    return ret['osuid'],ret['osuname']
Exemplo n.º 6
0
def get_topsrank(groupid, hid=1):
    ret = score.tops_rank(groupid, hid=hid)
    if not ret:
        return '你群0个榜???'
    u = osu_user.Osuer()
    uret = u.get_user_from_db3([r['uid'] for r in ret])
    udict = {r['osuid']: r['osuname'] for r in uret}
    outstr = "top榜拥有数排行\n"
    for i, r in enumerate(ret):
        outstr = outstr + '#%s %s [%s]\n' % (i + 1, udict[r['uid']], r['num'])
    return outstr[:-1]
Exemplo n.º 7
0
def rctpp(uid):
    # 来自int100

    u = osu_user.Osuer(uid=uid)
    recent = u.get_recent(limit=1)

    if len(recent) == 0:
        return '这人最近没有打图!快去打图爆曲奇!!!'

    recent = recent[0]
    bid = recent['beatmap_id']

    # now
    now_acc = mods.get_acc(recent['count300'], recent['count100'],
                           recent['count50'], recent['countmiss'])

    now_res = mods.calcpp(bid, now_acc, int(recent['maxcombo']),
                          mods.get_mods_name(recent['enabled_mods']),
                          recent['countmiss'])

    # if fc
    fc_acc = mods.get_acc(recent['count300'], recent['count100'],
                          recent['count50'], 0)

    fc_res = mods.calcpp(bid, fc_acc, -1,
                         mods.get_mods_name(recent['enabled_mods']))

    # if 98acc
    a98_res = mods.calcpp(bid, 98.0, -1,
                          mods.get_mods_name(recent['enabled_mods']))

    artist = ""
    title = ""
    modstr = ""

    if 'artist_unicode' in fc_res.keys():
        artist = fc_res['artist_unicode']
    else:
        artist = fc_res['artist']

    if 'title_unicode' in fc_res.keys():
        title = fc_res['title_unicode']
    else:
        title = fc_res['title']

    if not fc_res['mods_str'] == "NONE":
        modstr = "Mods: " + fc_res['mods_str'] + " "

    return '%s - %s [%s]\nBeatmap by %s\nhttps://osu.ppy.sh/b/%s\n%sRank: %s Star: %.2f*\n\n对比: (现在 / fc / 98%%)\n%.2f%% / %.2f%% / %.2f%%\n%.2fpp / %.2fpp / %.2fpp\n%sx / %sx / %sx' % \
                                    (artist, title, fc_res['version'], fc_res['creator'], bid, \
                                     modstr, recent['rank'],fc_res['stars'],\
                                     now_acc, fc_acc, 98.00, now_res['pp'], fc_res['pp'], a98_res['pp'],\
                                     now_res['combo'], fc_res['max_combo'], fc_res['max_combo'])
Exemplo n.º 8
0
def uid_find_or_input(uid=None, qq=None, can_input=True, return_type=0, gid=None):
    # 是否允许读入uid
    if can_input and uid:
        return uid

    u = osu_user.Osuer()
    ret = u.get_user_from_db(qq, gid)
    if not ret:
        return 0

    if return_type == 0:
        return ret['osuid']
    elif return_type == 1:
        return ret['osuname']
    elif return_type == 2:
        return ret['osuid'],ret['osuname']
Exemplo n.º 9
0
def check2(uid):
    u = osu_user.Osuer(uid=uid)
    userinfo = u.get_user_info()
    bp = u.get_user_bp(limit=10)
    acc = float(userinfo['accuracy'])
    pc = float(userinfo['playcount'])
    tth = float(
        int(userinfo['count300']) + int(userinfo['count100']) +
        int(userinfo['count50']))
    bpacc = bppp = 0
    for r in bp:
        bppp += float(r['pp'])
        bpacc += float(
            mods.get_acc(r['count300'], r['count100'], r['count50'],
                         r['countmiss']))
    newpp, acc_c, bpacc_c, bppp_c, pc_c, tth_c = pp2(acc, bpacc, bppp, pc, tth)
    print(acc, bpacc, bppp, pc, tth)
    return "%s\n实际pp:%spp\n预测水平:%spp" % (
        uid, round(float(userinfo['pp_raw']), 2), newpp)
Exemplo n.º 10
0
def save_rec(uid, groupid, hid=1, limit=1):
    o = osu_user.Osuer()
    rec = o.get_recent(uid, limit=limit)
    if not rec:
        return '你想意念刚榜???'
    # 过滤bids
    bids = filter_rec(uid, rec)
    if not bids:
        logging.info('bids列表空!')
        return '你倒是打图啊.JPG'
    # 过滤rec
    newRec = autoRec(rec, bids)
    # 最新rec成绩优化
    newRec = score.rec_highscore(newRec)
    # 提取rec
    inRec = score.check_rec(bids, newRec)
    if not inRec:
        logging.info('无新成绩!')
        return '你还要再刚一点.JPG'
    # 从库中过滤bids
    inbids = [r['beatmap_id'] for r in inRec]
    inbids = score.filter_beatmapid(inbids)
    logging.info('查询bids列表:%s' % str(inbids))
    if inbids:
        mapsinfo = [o.get_beatmapinfo(b) for b in inbids]
        map_args = score.args_format('map', mapsinfo)
        score.map2db(map_args)

    rec_args = score.args_format('rec', inRec)
    score.rec2db(rec_args)

    rec1 = copy.deepcopy(inRec)
    rec2 = copy.deepcopy(inRec)
    # 总榜临时处理
    score.map_rank(rec1, groupid, hid=1, rtype=1)

    score.map_rank(rec2, groupid, hid=1, rtype=2)
    return 'upload success!'
Exemplo n.º 11
0
def get_rankinfo(uid, groupid, bid, hid=1, mod=-1):
    print('查询用户[%s]' % uid)
    ret = score.hid_ranks(bid, groupid, hid, mod)
    o = osu_user.Osuer()
    if not ret:
        return '榜上一个成绩都没有!!! https://osu.ppy.sh/b/%s' % bid
    ret = ret[0]
    outstr = '%s(%s)-%s[%s]\n' % (ret['source'], ret['artist'], ret['title'],
                                  ret['version'])
    uids = []
    for i, r in enumerate(json.loads(ret['rankjson'])[:10]):
        for k, v in r.items():
            uid = k
            uids.append(uid)
            sco = v
        m = ','.join(mods.getMod(int(sco[5])))
        outstr += '#%s {%s} %s分 [%sx] %s%% %s +%s\n' % (
            i + 1, uid, sco[0], sco[1], sco[3], sco[4], m)
    res = o.get_usernames_by_uid(uids)
    for r in res:
        restr = '{%s}' % r['osuid']
        outstr = outstr.replace(restr, r['osuname'])
    return outstr[:-1]
Exemplo n.º 12
0
def todaybp(uid):
    # 来自int100
    u = osu_user.Osuer(uid=uid)
    bps = u.get_user_bp(limit=100)

    if len(bps) == 0:
        return '这人没有bp!!!'

    todaybp = []
    today = int(time.strftime("%Y%m%d", time.localtime()))
    i = 1
    for bp in bps:
        date = int(
            time.strftime(
                "%Y%m%d",
                time.localtime(
                    time.mktime(time.strptime(bp['date'],
                                              "%Y-%m-%d %H:%M:%S")))))
        if date == today:
            bp['num'] = i
            todaybp.append(bp)
        i = i + 1

    if len(bp) == 0:
        return "你太菜了!一个bp都没更新!!"

    mtext = "%s today's bp:\n" % uid

    for bp in todaybp:
        acc = mods.get_acc(bp['count300'], bp['count100'], bp['count50'],
                           bp['countmiss'])
        mod = mods.get_mods_name(bp['enabled_mods'])
        mtext = mtext + "bp%s,%.2fpp,%.2f%%,%s,+%s\n" % (
            bp['num'], float(bp['pp']), acc, bp['rank'], mod)

    return mtext[:-1]
Exemplo n.º 13
0
def map(uid):
    u = osu_user.Osuer()
    map_id, num = u.choiceMap(uid)
    if not map_id:
        return '本bot根本不想给你推荐图'
    return 'inter推荐给%s的图:https://osu.ppy.sh/b/%s  推荐指数:%s' % (uid, map_id, num)
Exemplo n.º 14
0
def check(uid):
    u = osu_user.Osuer()
    pp, pp2, maxpp = u.check_user(uid)
    if not pp:
        return '你在逗我把,哪来的pp???'
    return '%s\npp:%spp\ninter手算:%spp\n目前潜力:%spp' % (uid, pp, pp2, maxpp)
Exemplo n.º 15
0
def get_osuer_info(uid):
    u = osu_user.Osuer()
    return u.get_user_info(uid)
Exemplo n.º 16
0
def get_user_stats(uid='8505303'):
    o = osu_user.Osuer()
    ret = o.get_user_stats_today(uid)
    if not ret:
        return {}
    return ret[0]
Exemplo n.º 17
0
def test(uid):
    u = osu_user.Osuer(uid=uid)
    userinfo = u.get_user_info()
    bp = u.get_user_bp(limit=5)
    return healthCheck.health_check(userinfo, bp)
Exemplo n.º 18
0
def drawR(mapjson, rankjson, userjson):
    # skin
    bg_e = draw_data.check_bg(mapjson['beatmap_id'])
    bg = '%s.jpg' % mapjson['beatmap_id'] if bg_e else 'newgame_background.png'
    back_icon = 'menu-back-0.png'
    mod_icon = 'selection-mode.png'
    mods_icon = 'selection-mods.png'
    random_icon = 'selection-random.png'
    options_icon = 'selection-options.png'
    rank_x = 'ranking-%s-small.png'

    # ous ui
    songselecttop = 'songselect-top.png'
    uptips = 'selection-update.png'
    osu_icon = 'menu-osu.png'
    songselect_bottom = 'songselect-bottom.png'
    level_bar = 'levelbar.png'
    level_bar_bg = 'levelbar-bg.png'
    selection_approved = 'selection-approved.png'

    # 用户信息
    uname = userjson.get('username', '')
    pp = round(float(userjson.get('pp', 0)), 2)
    acc = userjson.get('acc', '')
    level = userjson.get('level', '99')
    rank = userjson.get('rank', '')
    umod = 'mode-osu-small.png'

    #曲子信息
    title = mapjson.get('title', '')
    source = mapjson.get('source', '')
    artist = mapjson.get('artist', '')
    version = mapjson.get('version', '')
    creator = mapjson.get('creator', '')
    bpm = mapjson.get('bpm', '')
    max_combo = mapjson.get('max_combo', '')
    difficultyrating = round(float(mapjson.get('difficultyrating', '')),
                             2)  #stars
    diff_size = mapjson.get('diff_size', '')  #CS
    diff_approach = mapjson.get('diff_approach', '')  #AR
    diff_overall = mapjson.get('diff_overall', '')  #OD
    diff_drain = mapjson.get('diff_drain', '')  #HP

    m, s = divmod(int(mapjson.get('total_length')), 60)
    h, m = divmod(m, 60)
    if h != 0:
        hit_length = "%02d:%02d:%02d" % (h, m, s)  #sec
    else:
        hit_length = "%02d:%02d" % (m, s)  #sec

    # 头像download
    uids = [list(r.keys())[0] for r in rankjson]
    check_uids = uids[:12]
    me = userjson.get('osuid', '')
    if me not in uids:
        check_uids.append(me)
        me_idx = -1
    else:
        me_idx = uids.index(me)
    draw_data.check_img(check_uids)

    d = DrawRec()

    # 第一层bg
    d.add_items(isresize=True, path='image/bg/%s' % bg)
    # title黑层
    d.add_items2(songselecttop)
    # 更新提示
    # d.add_items2(uptips, 20, 200)
    # 低下大黑条
    d.add_items2(songselect_bottom,
                 0,
                 648,
                 isresize=True,
                 width=1366,
                 height=120)
    # 大粉饼
    d.add_items2(osu_icon, 1130, 550, isresize=True, width=300, height=300)
    # 返回
    d.add_items(back_icon, 10, 615)

    # mode
    d.add_items(mod_icon, 250, 678)
    # mods选择
    d.add_items(mods_icon, 340, 678)
    # random
    d.add_items(random_icon, 430, 678)
    # options
    d.add_items(options_icon, 520, 678)

    # 头像
    d.add_items(x=690,
                y=675,
                path='image/userimg/%s.jpg' % me,
                isresize=True,
                width=90,
                height=90)
    # 用户信息
    d.add_items2(umod, 998, 670, factor=0.5)
    d.add_text(968, 710, '# %s' % rank, font_size=16, ttype='en')
    d.add_text(788, 670, uname, font_size=24, ttype='en')
    d.add_text(788, 700, 'Performance:%spp' % pp, font_size=16, ttype='en')
    d.add_text(788, 720, 'Accuracy:%s%%' % acc, font_size=16, ttype='en')
    d.add_text(788, 740, 'Lv:%s' % level, font_size=16, ttype='en')
    d.add_items2(level_bar, 840, 750, isresize=True, width=100, height=14)
    d.add_items2(level_bar_bg, 840, 750)

    # 曲子信息
    d.add_text(40,
               0,
               '%s (%s) - %s [%s]' % (source, artist, title, version),
               font_size=25,
               ttype='cn')
    d.add_items2(selection_approved, 7, 0)
    d.add_text(40, 26, '作者: %s' % (creator), font_size=16, ttype='cn')
    d.add_text(5,
               45,
               '长度: %s  BPM: %s  物件数: %s' % (hit_length, bpm, max_combo),
               font_size=18,
               ttype='cn')
    d.add_text(
        5,
        68,
        'CS:%s AR:%s OD:%s HP:%s Stars:%s' %
        (diff_size, diff_approach, diff_overall, diff_drain, difficultyrating),
        font_size=14,
        ttype='en')

    # 榜区域
    nums = len(uids)
    o = osu_user.Osuer()
    res = o.get_usernames_by_uid(uids)
    udict = {r['osuid']: r['osuname'] for r in res}
    if nums > 6:
        r1 = 6
        r2 = nums - 6
    else:
        r1 = nums
        r2 = 0
    offset1 = 65
    for i in range(r1):
        r = rankjson[i]
        u = uids[i]
        mds = int(r[u][5])
        mds_l = mods.getMod(mds)
        m = ','.join(mds_l) if mds > 0 else ''
        rank = 'D' if r[u][4] == 'F' else r[u][4]
        d.draw_rectangle(x=20,
                         y=160 + i * offset1,
                         width=460,
                         height=60,
                         fill=(0, 0, 0, 50))
        d.add_items(x=20,
                    y=160 + i * offset1,
                    path='image/userimg/%s.jpg' % u,
                    isresize=True,
                    width=60,
                    height=60)
        d.add_items(rank_x % rank, 80, 170 + i * offset1)
        d.add_text(120,
                   160 + i * offset1,
                   '%s' % (udict.get(u, 'None')),
                   font_size=25,
                   ttype='en')
        d.add_text(120,
                   190 + i * offset1,
                   '得分: %s' % (format(int(r[u][0]), ',')),
                   font_size=20,
                   ttype='cn')
        d.add_text(300,
                   190 + i * offset1,
                   '(%sx)' % (format(int(r[u][1]), ',')),
                   font_size=20,
                   ttype='en')
        d.add_text(450 - 20 * len(mds_l),
                   165 + i * offset1,
                   '%s' % (m),
                   font_size=20,
                   ttype='en')
        d.add_text(400,
                   190 + i * offset1,
                   '%s%%' % (r[u][3]),
                   font_size=18,
                   ttype='en')

    d.add_text(150, 550, '个人最佳成绩', font_size=24, ttype='cn')
    d.draw_rectangle(x=20, y=590, width=460, height=60, fill=(0, 0, 0, 50))
    if me_idx != -1:
        r = rankjson[me_idx]
        u = uids[me_idx]
        mds = int(r[u][5])
        mds_l = mods.getMod(mds)
        m = ','.join(mds_l) if mds > 0 else ''
        rank = 'D' if r[u][4] == 'F' else r[u][4]
        d.add_items(x=20,
                    y=590,
                    path='image/userimg/%s.jpg' % me,
                    isresize=True,
                    width=60,
                    height=60)
        d.add_items(rank_x % rank, 80, 595)
        d.add_text(120, 590, '%s' % (udict[u]), font_size=25, ttype='en')
        d.add_text(120,
                   620,
                   '得分: %s' % (format(int(r[u][0]), ',')),
                   font_size=20,
                   ttype='cn')
        d.add_text(300,
                   620,
                   '(%sx)' % (format(int(r[u][1]), ',')),
                   font_size=20,
                   ttype='en')
        d.add_text(450 - 20 * len(mds_l),
                   600,
                   '%s' % (m),
                   font_size=20,
                   ttype='en')
        d.add_text(410, 620, '%s%%' % (r[u][3]), font_size=18, ttype='en')
    else:
        d.add_text(130, 600, '你倒是快刚榜啊', font_size=25, ttype='cn')

    # copy
    for i in range(r2):
        if i == 6:
            break
        oi = i + 6
        r = rankjson[oi]
        u = uids[oi]
        mds = int(r[u][5])
        mds_l = mods.getMod(mds)
        m = ','.join(mds_l) if mds > 0 else ''
        rank = 'D' if r[u][4] == 'F' else r[u][4]
        d.draw_rectangle(x=620,
                         y=160 + i * offset1,
                         width=460,
                         height=60,
                         fill=(0, 0, 0, 50))
        d.add_items(x=620,
                    y=160 + i * offset1,
                    path='image/userimg/%s.jpg' % u,
                    isresize=True,
                    width=60,
                    height=60)
        d.add_items(rank_x % rank, 680, 170 + i * offset1)
        d.add_text(720,
                   160 + i * offset1,
                   '%s' % (udict[u]),
                   font_size=25,
                   ttype='en')
        d.add_text(720,
                   190 + i * offset1,
                   '得分: %s' % (format(int(r[u][0]), ',')),
                   font_size=20,
                   ttype='cn')
        d.add_text(900,
                   190 + i * offset1,
                   '(%sx)' % (format(int(r[u][1]), ',')),
                   font_size=20,
                   ttype='en')
        d.add_text(1050 - 20 * len(mds_l),
                   165 + i * offset1,
                   '%s' % (m),
                   font_size=20,
                   ttype='en')
        d.add_text(1010,
                   190 + i * offset1,
                   '%s%%' % (r[u][3]),
                   font_size=18,
                   ttype='en')

    d.save('image/rank.png')