コード例 #1
0
ファイル: whois.py プロジェクト: Lostdegree/HoshinoBot
async def ubrec(bot, ev: CQEvent):
    uid = ev.user_id
    if not lmt.check(uid):
        await bot.send(ev,
                       f'您〇太快了,请稍等一会儿(剩余 {int(lmt.left_time(uid)) + 1}秒)',
                       at_sender=True)
        return
    lmt.start_cd(uid, 5)

    name = ev.message.extract_plain_text().strip()
    if not name:
        await bot.send(ev, '请发送"谁是"+别称,如"谁是霸瞳"')
        return
    id_ = chara.name2id(name)
    confi = 100
    guess = False
    if id_ == chara.UNKNOWN:
        id_, guess_name, confi = chara.guess_id(name)
        guess = True
    c = chara.fromid(id_)

    msg = ''
    if guess:
        lmt.start_cd(uid, 60)
        msg = f'兰德索尔似乎没有叫"{name}"的人...\n角色别称补全计划: github.com/Ice-Cirno/HoshinoBot/issues/5 \n您有{confi}%的可能在找{guess_name} '
        await bot.send(ev, msg)
        #msg = f'\n您有{confi}%的可能在找{guess_name} '

    if confi > 60 and R.rec(f'priconne/rec/rec_unit_{id_}_ub.mp3').exist:
        msg = R.rec(f'priconne/rec/rec_unit_{id_}_ub.mp3').cqcode
        await bot.send(ev, msg, at_sender=False)

    else:
        await bot.send(ev, f'暂时未收录对应语音,该宁来表演了~', at_sender=True)
コード例 #2
0
async def record_send(bot, ev: CQEvent):

    name = ev.message.extract_plain_text().strip()
    if not name:
        await bot.send(ev, '请发送"语音"+角色名,如"语音ue"')
        return
    cid = chara.name2id(name)
    if cid == chara.UNKNOWN:
        msg = f'兰德索尔似乎没有叫"{name}"的人...'
        await bot.send(ev, msg)
        return

    dir_path = R.get('record', str(cid)).path
    if not os.path.exists(dir_path):
        msg = f'未找到"{name}"的语音数据'
        await bot.send(ev, msg)
        return

    file_list = os.listdir(dir_path)
    file_path = None
    while not file_path or not os.path.isfile(file_path):
        filename = random.choice(file_list)
        file_path = os.path.join(dir_path, filename)
    if not file_path:
        msg = f'未找到"{name}"的语音数据'
        await bot.send(ev, msg)
        return
    rec = MessageSegment.record(f'file:///{os.path.abspath(file_path)}')
    await bot.send(ev, rec)
コード例 #3
0
async def leave_girl(bot, ev: CQEvent):
    args = ev.message.extract_plain_text().split()
    gid = ev.group_id
    uid = ev.user_id
    if not args:
        await bot.send(ev, '请输入分手吧!/丢弃+pcr角色名。', at_sender=True)
        return
    name = args[0]
    cid = chara.name2id(name)
    if cid == 1000:
        await bot.send(ev, '请输入正确的pcr角色名。', at_sender=True)
        return
    duel = DuelCounter()
    score_counter = ScoreCounter2()
    owner = duel._get_card_owner(gid, cid)
    c = chara.fromid(cid)

    if owner == 0 or int(owner) != uid:
        await bot.send(ev,
                       f'[CQ:at,qq={uid}]{c.name}现在还不是你的女友哦。',
                       at_sender=True)
        return
    else:
        if cid > 10000:
            #检查金币是否足够分手
            if score_counter._judge_score(gid, uid, 500) == 0:
                msg = '您的金币不足,抛弃男公主需支付500分手费。'
                await bot.send(ev, msg, at_sender=True)
                return
            score_counter._reduce_score(gid, uid, 500)
            msg = f'[CQ:at,qq={uid}]你抛弃了男公主!支付分手费500金币。\n{c.name}流着眼泪离开了~'
        else:
            msg = f'[CQ:at,qq={uid}]{c.name}流着眼泪离开了~'
        duel._delete_card(gid, uid, cid)
        await bot.send(ev, msg)
コード例 #4
0
ファイル: whois.py プロジェクト: Lostdegree/HoshinoBot
async def whois(bot, ev: CQEvent):
    uid = ev.user_id
    if not lmt.check(uid):
        await bot.send(ev,
                       f'兰德索尔花名册冷却中(剩余 {int(lmt.left_time(uid)) + 1}秒)',
                       at_sender=True)
        return
    lmt.start_cd(uid)

    name = ev.message.extract_plain_text().strip()
    if not name:
        await bot.send(ev, '请发送"谁是"+别称,如"谁是霸瞳"')
        return
    id_ = chara.name2id(name)
    confi = 100
    guess = False
    if id_ == chara.UNKNOWN:
        id_, guess_name, confi = chara.guess_id(name)
        guess = True
    c = chara.fromid(id_)

    msg = ''
    if guess:
        lmt.start_cd(uid, 60)
        msg = f'兰德索尔似乎没有叫"{name}"的人...\n角色别称补全计划: github.com/Ice-Cirno/HoshinoBot/issues/5'
        await bot.send(ev, msg)
        msg = f'\n您有{confi}%的可能在找{guess_name} '

    if confi > 60:
        msg += f'{c.icon.cqcode} {c.name}'
        await bot.send(ev, msg, at_sender=True)
