Esempio n. 1
0
async def shouquan(session: CommandSession):
    try:
        ev = session.event
        if ev.self_id != five:
            return None
        if session.current_arg:
            if (res := re.match(r'(\d+) (\d+) ([01234])', session.current_arg)):
                group_id = str(res.group(1))
                days = int(res.group(2))
                groupType = int(res.group(3))
                if group_id in 购买记录:
                    群信息 = 购买记录[group_id]
                    群信息['days'] += days
                    if groupType != 0:
                        群信息['groupType'] = groupType
                else:
                    购买记录[group_id] = {'days': days, 'groupType': groupType}
                    群信息 = 购买记录[group_id]
                购买记录write_json()
                await session.send(f"\n添加成功\n群号: {group_id}\n天数: {群信息['days']}\n类型: {群信息['groupType']}", at_sender=True)
                readyToDelete = []
                for group_id, value in group_list.items():
                    group_id = str(group_id)
                    if group_id in 购买记录 and 购买记录[group_id]['days'] >= 0:
                        flag = value['flag']
                        sub_type = value['sub_type']
                        self_id = value['self_id']
                        group_name = value['group_name']
                        at2 = MessageSegment.at(value['user_id'])
                        try:
                            await session.bot.set_group_add_request(self_id=self_id, flag=flag, sub_type=sub_type, approve=True)
                            await session.bot.send_group_msg(self_id=self_id, group_id=messageGroup, message=f'{at2}\n检测到该群的授权,已自动同意\n✅群号:{group_id}\n✅群名:{group_name}')
                            await session.bot.send_group_msg(self_id=self_id, group_id=messageGroup2, message=f'{at2}\n检测到该群的授权,已自动同意\n✅群号:{group_id}\n✅群名:{group_name}')

                        except Exception as e:
                            await session.bot.send_group_msg(self_id=self_id, group_id=messageGroup, message=f'{at2}\n检测到该群的授权,自动同意失败\n❗群号:{group_id}\n❗群名:{group_name}\n{e}')
                            await session.bot.send_group_msg(self_id=self_id, group_id=messageGroup2, message=f'{at2}\n检测到该群的授权,自动同意失败\n❗群号:{group_id}\n❗群名:{group_name}\n{e}')
                        readyToDelete.append(int(group_id))
                for group_id in readyToDelete:
                    del group_list[int(group_id)]

            else:
                raise Exception('添加授权 <群号> <天数> [类型]\n[类型]: 0无 1原 2半 3略 4测')

        else:
Esempio n. 2
0
async def _(session: NLPSession):
    global tmp_dict, ban_dict
    if session.ctx['message_type'] == 'group':  # 判断是否为群信息
        gid = session.ctx['group_id']  # 获取群号
        if gid in groupconf and session.ctx['raw_message'] == tmp_dict[gid]:
            if not ban_dict[gid]:
                ban_dict[gid] = True
                await session.send(tmp_dict[gid])
        else:
            ban_dict[gid] = False
            tmp_dict[gid] = session.ctx['raw_message']
            msg_num = wordCut(tmp_dict[gid])
            if msg_num:
                msg = MessageSegment.at(
                    session.ctx['user_id']) + " " + Aconf[msg_num]
                await session.send(msg)
            else:
                return
Esempio n. 3
0
async def call_subscribe(bot:NoneBot, ctx:Context_T, round_:int, boss:int):
    bm = BattleMaster(ctx['group_id'])
    msg = []
    sub = _load_sub(bm.group)
    slist = sub.get_sub_list(boss)
    mlist = sub.get_memo_list(boss)
    tlist = sub.get_tree_list()
    if slist:
        msg.append(f"您们预约的老{BattleMaster.int2kanji(boss)}出现啦!")
        msg.extend(_gen_namelist_text(bm, slist, mlist, do_at=True))
    if slist and tlist:
        msg.append("==========")
    if tlist:
        msg.append(f"以下成员可以下树了")
        msg.extend(map(lambda x: str(ms.at(x)), tlist))
        sub.clear_tree()
        _save_sub(sub, bm.group)
    if msg:
        await bot.send(ctx, '\n'.join(msg), at_sender=False)    # do not at the sender
