async def ag(bot: Bot, event: CQEvent): if isinstance(event, PrivateMessageEvent): await avatar_guess.finish('本功能仅支持群聊') elif isinstance(event, GroupMessageEvent): if gma.is_playing(event.group_id): await avatar_guess.finish('游戏仍在进行中…') with gma.start_game(event.group_id) as game1: ids = list(_pcr_data.CHARA_NAME.keys()) game1.answer = random.choice(ids) while chara.is_npc(game1.answer): game1.answer = random.choice(ids) c = chara.fromid(game1.answer) img = c.icon.open() w, h = img.size l = random.randint(0, w - PATCH_SIZE) u = random.randint(0, h - PATCH_SIZE) cropped = img.crop((l, u, l + PATCH_SIZE, u + PATCH_SIZE)) cropped = MessageSegment.image(util.pic2b64(cropped)) await bot.send( event, Message(f"猜猜这个图片是哪位角色头像的一部分?({A_TURN_TIME}s后公布答案) {cropped}")) await asyncio.sleep(A_TURN_TIME) if game1.winner: return await bot.send(event, Message(f"正确答案是:{c.name} {c.icon.cqcode}\n很遗憾,没有人答对~"))
async def chat_waifu(bot: Bot, event: CQEvent): if not priv.check_priv(event, priv.SUPERUSER): if random.random() < 0.50: await bot.send(event, Message(R.img('laopo.jpg').cqcode)) else: await bot.send(event, Message(R.img('喊谁老婆呢.jpg').cqcode)) else: await bot.send(event, 'mua~')
async def ban_word(bot: Bot, event: CQEvent): user_id = event.user_id user_info = await bot.get_stranger_info(user_id=user_id) nickname = user_info.get('nickname', '未知用户') salmon.logger.critical( f'Self: {event.self_id}, Message {event.message_id} from {user_id}: {event.message}' ) priv.set_block_user(user_id, timedelta(hours=8)) pic = R.img(f"chieri{random.randint(1, 4)}.jpg").cqcode if isinstance(event, GroupMessageEvent): await bot.send(event, Message(f">{nickname}\n不理你啦!バーカー\n{pic}")) await util.silence(bot, event, 8 * 60 * 60) elif isinstance(event, PrivateMessageEvent): await bot.send(event, Message(f"不理你啦!バーカー\n{pic}"))
async def whois(bot: Bot, event: CQEvent, state: T_State): name = event.get_plaintext().strip() if not name: 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_) if confi < 60: return uid = event.user_id user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') if not lmt.check(uid): if isinstance(event, GroupMessageEvent): await bot.send(event, f'>{nickname}\n兰德索尔花名册冷却中(剩余 {int(lmt.left_time(uid)) + 1}秒)') return elif isinstance(event, PrivateMessageEvent): await bot.send(event, f'兰德索尔花名册冷却中(剩余 {int(lmt.left_time(uid)) + 1}秒)') return lmt.start_cd(uid, 120 if guess else 0) if guess: if isinstance(event, GroupMessageEvent): msg = f'>{nickname}\n您有{confi}%的可能在找{guess_name} {c.icon.cqcode} {c.name}' elif isinstance(event, PrivateMessageEvent): msg = f'您有{confi}%的可能在找{guess_name} {c.icon.cqcode} {c.name}' await bot.send(event, Message(msg))
async def look_pool(bot: Bot, event: CQEvent): if isinstance(event, GroupMessageEvent): gid = str(event.group_id) gacha = Gacha(_group_pool[gid]) elif isinstance(event, PrivateMessageEvent): name = util.normalize_str(event.get_plaintext().strip()) if not name: await gacha_pool.finish('请后接区服简称\n※例:"查看卡池jp"') elif name in ('国', '国服', 'cn'): await gacha_pool.finish('请选择详细区服\n※例:"查看卡池b服"或"查看卡池台服"') elif name in ('b', 'b服', 'bl', 'bilibili', '陆', '陆服'): name = 'BL' elif name in ('台', '台服', 'tw', 'sonet'): name = 'TW' elif name in ('日', '日服', 'jp', 'cy', 'cygames'): name = 'JP' elif name in ('混', '混合', 'mix'): name = 'MIX' else: await gacha_pool.finish('未知区服,请接区服简称\n※例:"查看卡池jp"') gacha = Gacha(name) up_chara = gacha.up up_chara = map(lambda x: str(chara.fromname(x, star=3).icon.cqcode) + x, up_chara) up_chara = '\n'.join(up_chara) await gacha_pool.finish( Message( f"本期卡池主打的角色:\n{up_chara}\nUP概率合计={(gacha.up_prob/10):.1f}%\n3★出率={(gacha.s3_prob)/10:.1f}%" ))
async def update_seeker(): ''' 轮询官方四格漫画更新 若有更新则推送至订阅群 ''' index_api = 'https://comic.priconne-redive.jp/api/index' index = load_index() # 获取最新漫画信息 resp = await aiohttpx.get(index_api, timeout=10) data = resp.json() id_ = data['latest_cartoon']['id'] episode = data['latest_cartoon']['episode_num'] title = data['latest_cartoon']['title'] # 检查是否已在目录中 # 同一episode可能会被更新为另一张图片(官方修正),此时episode不变而id改变 # 所以需要两步判断 if episode in index: qs = urlparse(index[episode]['link']).query old_id = parse_qs(qs)['id'][0] if id_ == old_id: salmon.logger.info('未检测到官漫更新') return # 确定已有更新,下载图片 salmon.logger.info(f'发现更新 id={id_}') await download_comic(id_) # 推送至各个订阅群 pic = R.img('priconne/comic', get_pic_name(episode)).cqcode msg = Message(f'プリンセスコネクト!Re:Dive公式4コマ更新!\n第{episode}話 {title}\n{pic}') await sv.broadcast(msg, 'PCR官方四格', 0.5)
async def send_a_setu(bot, event): pic = get_setu() try: await bot.send(event, Message(pic.cqcode)) except: salmon.logger.error(f"发送图片{pic.path}失败") await bot.send(event, '涩图太涩,发不出去勒...')
async def gacha_jyu(bot: Bot, event: CQEvent, state: T_State): if isinstance(event, PrivateMessageEvent): name = util.normalize_str(state['name']) SUPER_LUCKY_LINE = 170 if name in ('国', '国服', 'cn'): await gacha_10.finish('请选择详细区服\n※例:"来发十连b服"或"来发十连台服"') elif name in ('b', 'b服', 'bl', 'bilibili', '陆', '陆服'): name = 'BL' elif name in ('台', '台服', 'tw', 'sonet'): name = 'TW' elif name in ('日', '日服', 'jp', 'cy', 'cygames'): name = 'JP' elif name in ('混', '混合', 'mix'): name = 'MIX' else: await gacha_10.finish('未知区服,请接区服简称\n※例:"来发十连jp"') gacha = Gacha(name) result, hiishi = gacha.gacha_ten() res1 = chara.gen_team_pic(result[:5], star_slot_verbose=False) res2 = chara.gen_team_pic(result[5:], star_slot_verbose=False) res = concat_pic([res1, res2]) res = pic2b64(res) res = MessageSegment.image(res) result = [f'{c.name}{"★"*c.star}' for c in result] res1 = ' '.join(result[0:5]) res2 = ' '.join(result[5:]) res = f'{res}\n{res1}\n{res2}' if hiishi >= SUPER_LUCKY_LINE: await bot.send(event, '恭喜海豹!おめでとうございます!') await gacha_10.finish(Message(f'素敵な仲間が増えますよ!\n{res}'))
async def dg(bot: Bot, event: CQEvent): if isinstance(event, PrivateMessageEvent): await desc_guess.finish('本功能仅支持群聊') elif isinstance(event, GroupMessageEvent): if gmd.is_playing(event.group_id): await bot.finish(event, "游戏仍在进行中…") with gmd.start_game(event.group_id) as game2: game2.answer = random.choice(list(_pcr_data.CHARA_PROFILE.keys())) profile = _pcr_data.CHARA_PROFILE[game2.answer] kws = list(profile.keys()) kws.remove('名字') random.shuffle(kws) kws = kws[:TURN_NUMBER] await bot.send( event, f"{PREPARE_TIME}秒后每隔{D_TURN_TIME}秒我会给出某位角色的一个描述,根据这些描述猜猜她是谁~") await asyncio.sleep(PREPARE_TIME) for i, k in enumerate(kws): await bot.send(event, f"提示{i + 1}/{len(kws)}:\n她的{k}是 {profile[k]}") await asyncio.sleep(D_TURN_TIME) if game2.winner: return c = chara.fromid(game2.answer) await bot.send(event, Message(f"正确答案是:{c.name} {c.icon.cqcode}\n很遗憾,没有人答对~"))
async def jyu_rec(bot: Bot, event: CQEvent, state: T_State): SUPER_LUCKY_LINE = 170 await check_jewel_num(bot, event) uid = event.user_id user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') jewel_limit.increase(uid, 1500) if isinstance(event, GroupMessageEvent): gid = event.group_id gacha = Gacha(_group_pool[gid]) result, hiishi = gacha.gacha_ten() res1 = chara.gen_team_pic(result[:5], star_slot_verbose=False) res2 = chara.gen_team_pic(result[5:], star_slot_verbose=False) res = concat_pic([res1, res2]) res = pic2b64(res) res = MessageSegment.image(res) result = [f'{c.name}{"★"*c.star}' for c in result] res1 = ' '.join(result[0:5]) res2 = ' '.join(result[5:]) res = f'{res}\n{res1}\n{res2}' if hiishi >= SUPER_LUCKY_LINE: await bot.send(event, '恭喜海豹!おめでとうございます!') await gacha_10.finish(Message(f'>{nickname}\n素敵な仲間が増えますよ!\n{res}')) elif isinstance(event, PrivateMessageEvent): args = util.normalize_str(event.get_plaintext().strip()) if args: state['name'] = args
async def d_input_chara_name(bot: Bot, event: CQEvent): game2 = gmd.get_game(event.group_id) if not game2 or game2.winner: return c = chara.fromname(event.message.extract_plain_text()) if c.id != chara.UNKNOWN and c.id == game2.answer: game2.winner = event.user_id n = game2.record() msg = f"正确答案是:{c.name}{c.icon.cqcode}\n{MessageSegment.at(event.user_id)}猜对了,真厉害!TA已经猜对{n}次了~\n(此轮游戏将在几秒后自动结束,请耐心等待)" await bot.send(event, Message(msg))
async def feedback(bot: Bot, event: CQEvent, state: T_State): text = state['text'] uid = event.user_id user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') su = salmon.configs.SUPERUSERS[0] if isinstance(event, GroupMessageEvent): await bot.send_private_msg( self_id=event.self_id, user_id=su, message=f'来自群聊{event.group_id}的{nickname}({uid}):\n========\n{text}' ) await bot.send(event, Message(f'>{nickname}\n您的反馈已发送至维护组!\n========\n{text}')) elif isinstance(event, PrivateMessageEvent): await bot.send_private_msg( self_id=event.self_id, user_id=su, message=f'{nickname}({uid}):\n========\n{text}') await bot.send(event, Message(f'您的反馈已发送至维护组!\n========\n{text}'))
async def rank_sheet(bot: Bot, event: CQEvent, state: T_State): user_info = await bot.get_stranger_info(user_id=event.user_id) nickname = user_info.get('nickname', '未知用户') name = util.normalize_str(state['name']) if name in ('国', '国服', 'cn'): if isinstance(event, GroupMessageEvent): await rank.finish(f'>{nickname}\n请选择详细区服\n※例:"rank表b服"或"rank表台服"') elif isinstance(event, PrivateMessageEvent): await rank.finish('请选择详细区服\n※例:"rank表b服"或"rank表台服"') elif name in ('b', 'b服', 'bl', 'bilibili', '陆', '陆服'): name = 'BL' elif name in ('台', '台服', 'tw', 'sonet'): name = 'TW' elif name in ('日', '日服', 'jp', 'cy', 'cygames'): name = 'JP' else: if isinstance(event, GroupMessageEvent): await rank.finish(f'>{nickname}\n未知区服,请重新选择\n*rank表日服\n*rank表台服\n*rank表b服') elif isinstance(event, PrivateMessageEvent): await rank.finish('未知区服,请重新选择\n*rank表日服\n*rank表台服\n*rank表b服') if isinstance(event, GroupMessageEvent): msg = [f'>{nickname}\n表格仅供参考'] elif isinstance(event, PrivateMessageEvent): msg = ['表格仅供参考'] if name == 'JP': msg.append(f'※不定期搬运自图中Q群\n※广告为原作者推广,与本bot无关\nR{rank_jp} rank表:\n{pjp}') # pos = match.group(3) # if not pos or '前' in pos: # msg.append(str(p4)) # if not pos or '中' in pos: # msg.append(str(p5)) # if not pos or '后' in pos: # msg.append(str(p6)) await bot.send(event, Message('\n'.join(msg))) elif name == 'TW': msg.append(f'※不定期搬运自漪夢奈特\n※详见油管频道\nR{rank_tw} rank表:\n{ptw}') await bot.send(event, Message('\n'.join(msg))) elif name == 'BL': msg.append(f'※不定期搬运自B站专栏\n※制作by席巴鸽\nR{rank_cn} rank表:\n{pcn}') await bot.send(event, Message('\n'.join(msg)))
async def get_spec_setu_res(bot: Bot, event: CQEvent, state: T_State): pid = state['pid'] args = str(pid) if len(args) == 8: msg = get_spec_image(args) if not msg: await get_pic.send( f'没有在本地找到这张图片/不支持r18图片的提取\n请尝试此原图链接:\nhttps://pixiv.lancercmd.cc/{args}', call_header=True) else: await get_pic.send(Message(msg), call_header=True) else: await get_pic.send('Pid应为8位数字id哦~', call_header=True)
async def read_comic(bot: Bot, event: CQEvent, state: T_State): episode = state['episode'] user_info = await bot.get_stranger_info(user_id=event.user_id) nickname = user_info.get('nickname', '未知用户') if not re.fullmatch(r'\d{0,3}', episode): raise FinishedException episode = episode.lstrip('0') index = load_index() if episode not in index: if isinstance(event, GroupMessageEvent): await comic.finish(f'>{nickname}\n未查找到第{episode}话,敬请期待官方更新') elif isinstance(event, PrivateMessageEvent): await comic.finish(f'未查找到第{episode}话,敬请期待官方更新') title = index[episode]['title'] pic = R.img('priconne/comic/', get_pic_name(episode)).cqcode if isinstance(event, GroupMessageEvent): await comic.finish( Message( f'>{nickname}\nプリンセスコネクト!Re:Dive公式4コマ\n第{episode}話 {title}\n{pic}' )) elif isinstance(event, PrivateMessageEvent): await comic.finish( Message(f'プリンセスコネクト!Re:Dive公式4コマ\n第{episode}話 {title}\n{pic}'))
async def whois(bot: Bot, event: CQEvent): name = event.get_plaintext().strip() if not name: 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_) if confi < 60: return uid = event.user_id if not lmt.check(uid): await who_is.finish(f'兰德索尔花名册冷却中(剩余 {int(lmt.left_time(uid)) + 1}秒)', call_header=True) lmt.start_cd(uid, 120 if guess else 0) if guess: msg = f'兰德索尔似乎没有叫"{name}"的人...\n角色别称补全计划: github.com/Ice-Cirno/HoshinoBot/issues/5\n您有{confi}%的可能在找{guess_name} {c.icon.cqcode} {c.name}' await who_is.send(Message(msg), call_header=True) else: msg = f'{c.icon.cqcode} {c.name}' await who_is.finish(Message(msg), call_header=True)
async def ichi_rec(bot: Bot, event: CQEvent, state: T_State): await check_jewel_num(bot, event) uid = event.user_id jewel_limit.increase(uid, 150) user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') if isinstance(event, GroupMessageEvent): gid = event.group_id gacha = Gacha(_group_pool[gid]) chara, _ = gacha.gacha_one(gacha.up_prob, gacha.s3_prob, gacha.s2_prob) res = f'{chara.icon.cqcode} {chara.name} {"★"*chara.star}' await gacha_1.finish(Message(f'>{nickname}\n素敵な仲間が増えますよ!\n{res}')) elif isinstance(event, PrivateMessageEvent): args = util.normalize_str(event.get_plaintext().strip()) if args: state['name'] = args
async def online_setu(bot, event, keyword): uid = event.user_id url = 'https://api.lolicon.app/setu/' params = salmon.configs.setu.setu_config if keyword != "": params["keyword"] = keyword else: keyword = "" resp = requests.get(url=url, params=params) status_code = resp.status_code if status_code != 200: salmon.logger.error("status_code error") resp_json = resp.json() resp_code = resp_json["code"] if resp_code != 0: if resp_code == 429: await bot.send(event, "API总调用额度达到上限,将随机发送本地图片") _flmt.start_cd(uid) _nlmt.increase(uid) await send_a_setu(bot, event) return elif resp_code == 404: await bot.send(event, resp_json["msg"] + ",将随机发送本地图库中的图片") _flmt.start_cd(uid) _nlmt.increase(uid) await send_a_setu(bot, event) return elif resp_code == 403: await bot.send(event, resp_json["msg"] + ",请联系维护(error code 403)") return elif resp_code == 401: await bot.send(event, resp_json["msg"] + ",请联系维护(error code 401)") return elif resp_code == -1: await bot.send(event, "API错误,请联系维护") return if uid not in salmon.configs.SUPERUSERS: _flmt.start_cd(uid) _nlmt.increase(uid) resp_data = resp_json["data"][0] img_url = resp_data["url"] msg = f'「{resp_data["title"]}」/「{resp_data["author"]}」\nPID:{resp_data["pid"]}\n[CQ:image,timeout=20,file={img_url}]' try: await bot.send(event, Message(msg)) except NetworkError: salmon.logger.error(f"发送图片{img_url}失败: WebSocket API call timeout") await bot.send(event, '涩图太涩,发不出去勒...')
async def give_okodokai(bot: Bot, event: CQEvent): uid = event.user_id user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') if not lmt.check(uid): if isinstance(event, GroupMessageEvent): await login.finish(f'>{nickname}\n明日はもう一つプレゼントをご用意してお待ちしますね') elif isinstance(event, PrivateMessageEvent): await login.finish('明日はもう一つプレゼントをご用意してお待ちしますね') lmt.increase(uid) present = random.choice(login_presents) todo = random.choice(todo_list) pic = Message(R.img("priconne/kokkoro_stamp.png").cqcode) if isinstance(event, GroupMessageEvent): msg = f'>{nickname}\nおかえりなさいませ、主さま' + pic + f'\n{present}を獲得しました\n私からのプレゼントです\n主人今天要{todo}吗?' elif isinstance(event, PrivateMessageEvent): msg = 'おかえりなさいませ、主さま' + pic + f'\n{present}を獲得しました\n私からのプレゼントです\n主人今天要{todo}吗?' await login.finish(msg)
async def chain_reply(bot, event, chain, msg): if isinstance(event, PrivateMessageEvent): await bot.send(event, Message(msg)) return chain elif not CHAIN_REPLY: await bot.send(event, msg) return chain else: data = { "type": "node", "data": { "name": '小冰', "uin": '2854196306', "content": str(msg) } } chain.append(data) return chain
async def gacha_ichi(bot: Bot, event: CQEvent, state: T_State): if isinstance(event, PrivateMessageEvent): name = util.normalize_str(state['name']) if name in ('国', '国服', 'cn'): await gacha_1.finish('请选择详细区服\n※例:"来发单抽b服"或"来发单抽台服"') elif name in ('b', 'b服', 'bl', 'bilibili', '陆', '陆服'): name = 'BL' elif name in ('台', '台服', 'tw', 'sonet'): name = 'TW' elif name in ('日', '日服', 'jp', 'cy', 'cygames'): name = 'JP' elif name in ('混', '混合', 'mix'): name = 'MIX' else: await gacha_1.finish('未知区服,请接区服简称\n※例:"来发单抽jp"') gacha = Gacha(name) chara, _ = gacha.gacha_one(gacha.up_prob, gacha.s3_prob, gacha.s2_prob) res = f'{chara.icon.cqcode} {chara.name} {"★"*chara.star}' await gacha_1.finish(Message(f'素敵な仲間が増えますよ!\n{res}'))
async def send_msg(msg_list, bot, event): result_list = [] if not get_config('base', 'enable_forward_msg') or isinstance( event, PrivateMessageEvent): for msg in msg_list: try: result_list.append(await bot.send(event, Message(msg))) except: salmon.logger.error('图片发送失败') await bot.send(event, '涩图太涩,发不出去力...') await asyncio.sleep(1) return result_list else: forward_msg = render_forward_msg(msg_list) try: await bot.send_group_forward_msg(group_id=event.group_id, messages=forward_msg) except: traceback.print_exc() salmon.logger.error('图片发送失败') await bot.send(event, '涩图太涩,发不出去力...') await asyncio.sleep(1) return list(range(len(msg_list)))
async def chat_clanba(bot: Bot, event: CQEvent): if random.random() < 0.02: await bot.send(event, Message(R.img('我的天啊你看看都几点了.jpg').cqcode))
async def rank_sheet(bot: Bot, event: CQEvent, state: T_State): if config == None: await load_config() match = state['match'] is_jp = match.group(2) == "日" is_tw = match.group(2) == "台" is_cn = match.group(2) and match.group(2) in "国陆b" if not is_jp and not is_tw and not is_cn: await rank.finish("请问您要查询哪个区服的rank表?\n*日rank表\n*台rank表\n*陆rank表", call_header=True) msg = [] if is_jp: rank_config_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), "cache", "jp.json") rank_config = None with open(rank_config_path, "r", encoding="utf8") as fp: rank_config = json.load(fp) rank_imgs = [] for img_name in rank_config["files"]: rank_imgs.append( f'file:///{os.path.join(os.path.dirname(__file__), "cache", "pic", f"jp_{img_name}")}' ) msg.append(rank_config["notice"]) pos = match.group(3) if not pos or "前" in pos: msg.append(f"[CQ:image,file={rank_imgs[0]}]") if not pos or "中" in pos: msg.append(f"[CQ:image,file={rank_imgs[1]}]") if not pos or "后" in pos: msg.append(f"[CQ:image,file={rank_imgs[2]}]") await rank.send(Message("".join(msg)), call_header=True) elif is_tw: rank_config_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), "cache", "tw.json") rank_config = None with open(rank_config_path, "r", encoding="utf8") as fp: rank_config = json.load(fp) rank_imgs = [] for img_name in rank_config["files"]: rank_imgs.append( f'file:///{os.path.join(os.path.dirname(__file__), "cache", "pic", f"tw_{img_name}")}' ) msg.append(rank_config["notice"]) for rank_img in rank_imgs: msg.append(f"[CQ:image,file={rank_img}]") await rank.send(Message("".join(msg)), call_header=True) elif is_cn: rank_config_path = os.path.join( os.path.abspath(os.path.dirname(__file__)), "cache", "cn.json") rank_config = None with open(rank_config_path, "r", encoding="utf8") as fp: rank_config = json.load(fp) rank_imgs = [] for img_name in rank_config["files"]: rank_imgs.append( f'file:///{os.path.join(os.path.dirname(__file__), "cache", "pic", f"cn_{img_name}")}' ) msg.append(rank_config["notice"]) for rank_img in rank_imgs: msg.append(f"[CQ:image,file={rank_img}]") await rank.send(Message("".join(msg)), call_header=True)
async def gacha_nibyaku(bot: Bot, event: CQEvent, state: T_State): if isinstance(event, PrivateMessageEvent): name = util.normalize_str(state['name']) if name in ('国', '国服', 'cn'): await gacha_200.finish('请选择详细区服\n※例:"来一井b服"或"来一井台服"') elif name in ('b', 'b服', 'bl', 'bilibili', '陆', '陆服'): name = 'BL' elif name in ('台', '台服', 'tw', 'sonet'): name = 'TW' elif name in ('日', '日服', 'jp', 'cy', 'cygames'): name = 'JP' elif name in ('混', '混合', 'mix'): name = 'MIX' else: await gacha_200.finish('未知区服,请接区服简称\n※例:"来一井jp"') gacha = Gacha(name) result = gacha.gacha_tenjou() up = len(result['up']) s3 = len(result['s3']) s2 = len(result['s2']) s1 = len(result['s1']) res = [*(result['up']), *(result['s3'])] random.shuffle(res) lenth = len(res) if lenth <= 0: res = "竟...竟然没有3★?!" else: step = 4 pics = [] for i in range(0, lenth, step): j = min(lenth, i + step) pics.append( chara.gen_team_pic(res[i:j], star_slot_verbose=False)) res = concat_pic(pics) res = pic2b64(res) res = MessageSegment.image(res) msg = [ f"素敵な仲間が増えますよ! {res}", f"★★★×{up+s3} ★★×{s2} ★×{s1}", f"获得记忆碎片×{100*up}与女神秘石×{50*(up+s3) + 10*s2 + s1}!\n第{result['first_up_pos']}抽首次获得up角色" if up else f"获得女神秘石{50*(up+s3) + 10*s2 + s1}个!" ] if up == 0 and s3 == 0: msg.append("太惨了,咱们还是退款删游吧...") elif up == 0 and s3 > 5: msg.append("up呢?我的up呢?") elif up == 0 and s3 <= 2: msg.append("这位酋长,梦幻包考虑一下?") elif up == 0: msg.append("据说天井的概率只有12.16%") elif up <= 2: if result['first_up_pos'] < 50: msg.append("你的喜悦我收到了,滚去喂鲨鱼吧!") elif result['first_up_pos'] < 100: msg.append("已经可以了,您已经很欧了") elif result['first_up_pos'] > 190: msg.append("标 准 结 局") elif result['first_up_pos'] > 150: msg.append("补井还是不补井,这是一个问题...") else: msg.append("期望之内,亚洲水平") elif up == 3: msg.append("抽井母五一气呵成!多出30等专武~") elif up >= 4: msg.append("记忆碎片一大堆!您是托吧?") msg = Message('\n'.join(msg)) await gacha_200.finish(msg)
async def send_seina(bot: Bot, event: CQEvent): await bot.send(event, Message(R.img('星奏.png').cqcode))
async def nibyaku_rec(bot: Bot, event: CQEvent, state: T_State): await check_tenjo_num(bot, event) uid = event.user_id user_info = await bot.get_stranger_info(user_id=uid) nickname = user_info.get('nickname', '未知用户') tenjo_limit.increase(uid) if isinstance(event, GroupMessageEvent): gid = event.group_id gacha = Gacha(_group_pool[gid]) result = gacha.gacha_tenjou() up = len(result['up']) s3 = len(result['s3']) s2 = len(result['s2']) s1 = len(result['s1']) res = [*(result['up']), *(result['s3'])] random.shuffle(res) lenth = len(res) if lenth <= 0: res = "竟...竟然没有3★?!" else: step = 4 pics = [] for i in range(0, lenth, step): j = min(lenth, i + step) pics.append( chara.gen_team_pic(res[i:j], star_slot_verbose=False)) res = concat_pic(pics) res = pic2b64(res) res = MessageSegment.image(res) msg = [ f">{nickname}\n" f"素敵な仲間が増えますよ! {res}", f"★★★×{up+s3} ★★×{s2} ★×{s1}", f"获得记忆碎片×{100*up}与女神秘石×{50*(up+s3) + 10*s2 + s1}!\n第{result['first_up_pos']}抽首次获得up角色" if up else f"获得女神秘石{50*(up+s3) + 10*s2 + s1}个!" ] if up == 0 and s3 == 0: msg.append("太惨了,咱们还是退款删游吧...") elif up == 0 and s3 > 5: msg.append("up呢?我的up呢?") elif up == 0 and s3 <= 2: msg.append("这位酋长,梦幻包考虑一下?") elif up == 0: msg.append("据说天井的概率只有12.16%") elif up <= 2: if result['first_up_pos'] < 50: msg.append("你的喜悦我收到了,滚去喂鲨鱼吧!") elif result['first_up_pos'] < 100: msg.append("已经可以了,您已经很欧了") elif result['first_up_pos'] > 190: msg.append("标 准 结 局") elif result['first_up_pos'] > 150: msg.append("补井还是不补井,这是一个问题...") else: msg.append("期望之内,亚洲水平") elif up == 3: msg.append("抽井母五一气呵成!多出30等专武~") elif up >= 4: msg.append("记忆碎片一大堆!您是托吧?") msg = Message('\n'.join(msg)) await gacha_200.finish(msg) elif isinstance(event, PrivateMessageEvent): args = util.normalize_str(event.get_plaintext().strip()) if args: state['name'] = args
async def chat_neigui(bot: Bot, event: CQEvent): if random.random() < 0.10: await bot.send(event, Message(R.img('内鬼.png').cqcode))
async def chat_queshi(bot: Bot, event: CQEvent): if random.random() < 0.05: await bot.send(event, Message(R.img('确实.jpg').cqcode))
all_season[11:101] = 50 all_season[101:201] = 30 all_season[201:501] = 10 all_season[501:1001] = 5 all_season[1001:2001] = 3 all_season[2001:4001] = 2 all_season[4001:7999] = 1 all_season[8100:15001:100] = 30 server_addr = "https://pcresource.coldthunder11.com/rank/" resize_pic = False config = None YUKARI_SHEET = Message(f'''{R.img('priconne/quick/黄骑充电.jpg').cqcode} ※大圈是1动充电对象 PvP测试 ※黄骑四号位例外较多 ※对面羊驼或中后卫坦 有可能歪 ※我方羊驼算一号位 ※图片搬运自漪夢奈特''') sv_help = ''' [日/台/陆rank] rank推荐表 [查看当前/全部rank更新源] [设置rank更新源] [更新rank表缓存] [挖矿15001] 矿场余钻 [黄骑充电表] 黄骑1动规律 [谁是霸瞳] 角色别称查询 '''.strip() sv = Service('pcr-query', help_=sv_help, bundle='pcr查询')