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)
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)
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)
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)
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)
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))
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
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
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))
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
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)
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}过生日哦~')
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)
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))
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}过生日哦~')
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}过生日哦~')
def chara_name2chara_id(name): return chara.name2id(name.strip())
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