Esempio n. 4
0
async def _growth(session: CommandSession):
    r = db.queryExp(session.ctx['user_id'], session.current_arg)
    reply = str(MessageSegment.at(session.ctx['sender']['user_id'])
                ) if session.ctx['message_type'] == 'group' else ''
    if r[0]:
        reply += '上次浇水时间: %s, 获得成长值: %d点' % (r[0][2], r[0][3])
    tplt = "\n{}\t{}\t{}"
    if len(session.current_arg) > 0:
        l = await get_group_member_list(601691323)
        p_l = {
            i['user_id']: (i['card'] if len(i['card']) > 0 else i['nickname'])
            for i in l
        }  # qq: 群备注 or qq: 昵称
        f_list = []
        rank = 1
        liking = r[2][0][1]
        c_tuple = None
        count = 1
        for i in r[2]:
            if i[0] not in p_l:
                continue
            if liking > i[1]:
                rank = count
                liking = i[1]
            f_list.append((rank, p_l[i[0]], *i))  # 有记录
            if i[0] == session.ctx['user_id']:
                c_tuple = (rank, p_l[i[0]], *i)
            count += 1
        if len(f_list) > 10:
            f_list = f_list[0:9]
        if c_tuple:
            f_list.append(c_tuple)
        #生成回复
        reply += tplt.format(rpad("排名", 4), rpad("昵称", 20), rpad("贡献度", 5))
        for i in f_list:
            reply += tplt.format(rpad(i[0], 4), rpad(i[1], 20), rpad(i[3], 5))
    else:
        reply += tplt.format(rpad("树名", 10), rpad("等级", 12), rpad("成长值", 15))
        for i in r[1]:
            reply += tplt.format(rpad(i[0], 10), rpad(i[2], 12),
                                 rpad(str(i[1]) + '\\' + str(i[3]), 15))
    await session.send(reply)
Esempio n. 5
0
async def gacha_1(session: CommandSession):
    uid = session.ctx['user_id']
    at = str(MessageSegment.at(session.ctx['user_id']))

    if not check_gacha_num(uid):
        await session.finish(f'{at} {GACHA_EXCEED_NOTICE}')
    _user_gacha_count[uid] += 0.1

    gacha = Gacha()
    chara, hiishi = gacha.gacha_one(gacha.up_prob, gacha.s3_prob,
                                    gacha.s2_prob)
    silence_time = hiishi * 60

    res = f'{chara.name} {"★"*chara.star}'
    if get_bot().config.IS_CQPRO:
        res = f'{chara.icon.cqcode} {res}'

    await silence(session.ctx, silence_time)
    msg = f'{at}\n素敵な仲間が増えますよ!\n{res}'
    await session.send(msg)
Esempio n. 6
0
async def show_remain(session: CommandSession):

    print(f'[{datetime.now()} show_remain] Function called')

    parser = ArgumentParser(session=session, usage='show-remain [--cid]')
    parser.add_argument('--cid', type=int, default=1)
    args = parser.parse_args(session.argv)

    print(f'[{datetime.now()} show_remain] arguments parsed')

    group_id = session.ctx['group_id']
    cid = args.cid

    print(f'[{datetime.now()} show_remain] getting BattleMaster...')
    battlemaster = BattleMaster(group_id)
    print(f'[{datetime.now()} show_remain] got BattleMaster!')
    print(
        f'[{datetime.now()} show_remain] call battlemaster.list_challenge_remain'
    )
    stat = battlemaster.list_challenge_remain(cid, datetime.now())
    print(f'[{datetime.now()} show_remain] got remain stat')

    print(f'[{datetime.now()} show_remain] checking permission')
    is_admin = await check_permission(session.bot, session.ctx, GROUP_ADMIN)
    print(f'[{datetime.now()} show_remain] permission: is_admin={is_admin}')
    print(f'[{datetime.now()} show_remain] generating message...')
    msg1 = []
    for uid, alt, name, rem_n, rem_e in stat:
        if rem_n or rem_e:
            line = ( str(MessageSegment.at(uid)) if is_admin else name ) + \
                   ( f'的小号{alt} ' if alt else '' ) + \
                   ( f' 余{rem_n}刀 补时{rem_e}刀\n' if rem_e else f'余{rem_n}刀\n' )
            msg1.append(line)
    print(f'[{datetime.now()} show_remain] message prepared! sending...')

    if msg1:
        await session.send('今日余刀统计:\n' + ''.join(msg1))
    else:
        await session.send(f'{cid}会所有成员均已出完刀!各位辛苦了!')

    print(f'[{datetime.now()} show_remain] Function finished successfully.')