コード例 #5
0
ファイル: cechara.py プロジェクト: a376148946/pcrduel
async def my_fashion_info(bot, ev: CQEvent):
    args = ev.message.extract_plain_text().split()
    gid = ev.group_id
    uid = ev.user_id
    if not args:
        await bot.send(ev, '请输入我的女友+pcr角色名。', at_sender=True)
        return
    name = args[0]
    cid = chara.name2id(name)
    if cid == 1000:
        await bot.send(ev, '请输入正确的pcr角色名。', at_sender=True)
        return
    duel = DuelCounter()
    score_counter = ScoreCounter2()
    c = chara.fromid(cid)
    nvmes = get_nv_icon(cid)
    lh_msg = ''
    fashioninfo = get_fashion(cid)
    up_icon = ''
    up_info = duel._get_fashionup(gid, uid, cid, 0)
    jishu = 0
    up_name = ''
    if fashioninfo:
        for fashion in fashioninfo:
            buy_info = duel._get_fashionbuy(gid, uid, cid, fashion['fid'])
            if up_info == fashion['fid']:
                up_icon = fashion['icon']
                up_name = fashion['name']
            if buy_info:
                if up_info != fashion['fid']:
                    jishu = jishu + 1
                    if jishu < 3:
                        lh_msg = lh_msg + f"\n{fashion['icon']}\n{fashion['name']}"
    owner = duel._get_card_owner(gid, cid)
    if uid != owner:
        msg = f'{c.name}现在正在\n[CQ:at,qq={owner}]的身边哦,您无法查询哦。'
        await bot.send(ev, msg)
        return
    if owner == 0:
        await bot.send(ev, f'{c.name}现在还是单身哦,快去约到她吧。{nvmes}', at_sender=True)
        return
    if uid == owner:
        queen_msg = ''
        if duel._get_queen_owner(gid, cid) != 0:
            queen_msg = f'现在是您的妻子\n'
        if duel._get_favor(gid, uid, cid) == None:
            duel._set_favor(gid, uid, cid, 0)
        favor = duel._get_favor(gid, uid, cid)
        relationship, text = get_relationship(favor)
        if up_icon:
            nvmes = up_icon
        up_msg = ''
        if up_name:
            up_msg = f"\n目前穿戴的时装是{up_name}\n"
        if lh_msg:
            lh_msg = f"\n您为{c.name}购买的时装有(只显示未穿的2件):" + lh_msg
        msg = f'\n{c.name}{queen_msg}对你的好感是{favor}\n你们的关系是{relationship}\n“{text}”{up_msg}{nvmes}{lh_msg}'
    await bot.send(ev, msg, at_sender=True)
コード例 #6
0
async def on_input_chara_name(bot, ev: CQEvent):
    try:
        if winner_recorder.get_on_off_status():
            s = ev.message.extract_plain_text()
            cid = chara.name2id(s)
            if cid != chara.UNKNOWN and cid == winner_recorder.correct_chara_id:
                winner_recorder.record_winner(ev.user_id)
    except Exception as e:
        await bot.send(ev, '错误:\n' + str(e))
コード例 #7
0
async def select_player(bot, ev: CQEvent):
    global g_result, g_uid
    pkey = ev.message.extract_plain_text().strip()
    id_ = chara.name2id(pkey)
    p = chara.fromid(id_)
    if p.name not in g_result:
        await bot.finish(ev, f'所选角色未在参赛角色中')
    await bot.send(ev, f'已选择{p.name},比赛开始', at_sender=True)
    await compe(bot, ev, p.name)
    g_uid = 0
コード例 #8
0
def get_card_id_by_card_name(card_name):
    if card_name.startswith('超稀有'):
        rarity = 1
        star = '6'
        chara_name_no_prefix = card_name[3:]
    elif card_name.startswith('稀有'):
        rarity = 0
        star = '3'
        chara_name_no_prefix = card_name[2:]
    else:
        rarity = -1
        star = '1'
        chara_name_no_prefix = card_name[2:] if card_name.startswith(
            '普通') else card_name
    chara_id = chara.name2id(chara_name_no_prefix)
    return (30000 + rarity * 1000 + chara_id) if chara_id != chara.UNKNOWN and chara_id in chara_ids[star] else 0
