async def word_back_10_(bot, ev): gid = ev['group_id'] uid = ev['user_id'] at_user = MessageSegment.at(ev['user_id']) guid = ev['group_id'], ev['user_id'] if not cooling_time_limiter.check(uid): return cooling_time_limiter.start_cd(uid) if not daily_limiter.check(guid) and not daily_tip_limiter.check(guid): poke_tip_cd_limiter.start_cd(guid) if not daily_limiter.check(guid) and poke_tip_cd_limiter.check(guid): daily_tip_limiter.increase(guid) await bot.send(ev, f'{at_user}你今天戳得已经够多的啦,再戳也不会有奇怪的东西掉下来的~') return daily_tip_limiter.reset(guid) while daily_limiter.check(guid): amount = roll_cards_amount() col_num = math.ceil(amount / 2) row_num = 2 if amount != 1 else 1 card_counter, card_descs, card = get_random_cards( db.get_cards_num(gid, uid), row_num, col_num, amount, True, get_random_cards_list, SUPER_RARE_PROBABILITY, RARE_PROBABILITY) dash = '----------------------------------------' msg_part = '\n'.join(card_descs) await bot.send( ev, f'别戳了别戳了o(╥﹏╥)o{card}{at_user}这些卡送给你了, 让我安静会...\n{dash}\n获得了:\n{msg_part}' ) for card_id in card_counter.keys(): db.add_card_num(gid, uid, card_id, card_counter[card_id]) daily_limiter.increase(guid)
async def poke_back(session: NoticeSession): uid = session.ctx['user_id'] at_user = MessageSegment.at(session.ctx['user_id']) guid = session.ctx['group_id'], session.ctx['user_id'] if not cooling_time_limiter.check(uid): return cooling_time_limiter.start_cd(uid) if session.ctx['target_id'] != session.event.self_id: return if not daily_limiter.check(guid) and not daily_tip_limiter.check(guid): poke_tip_cd_limiter.start_cd(guid) if not daily_limiter.check(guid) and poke_tip_cd_limiter.check(guid): daily_tip_limiter.increase(guid) await session.send(f'{at_user}你今天戳得已经够多的啦,再戳也不会有奇怪的东西掉下来的~') return daily_tip_limiter.reset(guid) if not daily_limiter.check(guid) or random.random() > POKE_GET_CARDS: poke = MessageSegment(type_='poke', data={ 'qq': str(session.ctx['user_id']), }) await session.send(poke) else: card_counter, card_descs, card = get_random_cards( db.get_cards_num(session.ctx['group_id'], session.ctx['user_id']), card_file_names_all, roll_cards_amount(), True) dash = '----------------------------------------' msg_part = '\n'.join(card_descs) await session.send( f'别戳了别戳了o(╥﹏╥)o{card}{at_user}这些卡送给你了, 让我安静会...\n{dash}\n获得了:\n{msg_part}' ) for card_id in card_counter.keys(): db.add_card_num(session.ctx['group_id'], session.ctx['user_id'], card_id, card_counter[card_id]) daily_limiter.increase(guid)
async def poke_back(session: NoticeSession): if session.ctx['target_id'] != session.event.self_id: return if not daily_limiter.check( (session.ctx['group_id'], session.ctx['user_id'])) or random.random() < 0.33: poke = MessageSegment(type_='poke', data={ 'qq': str(session.ctx['user_id']), }) await session.send(poke) else: cards_list = card_file_names_rare if random.random( ) < 0.10 else card_file_names_normal card_id, card = get_random_card(cards_list) rarity, chara_name = get_chara_name(card_id) rarity_desc = '【稀有】的' if rarity == 1 else '' at_user = MessageSegment.at(session.ctx['user_id']) await session.send( f'别戳了别戳了o(╥﹏╥)o{card}{at_user}这张{rarity_desc}「{chara_name}」送给你了, 让我安静会...' ) db.add_card_num(session.ctx['group_id'], session.ctx['user_id'], card_id) daily_limiter.increase( (session.ctx['group_id'], session.ctx['user_id']))
async def poke_back(session: NoticeSession): uid = session.ctx['user_id'] if not cooling_time_limiter.check(uid): return cooling_time_limiter.start_cd(uid) if session.ctx['target_id'] != session.event.self_id: return if not daily_limiter.check( (session.ctx['group_id'], session.ctx['user_id'])) or random.random() < 0.33: poke = MessageSegment(type_='poke', data={ 'qq': str(session.ctx['user_id']), }) await session.send(poke) else: card_ids, rarity_counter, card = get_random_cards( card_file_names_all, roll_card_amount()) at_user = MessageSegment.at(session.ctx['user_id']) dash = '----------------------------------------' msg_part1 = f'\n超稀有x{rarity_counter[1]}' if rarity_counter[1] else '' msg_part2 = f'\n稀有卡x{rarity_counter[0]}' if rarity_counter[0] else '' msg_part3 = f'\n普通卡x{rarity_counter[-1]}' if rarity_counter[-1] else '' await session.send( f'别戳了别戳了o(╥﹏╥)o{card}{at_user}这些卡送给你了, 让我安静会...\n{dash}\n获得了:{msg_part1}{msg_part2}{msg_part3}' ) for card_id in card_ids: db.add_card_num(session.ctx['group_id'], session.ctx['user_id'], card_id) daily_limiter.increase( (session.ctx['group_id'], session.ctx['user_id']))
async def billing(session: CommandSession): bot = session.bot args = session.current_arg_text.split() try: for i in range(0, len(args), 2): args[i] = int(args[i]) assert re.fullmatch(r'\d{4}-\d{2}-\d{2}', args[i + 1]), f"{args[i + 1]}不是合法日期" except (ValueError, AssertionError) as e: await session.finish(str(e)) try: sid_group = {} for sid in hoshino.get_self_ids(): gs = await bot.get_group_list(self_id=sid) sid_group[sid] = [g['group_id'] for g in gs] except CQHttpError as e: await session.finish(str(e)) failed = [] not_found = [] for i in range(0, len(args), 2): gid = args[i] date = args[i + 1] bill_sent_flag = False for sid, groups in sid_group.items(): if gid in groups: msg = f"本群bot将于/已于{date}到期,请及时联系{hoshino.config.SUPERUSERS[0]}续费,以免影响使用!" oid = await get_group_owner_id(bot, sid, gid) if oid: msg = str(ms.at(oid)) + msg try: await bot.send_group_msg(self_id=sid, group_id=gid, message=msg) bill_sent_flag = True except CQHttpError: failed.append(gid) try: await session.send(f"bot{sid} 向 群{gid} 发送billing失败!") except CQHttpError: hoshino.logger.critical( (f"bot{sid} 向 群{gid} 发送billing失败!且回报SUPERUSER失败!")) if not bill_sent_flag and gid not in failed: not_found.append(gid) msg = f"发送bill完毕!\n失败{len(failed)}:{failed}\n未找到{len(not_found)}:{not_found}" await session.send(msg)
async def poke_back(bot, event, mode='poke'): uid = event['user_id'] gid = event['group_id'] me_id = await bot.get_login_info() me_id = me_id['user_id'] at_user = MessageSegment.at(uid) guid = gid, uid if not cooling_time_limiter.check(uid): return cooling_time_limiter.start_cd(uid) if mode == 'poke' and event['target_id'] != me_id: return if not daily_limiter.check(guid) and not daily_tip_limiter.check(guid): poke_tip_cd_limiter.start_cd(guid) if not daily_limiter.check(guid) and poke_tip_cd_limiter.check(guid): daily_tip_limiter.increase(guid) await bot.send(event, f'{at_user}你今天戳得已经够多的啦,再戳也不会有奇怪的东西掉下来的~') return daily_tip_limiter.reset(guid) if not daily_limiter.check(guid) or random.random() > POKE_GET_CARDS: poke = MessageSegment(type_='poke', data={ 'qq': str(uid), }) await bot.send(event, poke) else: amount = roll_cards_amount() col_num = math.ceil(amount / 2) row_num = 2 if amount != 1 else 1 card_counter, card_descs, card = get_random_cards( db.get_cards_num(gid, uid), row_num, col_num, amount, True, get_random_cards_list, SUPER_RARE_PROBABILITY, RARE_PROBABILITY) dash = '----------------------------------------' msg_part = '\n'.join(card_descs) await bot.send( event, f'别戳了别戳了o(╥﹏╥)o\n{card}\n{at_user}这些卡送给你了, 让我安静会...\n{dash}\n获得了:\n{msg_part}' ) for card_id in card_counter.keys(): db.add_card_num(gid, uid, card_id, card_counter[card_id]) daily_limiter.increase(guid)
def generate_at_message_segment(ulist): return ''.join([str(MessageSegment.at(uid)) for uid in ulist])