Esempio n. 7
0
async def gacha_10(session: CommandSession):

    print(f'[{datetime.now()} gacha_10] Function called')

    if not check_gacha_permission(session.ctx['group_id']):
        await session.finish(GACHA_DISABLE_NOTICE)
        print(f'[{datetime.now()} gacha_10] No permission. Function finished.')
        return

    SUPER_LUCKY_LINE = 170
    at = str(MessageSegment.at(session.ctx['user_id']))

    gacha = Gacha()
    result, hiishi = gacha.gacha_10()
    silence_time = hiishi * 6 if hiishi < SUPER_LUCKY_LINE else hiishi * 60

    if USE_PRO_VERSION:
        # 转成CQimg
        result = [(CharaHelper.get_id(x), star, 0) for x, star in result]
        res1 = CharaHelper.gen_team_pic(result[:5], star_slot_verbose=False)
        res2 = CharaHelper.gen_team_pic(result[5:], star_slot_verbose=False)
        res = CharaHelper.concat_team_pic([res1, res2])
        res = CharaHelper.pic2b64(res)
        res = MessageSegment.image(res)
    else:
        result = [f'{x}{"★"*star}' for x, star in result]
        res1 = ' '.join(result[0:5])
        res2 = ' '.join(result[5:])
        res = f'{res1}\n{res2}'

    # await delete_msg(session)
    await silence(session, silence_time)
    msg = f'{at}\n素敵な仲間が増えますよ!\n{res}'
    # print(msg)
    print(f'[{datetime.now()} gacha_10] len(msg)={len(msg)}')
    await session.send(msg)
    if hiishi >= SUPER_LUCKY_LINE:
        await session.send('恭喜海豹!おめでとうございます!')

    print(f'[{datetime.now()} gacha_10] Function finished successully.')
Esempio n. 8
0
async def store_command(session: CommandSession):
    account = session.state['account']
    reply = str(MessageSegment.image(account.avatar_url))
    item_list=f'欢迎 {session.ctx["sender"]["nickname"]} 来到nana的神秘商店\n'\
              f'编号\t\t商品\t\t金额\n'
    with open(settings.GOODS_LIST, mode='r', encoding='utf-8') as f:
        for line in f:
            #print(line.strip())
            iid, commodity, price = line.strip().split('|')
            ass=iid+'\t'+commodity+'\t'+price+'\n'
            item_list+=iid+'\t'+commodity+'\t'+price+'\n'
    if session.ctx['message_type'] != 'private':
        reply += '\n' + str(MessageSegment.at(session.ctx['user_id']))
    '''
    reply += f'\n欢迎 {session.ctx["sender"]["nickname"]} 来到nana的神秘商店\n' \
        '本店有以下商品\n'\
        '1 测试\n'\
        '2 测试\n'\
        '3 测试\n'
    '''
    #await buy(item)
    await session.send(item_list)
Esempio n. 9
0
async def sign_in(session: CommandSession):
    ctx_id = context_id(session.ctx, mode='user')
    my_data = data[ctx_id]

    today = date.today()
    if my_data['last_signin_date'] and \
            today - my_data['last_signin_date'] < timedelta(days=1):
        session.finish('你今天已经签过到啦\n明天再来吧~')

    my_data['last_signin_date'] = today
    my_data['signin_count'] += 1

    earned = random.randint(1, 100)
    data[ctx_id]['wealth'] += earned

    url = QQ_AVATAR_URL_FORMAT.format(session.ctx['user_id'])
    reply = str(MessageSegment.image(url))

    if session.ctx['message_type'] != 'private':
        reply += '\n' + str(MessageSegment.at(session.ctx['user_id']))

    reply += f'\n你已经累计签到了{my_data["signin_count"]}次\n' \
        f'本次签到获得了{earned}个金币~'
    session.finish(reply)
Esempio n. 10
0
async def gacha_1(session: CommandSession):

    if not check_gacha_permission(session.ctx['group_id']):
        await session.finish(GACHA_DISABLE_NOTICE)
        return

    at = str(MessageSegment.at(session.ctx['user_id']))

    gacha = Gacha()
    res, star, hiishi = gacha.gacha_one(gacha.up_prob, gacha.s3_prob,
                                        gacha.s2_prob)
    silence_time = hiishi * 60

    if USE_PRO_VERSION:
        # 转成CQimg
        res = get_cqimg(CharaHelper.get_picname(CharaHelper.get_id(res)),
                        'priconne/unit') + f'{res} {"★"*star}'

    # await delete_msg(session)
    await silence(session, silence_time)
    msg = f'{at}\n素敵な仲間が増えますよ!\n{res}'
    # print(msg)
    print('len(msg)=', len(msg))
    await session.send(msg)