コード例 #9
0
async def on_input_chara_name(bot, ev: CQEvent):
    try:
        if winner_judger.get_on_off_status():
            s = ev.message.extract_plain_text()
            cid = chara.name2id(s)
            if cid != chara.UNKNOWN and cid == winner_judger.correct_chara_id and winner_judger.winner == '':
                winner_judger.record_winner(ev.user_id)
                winning_counter = WinningCounter()
                winning_counter._record_winning(ev.user_id)
                winning_count = winning_counter._get_winning_number(ev.user_id)
                user_card_dict = await get_user_card_dict(bot, ev.group_id)
                user_card = uid2card(ev.user_id, user_card_dict)
                msg_part = f'{user_card}猜对了,真厉害!TA已经猜对{winning_count}次了~\n(此轮游戏将在几秒后自动结束,请耐心等待)'
                name, cqcode = get_cqcode(winner_judger.correct_chara_id)
                msg = f'正确答案是: {name}{cqcode}\n{msg_part}'
                await bot.send(ev, msg)
    except Exception as e:
        await bot.send(ev, '错误:\n' + str(e))
コード例 #10
0
ファイル: game.py プロジェクト: jyk714017560/HoshinoBot
async def input_chara_name(bot, ev: CQEvent):

    gid = str(ev.group_id)
    if not _group_game[gid]:
        return

    if not ev['message'][0]['type'] == 'text':
        return

    if _group_game[gid] == 'voiceguess' or _group_game[gid] == 'cardguess':
        name = ev.message.extract_plain_text().strip()
        _id = chara.name2id(name)
        if _id == _group_parameter[gid]:
            _group_winner[gid].append(ev['sender']['nickname'])
        else:
            return
    else:
        return
コード例 #11
0
async def send_girl(bot, ev: CQEvent):
    msg = str(ev.message)
    if not msg:
        await bot.send(ev, '格式错误。', at_sender=True)
        return
    match = re.match(r'(.+)\[CQ:at,qq=(\d+)\]', msg)
    gid = ev.group_id
    uid = ev.user_id
    name = match.group(1)
    accepter = int(match.group(2))
    cid = chara.name2id(name)
    if cid == 1000:
        await bot.send(ev, '请输入正确的pcr角色名。', at_sender=True)
        return
    duel = DuelCounter()
    score_counter = ScoreCounter2()
    owner = duel._get_card_owner(gid, cid)
    c = chara.fromid(cid)

    if owner == 0 or int(owner) != uid:
        await bot.send(ev,
                       f'[CQ:at,qq={uid}]{c.name}现在还不是你的女友哦。',
                       at_sender=True)
        return
    else:
        if send_judger.get_status(gid, uid, accepter):
            await bot.send(ev, f'请勿重复使用指令。', at_sender=True)
            return
        send_judger.accept_on_off(gid, uid, accepter, False)
        send_judger.turn_on_off(gid, uid, accepter, True)
        msg = f'[CQ:at,qq={accepter}]对方向您赠送了女友{c.name},\n{c.icon.cqcode}\n请在{WAIT_TIME}秒内[YES/NO]@xxx。'
        await bot.send(ev, msg)

        await asyncio.sleep(WAIT_TIME)
        status = send_judger.get_accept_status(gid, uid, accepter)
        send_judger.turn_on_off(gid, uid, accepter, False)
        if not status:
            msg = f'对方拒绝了您的赠送请求'
            await bot.send(ev, msg, at_sender=True)
            return
        duel._delete_card(gid, uid, cid)
        duel._add_card(gid, accepter, cid)
        msg = f'[CQ:at,qq={uid}]{c.name}对你依依不舍,但还是投入了[CQ:at,qq={accepter}]的怀抱。'
        await bot.send(ev, msg)
コード例 #12
0
async def birthday_search_chara(bot, ev):
    unitdata = load_chara_data()
    name = ev.message.extract_plain_text().strip()
    if not name:
        await bot.send(ev, f'没有找到“{name}”的生日信息呢...')
        return
    chara_id = chara.name2id(name)
    confi = 100
    if chara_id == chara.UNKNOWN:
        chara_id, guess_name, confi = chara.guess_id(name)
    if confi > 60:
        chara_birthday = unitdata[str(chara_id)]['生日']
        if not chara_birthday:
            await bot.send(ev, f'没有找到“{name}”的生日信息呢...')
            return
        else:
            chara_name, cqcode = get_cqcode(chara_id)
            await bot.send(ev,
                           f'{chara_name}ちゃん{cqcode}在{chara_birthday}过生日哦~')
