Example #1
0
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']))
Example #4
0
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']))
Example #5
0
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)
Example #6
0
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)
Example #7
0
def generate_at_message_segment(ulist):
    return ''.join([str(MessageSegment.at(uid)) for uid in ulist])