Esempio n. 11
0
async def _arena_query(session: CommandSession, region: int, refresh=False):

    arena.refresh_quick_key_dic()
    ev = session.event
    uid = ev.user_id
    isAt = True if session.event.detail_type == 'group' else False

    if not lmt.check(uid):
        await session.finish('您查询得过于频繁,请稍等片刻', at_sender=isAt)
    lmt.start_cd(uid)

    # 处理输入数据
    defen = session.current_arg
    defen = re.sub(r'[??,,_]', '', defen)
    defen, unknown = chara.roster.parse_team(defen)

    if unknown:
        _, name, score = chara.guess_id(unknown)
        if score < 70 and not defen:
            return  # 忽略无关对话
        msg = f'无法识别"{unknown}"' if score < 70 else f'无法识别"{unknown}" 您说的有{score}%可能是{name}'
        await session.finish(msg, at_sender=isAt)
    if not defen:
        await session.finish('查询请发送"怎么拆+防守队伍",无需+号', at_sender=isAt)
    if len(defen) > 5:
        await session.finish('编队不能多于5名角色', at_sender=isAt)
    if len(defen) < 5:
        await session.finish('编队不能少于5名角色', at_sender=isAt)
    if len(defen) != len(set(defen)):
        await session.finish('编队中含重复角色', at_sender=isAt)
    if any(chara.is_npc(i) for i in defen):
        await session.finish('编队中含未实装角色', at_sender=isAt)
    if 1004 in defen:
        await session.send('\n⚠️您正在查询普通版炸弹人\n※万圣版可用万圣炸弹人/瓜炸等别称',
                           at_sender=isAt)

    # 预处理缓存图片
    outpath = R.img('tmp/').path
    defen_list = defen.copy()
    defen_list.sort()
    filename = '-'.join(str(v) for v in defen_list)
    filename = f'{filename}.jpg'
    if os.path.exists(outpath) is False:
        os.mkdir(outpath)
    save_path = R.img('tmp/', filename).path

    if refresh and os.path.exists(save_path):
        os.remove(save_path)

    # 执行查询
    # sv.logger.info('Doing query...')
    res = await arena.do_query(id_list=defen,
                               user_id=uid,
                               region=region,
                               force=refresh)
    # sv.logger.info('Got response!')

    # 处理查询结果
    if isinstance(res, str):
        await session.finish(f'查询出错,{res}', at_sender=isAt)
    if not len(res):
        await session.finish(
            '抱歉没有查询到解法\n※没有作业说明随便拆 发挥你的想象力~★\n作业上传请前往pcrdfans.com',
            at_sender=isAt)
    res = res[:min(6, len(res))]  # 限制显示数量,截断结果

    # 第一次查询,无本地缓存
    if os.path.exists(save_path) is False:
        size = len(res)
        target = Image.new('RGBA', (64 * 6, 64 * size), (255, 255, 255, 255))
        draw = ImageDraw.Draw(target)
        ttffont = ImageFont.truetype(font_path, 16)
        index = 0
        for v in res:
            atk = v['atk']
            team_pic = chara.gen_team_pic(atk)
            up = v['up'] + v['my_up']
            down = v['down'] + v['my_down']
            qkey = v['qkey']
            pingjia = f'{qkey}\n\U0001F44D{up}\n\U0001F44E{down}'
            draw.text((64 * 5, 64 * index),
                      pingjia,
                      font=ttffont,
                      fill='#000000')
            target.paste(team_pic, (0, 64 * index))
            index += 1
        target = optimize_pic(target)
        target.save(save_path,
                    format='JPEG',
                    quality=50,
                    optimize=True,
                    progressive=True)
    # 拼接回复
    atk_team = MessageSegment.image(f'file:///{os.path.abspath(save_path)}')
    defen = [chara.fromid(x).name for x in defen]
    defen = f"防守方【{' '.join(defen)}】"
    at = str(MessageSegment.at(ev.user_id)) if isAt else ev.sender['nickname']

    msg = [defen, f'已为骑士{at}查询到以下进攻方案:', str(atk_team), '※发送"点赞/点踩"可进行评价']

    msg.append('Support by pcrdfans_com')

    await session.send('\n'.join(msg))