コード例 #13
0
async def search_girl(bot, ev: CQEvent):
    args = ev.message.extract_plain_text().split()
    gid = ev.group_id
    if not args:
        await bot.send(ev, '请输入查女友+pcr角色名。', at_sender=True)
        return
    name = args[0]
    cid = chara.name2id(name)
    if cid == 1000:
        await bot.send(ev, '请输入正确的pcr角色名。', at_sender=True)
        return
    duel = DuelCounter()
    owner = duel._get_card_owner(gid, cid)
    c = chara.fromid(cid)

    if owner == 0:
        await bot.send(ev, f'{c.name}现在还是单身哦,快去约到她吧。', at_sender=True)
        return
    else:
        msg = f'{c.name}现在正在\n[CQ:at,qq={owner}]的身边哦。{c.icon.cqcode}'
        await bot.send(ev, msg)
コード例 #14
0
async def on_input_chara_name(bot, ev: CQEvent):
    try:
        if winner_judger.get_on_off_status(ev.group_id):
            s = ev.message.extract_plain_text()
            cid = chara.name2id(s)
            if cid != chara.UNKNOWN and cid == winner_judger.get_correct_chara_id(ev.group_id) and winner_judger.get_winner(ev.group_id) == '':
                winner_judger.record_winner(ev.group_id, ev.user_id)
                winning_counter = WinningCounter()
                winning_counter._record_winning(ev.group_id, ev.user_id)
                winning_count = winning_counter._get_winning_number(ev.group_id, ev.user_id)
                user_card_dict = await get_user_card_dict(bot, ev.group_id)
                user_card = uid2card(ev.user_id, user_card_dict)
                msg_part = f'{user_card}猜对了,真厉害!TA已经猜对{winning_count}次了~\n(此轮游戏将在时间到后自动结束,请耐心等待)'
                c = chara.fromid(winner_judger.get_correct_chara_id(ev.group_id))
                jewel_counter = jewel.jewelCounter()
                winning_jewel = 35
                jewel_counter._add_jewel(ev.group_id, ev.user_id, winning_jewel)
                msg_part2 = f'{user_card}获得了{winning_jewel}宝石'
                msg =  f'正确答案是: {c.name}{c.icon.cqcode}\n{msg_part}\n{msg_part2}'
                await bot.send(ev, msg)
    except Exception as e:
        await bot.send(ev, '错误:\n' + str(e))
コード例 #15
0
async def birthday_search_chara(bot, ev: CQEvent):
    # _pcr_data中添加了角色资料,废弃json,改用前者
    unitdata = _pcr_data.CHARA_PROFILE
    name = ev['raw_message'].replace("生日", "").replace("过", "").replace(
        "在", "").replace("哪天", "").replace("那天", "").replace("的", "").replace(
            "啊", "").replace("呀", "").replace("呢",
                                              "").replace(" ",
                                                          "").replace("?", "")
    if not name:
        return
    chara_id = chara.name2id(name)
    confi = 100
    if chara_id == chara.UNKNOWN:
        chara_id, guess_name, confi = chara.guess_id(name)
    if confi > 60:
        chara_birthday = unitdata[chara_id]['生日']
        if not chara_birthday:
            await bot.send(ev, '没有找到角色的生日信息呢。。。')
            return
        else:
            chara_name, cqcode = get_cqcode(chara_id)
            await bot.send(ev,
                           f'{chara_name}ちゃん{cqcode}在{chara_birthday}过生日哦~')
コード例 #16
0
async def birthday_search_chara(bot, ev: CQEvent):
    with open(r"hoshino\modules\birthday\unitdata.json", "r",
              encoding='utf-8') as f:
        unitdata = json.load(f)
    name = ev['raw_message'].replace("生日", "").replace("过", "").replace(
        "在", "").replace("哪天", "").replace("那天", "").replace("的", "").replace(
            "啊", "").replace("呀", "").replace("呢",
                                              "").replace(" ",
                                                          "").replace("?", "")
    if not name:
        return
    chara_id = chara.name2id(name)
    confi = 100
    if chara_id == chara.UNKNOWN:
        chara_id, guess_name, confi = chara.guess_id(name)
    if confi > 60:
        chara_birthday = unitdata[str(chara_id)]['生日']
        if not chara_birthday:
            await bot.send(ev, '没有找到角色的生日信息呢。。。')
            return
        else:
            chara_name, cqcode = get_cqcode(chara_id)
            await bot.send(ev,
                           f'{chara_name}ちゃん{cqcode}在{chara_birthday}过生日哦~')
コード例 #17
0
ファイル: boxcolle.py プロジェクト: uroxic/HoshinoBot
def chara_name2chara_id(name):
    return chara.name2id(name.strip())
コード例 #18
0
def get_card_id(chara_name):
    rarity = 1 if chara_name.startswith('稀有') else 0
    chara_name_no_prefix = chara_name[2:] if rarity else chara_name
    chara_id = chara.name2id(chara_name_no_prefix)
    return (30000 + rarity * 1000 +
            chara_id) if chara_id != chara.UNKNOWN else 0