Esempio n. 12
0
async def _arena_query(session:CommandSession, region:int):

    arena.refresh_quick_key_dic()
    uid = session.ctx['user_id']

    if not lmt.check(uid):
        session.finish('您查询得过于频繁,请稍等片刻', at_sender=True)
    lmt.start_cd(uid)

    # 处理输入数据
    argv = session.current_arg_text.strip()
    argv = re.sub(r'[??,,_]', ' ', argv)
    argv = argv.split()
    if 0 >= len(argv):
        session.finish('请输入防守方角色,用空格隔开', at_sender=True)
    if 5 < len(argv):
        session.finish('编队不能多于5名角色', at_sender=True)

    defen = [ Chara.name2id(name) for name in argv ]
    for i, id_ in enumerate(defen):
        if Chara.UNKNOWN == id_:
            await session.finish(f'编队中含未知角色"{argv[i]}",请尝试使用官方译名\n您可@bot来杯咖啡+反馈未收录别称\n或前往 github.com/Ice-Cirno/HoshinoBot/issues/5 回帖补充', at_sender=True)
    if len(defen) != len(set(defen)):
        await session.finish('编队中出现重复角色', at_sender=True)
    if 1004 in defen:
        await session.send('\n⚠️您正在查询普通版炸弹人\n※万圣版可用万圣炸弹人/瓜炸等别称', at_sender=True)

    # 执行查询
    sv.logger.info('Doing query...')
    res = await arena.do_query(defen, uid, region)
    sv.logger.info('Got response!')

    # 处理查询结果
    if res is None:
        session.finish('查询出错,请联系维护组调教\n请先移步pcrdfans.com进行查询', at_sender=True)
    if not len(res):
        session.finish('抱歉没有查询到解法\n※没有作业说明随便拆 发挥你的想象力~★\n作业上传请前往pcrdfans.com', at_sender=True)
    res = res[:min(6, len(res))]    # 限制显示数量,截断结果

    # 发送回复
    if get_bot().config.IS_CQPRO:
        sv.logger.info('Arena generating picture...')
        atk_team = [ Chara.gen_team_pic(entry['atk']) for entry in res ]
        atk_team = concat_pic(atk_team)
        atk_team = pic2b64(atk_team)
        atk_team = str(MessageSegment.image(atk_team))
        sv.logger.info('Arena picture ready!')
    else:
        atk_team = '\n'.join(map(lambda entry: ' '.join(map(lambda x: f"{x.name}{x.star if x.star else ''}{'专' if x.equip else ''}" , entry['atk'])) , res))

    details = [ " ".join([
        f"赞{e['up']}+{e['my_up']}" if e['my_up'] else f"赞{e['up']}",
        f"踩{e['down']}+{e['my_down']}" if e['my_down'] else f"踩{e['down']}",
        e['qkey']
    ]) for e in res ]

    defen = [ Chara.fromid(x).name for x in defen ]
    defen = f"防守方【{' '.join(defen)}】"
    at = str(MessageSegment.at(session.ctx["user_id"]))

    msg1 = [
        defen,
        f'已为骑士{at}查询到以下进攻方案:',
        f'{atk_team}Support by pcrdfans_com'
    ]
    msg2 = [
        f'为骑士{at}查询到作业评价👍&👎:', 
        *details,
        '※发送"点赞/点踩"可进行评价',
        '※手机QQ无法正常显示图片故分条发送 如有刷屏还请谅解',
    ]
    if region == 1:
        msg2.append('※使用"b怎么拆"或"台怎么拆"可按服过滤')

    sv.logger.debug('Arena sending result...')
    await session.send('\n'.join(msg1))
    await session.send('\n'.join(msg2))
    sv.logger.debug('Arena result sent!')
Esempio n. 13
0
async def admin_only_func(event, bot):
    count = 0
    # 正式的消息处理
    selfid = event['self_id']
    senderid = event['user_id']
    groupid = event['group_id']
    # 分割文本信息,at信息,图片信息等等
    allmsg = event['message']
    msgtext = []
    msgat = []
    for msg in allmsg:
        if msg['type'] == 'text':
            msgtext.append(msg['data']['text'])
        elif msg['type'] == 'at' and msg['data']['qq'] != 'all':
            msgat.append(int(msg['data']['qq']))
        elif msg['type'] == 'image':
            pass
    msg = M()
    # “一带一路”功能,允许一个群成员选择另一个群成员一起被禁言,时长控制为1-9分钟
    msgtextstr = ''.join(msgtext)
    if '一带一路' in msgtextstr and msgat:
        if groupdict[selfid][groupid]['member'][selfid]['role'] <= groupdict[
                selfid][groupid]['member'][senderid]['role']:
            msg.append(MS.text('权限狗无法参与(请自裁'))
        else:
            if len(msgat) > 1:
                msg.append(MS.text('是不是太贪心了呢'))
            elif senderid == msgat[0]:
                msg.append(MS.text('你成功促进了自己的经济发展'))
            elif groupdict[selfid][groupid]['member'][selfid][
                    'role'] > groupdict[selfid][groupid]['member'][
                        msgat[0]]['role']:
                msg.append(MS.text('你成功带动了'))
                msg.append(MS.at(msgat[0]))
                msg.append(MS.text('的经济发展'))
                await bot.set_group_ban(self_id=selfid,
                                        group_id=groupid,
                                        user_id=msgat[0],
                                        duration=random.randint(1, 9) * 60)
            else:
                msg.append(MS.text('没有符合帮扶政策的群员,你将独享'))
            await bot.set_group_ban(self_id=selfid,
                                    group_id=groupid,
                                    user_id=senderid,
                                    duration=random.randint(1, 9) * 60)
        if msg:
            await bot.send_group_msg(self_id=selfid,
                                     group_id=groupid,
                                     message=msg)
        count += 1
    # “抽奖”功能,允许一个群成员禁言自己,娱乐用,时长控制为1-9分钟
    if re.match(r'.*抽.*奖.*', msgtextstr):
        if groupdict[selfid][groupid]['member'][selfid]['role'] <= groupdict[
                selfid][groupid]['member'][senderid]['role']:
            msg.append(MS.text('权限狗无法参与(请自裁'))
        # “大抽奖”功能,抽奖升级版,时长控制为4-8小时
        elif re.match(r'.*[大带(da)].*抽.*奖.*', msgtextstr):
            await bot.set_group_ban(self_id=selfid,
                                    group_id=groupid,
                                    user_id=senderid,
                                    duration=random.randint(240, 480) * 60)
        else:
            await bot.set_group_ban(self_id=selfid,
                                    group_id=groupid,
                                    user_id=senderid,
                                    duration=random.randint(1, 9) * 60)
        if msg:
            await bot.send_group_msg(self_id=selfid,
                                     group_id=groupid,
                                     message=msg)
        count += 1
    return 1 if count > 0 else 0
Esempio n. 14
0
async def handle_group_invite(session: RequestSession):
    print('收到邀请收到邀请收到邀请收到邀请收到邀请')
    ev = session.event
    # if ev.self_id == one:
    #     return None
    print(ev)
    try:
        try:
            group_info = await session.bot.get_group_info(group_id=ev.group_id, self_id=ev.self_id)
            group_name = group_info["group_name"]
        except Exception as err:
            group_name = f'[获取失败]'

        group_id = ev.group_id
        at = MessageSegment.at(614867321)
        at2 = MessageSegment.at(ev.user_id)

        if ev.self_id != five:
            await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup,
                                             message=f'群号:{ev.group_id}\n群名:{group_name}\n方式:{ev.sub_type}\n邀请人:{at2}\n❗请不要拉小日向1/2/3/4号机,请邀请5号机')
            await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup2,
                                             message=f'群号:{ev.group_id}\n群名:{group_name}\n方式:{ev.sub_type}\n邀请人:{at2}\n❗请不要拉小日向1/2/3/4号机,请邀请5号机')
            return None

        group_list[ev.group_id] = {'flag': f'{ev.flag}',
                                   'sub_type': f'{ev.sub_type}',
                                   'group_name': f'{group_name}',
                                   'user_id': f'{ev.user_id}',
                                   'self_id': f'{ev.self_id}'
                                   }
        # comment = ev.comment
        length = len(group_list)
        print(ev)

        # if ev.self_id == one:
        #     print('enterif')
        #     await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup,
        #                                     message=f'{at2}目前1号机已经满额啦,请尝试拉2号机哈\n❗群号:{group_id}\n❗群名:{group_name}\n')
        #     print('通知发送成功')

        #     await session.bot.set_group_add_request(flag=ev.flag, sub_type=ev.sub_type, approve=False, reason='请邀请小日向2号机')
        #     print('拒绝成功')

        #     del group_list[int(group_id)]
        #     return None
        # else:
        await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup,
                                         message=f'{at}\n👉收到1条群组请求\n群号:{ev.group_id}\n群名:{group_name}\n方式:{ev.sub_type}\n邀请人:{at2}\n目前剩余{length}条请求未处理\n如果该请求未自动同意请联系群主')

        group_id = str(ev.group_id)
        if group_id in 购买记录 and 购买记录[group_id]['days'] >= 0:
            print('Test')

            try:

                await session.bot.set_group_add_request(self_id=ev.self_id, flag=ev.flag, sub_type=ev.sub_type, approve=True)
                await asyncio.sleep(1)
                print('邀请成功邀请成功邀请成功邀请成功邀请成功邀请成功')
                await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup,
                                                 message=f'{at2}该群已授权,已自动同意\n✅群号:{group_id}\n✅群名:{group_name}')
                await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup2,
                                                 message=f'{at2}该群已授权,已自动同意\n✅群号:{group_id}\n✅群名:{group_name}')
                del group_list[int(group_id)]
                return None
            except Exception as err:
                await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup,
                                                 message=f'{at2}该群已授权,自动同意失败,可以再邀请试试\n❗群号:{group_id}\n❗群名:{group_name}\n{err}')
                await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup2,
                                                 message=f'{at2}该群已授权,自动同意失败,可以再邀请试试\n❗群号:{group_id}\n❗群名:{group_name}\n{err}')
                del group_list[int(group_id)]

        # await session.bot.send_private_msg(self_id=ev.self_id, user_id=614867321,
        #                                    message=f'收到group_request\n{comment}\n剩余{length}条请求未处理')

        # user_id = ev.user_id
        # user_info = await session.bot.get_stranger_info(user_id=user_id)
        # nickname = user_info['nickname']

    except Exception as e:
        await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup,
                                         message=f'{at}\n👉收到1条群组请求\n❗异常:{e}\n群号:{ev.group_id}\n')
        await session.bot.send_group_msg(self_id=ev.self_id, group_id=messageGroup2,
                                         message=f'{at}\n👉收到1条群组请求\n❗异常:{e}\n群号:{ev.group_id}\n')
Esempio n. 15
0
def _(session: CommandSession):
    nowBlacklist: list = PluginManager.settings(__plugin_name__,
                                                session.event).settings
    return ("目前" +
            "".join(map(lambda x: str(MessageSegment.at(x)), nowBlacklist)) +
            "在黑名单上")
Esempio n. 16
0
async def update_rec(gid: int, uid: int, dmg: int, remark: dict = {}):
    rec_type = 0
    over_kill = -1

    member_name = battleObj.get_member_name(gid, uid)
    if member_name is None:
        battleObj.add_member(gid, uid, await get_member_name(gid, uid))
        member_name = battleObj.get_member_name(gid, uid)

    msg = member_name

    _, prev_round, prev_boss, prev_hp = battleObj.get_current_state(gid)

    if dmg >= prev_hp:
        over_kill = dmg
        rec_type = 1
        dmg = prev_hp
    if dmg == -1 or dmg == prev_hp:
        rec_type = 1
        dmg = prev_hp

    member_recs = battleObj.get_rec(gid, uid, get_start_of_day())
    member_today_rec_nums, flag = 0, 0
    for rec in member_recs:
        flag = rec['flag']
        if flag in [0, 2, 3]:
            member_today_rec_nums += 1

    if member_today_rec_nums >= 3:
        await bot.send_group_msg(group_id=gid, message='你今天已经报满三刀了')
        return

    dmg_type, new_flag = '整刀', rec_type
    if flag in [0, 2, 3]:
        dmg_type = ['整刀', '尾刀'][rec_type]
    else:
        # flag = 1
        dmg_type = ['余刀', '余尾刀'][rec_type]
        new_flag = 2 + rec_type

    msg += '对%d周目%s造成了%s伤害' % (prev_round, boss_names[prev_boss],
                               format_num(dmg))
    msg += '(今日第%d刀,%s)。' % (member_today_rec_nums + 1, dmg_type)
    if new_flag == 1 and over_kill > 0:
        time_remain = 0
        if 'remain' in remark:
            time_remain = remark['remain']

        time_return = math.ceil(
            bc_calc_time_return(prev_hp, over_kill, time_remain))
        remark['remain'] = time_return
        msg += '\n造成过量伤害%s,余时%s秒,补偿刀返还时间%s秒。' % (format_num(over_kill),
                                                 time_remain, time_return)

    cancel_reserve(gid, uid, prev_boss)

    _, _, after_boss, _ = add_rec(gid, uid, prev_round, prev_boss, dmg,
                                  new_flag, remark)
    if prev_boss != after_boss:
        trees = ''
        enters = battleObj.get_enter(gid)
        for e in enters:
            if e['flag'] == 1:
                trees += str(MessageSegment.at(e['uid']))
        if len(trees) > 0:
            msg += f'\n- 可以下树了{trees}'

        on_reverse = call_reserve(gid, after_boss)
        msg += f'\n- 新的{boss_names[after_boss]}已经出现{on_reverse}'

        clear_enter(gid)

    del_enter(gid, uid)

    await bot.send_group_msg(group_id=gid, message=msg)

    if prev_boss == after_boss:
        msg = await get_progress_message(gid)
        await bot.send_group_msg(group_id=gid, message=msg)
Esempio n. 17
0
async def call_master(session: NLPSession):
    session.send(MessageSegment.at(session.bot.config.SUPERUSERS[0]))
Esempio n. 18
0
async def vote(s: CommandSession, user, group, user_in_group, state):
    parser = ArgumentParser(session=s, usage=USAGE)
    parser.add_argument(
        'command',
        choices=['list', 'new', 'yea', 'nay', 'commit', 'count', 'announce'])
    parser.add_argument('ITEM')
    parser.add_argument('extra', nargs='?')
    args = parser.parse_args(s.argv)

    name = args.ITEM.strip()
    db: orm.Session = orm.getSession()
    vote_item = db.query(VoteItem).filter(VoteItem.GroupId == group.GroupId,
                                          VoteItem.Name == name).one_or_none()
    try:
        if args.command == 'list':
            msg = Message("List of available vote items:\n")
            items = None
            if args.extra == 'all':
                # Extract all items
                items = db.query(VoteItem).filter(
                    VoteItem.GroupId == group.GroupId).all()
            else:
                # Extract active items
                items = db.query(VoteItem).filter(
                    VoteItem.GroupId == group.GroupId,
                    VoteItem.Committed == False).all()
            for item in items:
                msg.append(
                    MessageSegment.text(
                        f"'{item.Name}' - {item.Description}\n"))
            await s.send(msg)

        elif args.command == 'new':
            if not vote_item:
                if not args.extra:
                    desc = f"Vote on {name}"
                else:
                    desc = args.extra
                item = VoteItem(GroupId=group.GroupId,
                                ProposerId=user.UserId,
                                Name=name,
                                Committed=False,
                                Description=desc)
                db.add(item)
                db.commit()
                await s.send(
                    f"Vote item '{item.Description}' ({item.Name}) created.",
                    at_sender=True)
            else:
                await s.send(f"Vote item '{vote_item.Name}' already exisist.",
                             at_sender=True)
        elif args.command == 'yea':
            if not vote_item:
                raise _VoteItemNotFound()
            if vote_item.Committed:
                raise _VoteClosed()
            vote = db.query(Vote).filter(
                Vote.Item == vote_item.Id,
                Vote.Voter == user.UserId).one_or_none()
            if not vote:
                vote = Vote(Item=vote_item.Id,
                            Voter=user.UserId,
                            Ballot=_BALLOT_YEA)
                db.add(vote)
            else:
                vote.Ballot = _BALLOT_YEA
            db.commit()
            await s.send(
                f"You voted YES to '{vote_item.Description}' ({vote_item.Name}).",
                at_sender=True)

        elif args.command == 'nay':
            if not vote_item:
                raise _VoteItemNotFound
            if vote_item.Committed:
                raise _VoteClosed
            vote = db.query(Vote).filter(
                Vote.Item == vote_item.Id,
                Vote.Voter == user.UserId).one_or_none()
            if not vote:
                vote = Vote(Item=vote_item.Id,
                            Voter=user.UserId,
                            Ballot=_BALLOT_NAY)
                db.add(vote)
            else:
                vote.Ballot = _BALLOT_NAY
            db.commit()
            await s.send(
                f"You voted NO to '{vote_item.Description}' ({vote_item.Name}).",
                at_sender=True)

        elif args.command == 'commit':
            if not vote_item:
                raise _VoteItemNotFound()
            if vote_item.ProposerId != user.UserId:
                raise _NotVoteOwner()
            vote_item.Committed = True
            db.commit()
            await s.send(
                f"You concluded vote item '{vote_item.Description}' ({vote_item.Name}).",
                at_sender=True)

        elif args.command == 'count':
            if not vote_item:
                raise _VoteItemNotFound
            total_count = db.query(Vote).filter(
                Vote.Item == vote_item.Id).count()
            positives = db.query(Vote).filter(
                Vote.Item == vote_item.Id, Vote.Ballot == _BALLOT_YEA).count()
            await s.send(
                f"Vote item '{vote_item.Description}' ({vote_item.Name}) got {positives} YES among {total_count} votes."
            )

        elif args.command == 'announce':
            if not vote_item:
                raise _VoteItemNotFound
            total_count = db.query(Vote).filter(
                Vote.Item == vote_item.Id).count()
            # proposer = db.query(orm.User).filter(orm.User.UserId==vote_item.ProposerId).one()
            positives = db.query(Vote).filter(
                Vote.Item == vote_item.Id, Vote.Ballot == _BALLOT_YEA).all()
            # positives = db.query(Vote, orm.User) \
            #               .join(Vote.Voter == orm.User.UserId) \
            #               .filter(Item=vote_item.Id, Ballot=_BALLOT_YEA) \
            #               .all()
            msg = nonebot.Message(
                f"Vote item '{vote_item.Description}' ({vote_item.Name}) initiated by "
            )
            msg.append(MessageSegment.at(vote_item.ProposerId))
            msg.append(
                MessageSegment.text(
                    f" got {len(positives)} YES among {total_count} votes. "))
            msg.append(
                MessageSegment.text(
                    f"The following users in favor of the item:"))
            segs = [
                nonebot.MessageSegment.at(vote.Voter) for vote in positives
            ]
            for seg in segs:
                msg.append(seg)
            await s.send(msg)
        else:
            raise Exception

    except _VoteItemNotFound:
        await s.send(f"Vote item '{name}' does not exist.", at_sender=True)

    except _NotVoteOwner:
        await s.send(f"You does not own vote item '{name}'.", at_sender=True)

    except _VoteClosed:
        await s.send(f"Voting for '{name}' is already closed.", at_sender=True)
Esempio n. 19
0
 def build(cls, text: str):
     if text.startswith('@'):
         if text[1:].isdecimal():
             return MessageSegment.at(int(text[1:]))
     else:
         return MessageSegment.text(text)