コード例 #1
0
async def delete_whitelist(session: nonebot.CommandSession):
    ctx = session.ctx.copy()
    if not get_privilege(ctx['user_id'], perm.OWNER):
        await session.finish('您无权使用该功能')

    user_id = session.get('user_id', prompt='请输入要添加的qq号')
    try:
        user_id = int(user_id)
    except ValueError:
        await session.finish('主人啊,这是数字么?')

    user_control_module.set_user_privilege(user_id, perm.WHITELIST, False)
    await session.send('移除成功!')
コード例 #2
0
async def unban_someone(session: nonebot.CommandSession):
    ctx = session.ctx.copy()
    if get_privilege(ctx['user_id'], perm.ADMIN):
        try:
            user_id = int(session.get('user_id', prompt='请输入要封禁的qq'))
        except ValueError:
            await session.send('输入非QQ号,发生错误!')
            return

        user_control_module.set_user_privilege(str(user_id), perm.BANNED, False)
        await session.send('Done!!')

    else:
        await session.send('您无权进行该操作')
コード例 #3
0
def _prefetch(question: str, user_id: int) -> str:
    if question == user_control_module.last_question:
        repeat_count = user_control_module.get_user_repeat_question(user_id)
        if repeat_count == 6:
            user_control_module.set_user_privilege(str(user_id), perm.BANNED, True)
            return ''

        if repeat_count > 3:
            return ''

        user_control_module.set_user_repeat_question(user_id)
        return '你怎么又问一遍?'

    elif question in user_control_module.get_user_response_dict():
        user_control_module.last_question = question
        response = user_control_module.get_user_response(question)
        return response if response != '$' else ''

    if 'おやすみ' in question:
        return ''

    if '屑bot' in question:
        return '你屑你🐴呢'

    if match('.*?(祈|衤|qi).*?(雨|yu)', question):
        return '不敢答,不敢答……溜了溜了w'

    if match('.*?你(几|多少?)(岁|大|年龄)', question):
        seed(time_ns())
        rand_num = randint(0, 101)
        if rand_num > 76:
            resp = '我永远的17岁。'
        elif rand_num > 45:
            resp = '我38岁,有两子'
        elif rand_num > 22:
            resp = '我今年1337岁'
        else:
            resp = '我今年114514岁了'

        return resp

    if match(r'.*?(爱不爱|喜不喜欢).*?妈妈', question):
        return '答案肯定是肯定的啦~'

    if '妈妈' in question:
        return '请问你有妈妈么?:)'

    return ''
コード例 #4
0
async def add_whitelist(session: nonebot.CommandSession):
    ctx = session.ctx.copy()
    bot = nonebot.get_bot()
    if not get_privilege(ctx['user_id'], perm.OWNER):
        await session.finish('您无权使用该功能')

    user_id = session.get('user_id', prompt='请输入要添加的qq号')
    try:
        user_id = int(user_id)
    except ValueError:
        await session.send('主人啊,这是数字么?')
        return

    user_control_module.set_user_privilege(user_id, perm.WHITELIST, True)
    await bot.send_private_msg(
        user_id=user_id,
        message='您已被机器人的主人添加信任'
    )
    await session.send('添加成功!')
コード例 #5
0
ファイル: setu.py プロジェクト: muguangAA/qqBot
async def pixiv_send(session: nonebot.CommandSession):
    if alarm_api.get_alarm():
        await session.finish('警报已升起!请等待解除!\n' f'{alarm_api.get_info()}')

    ctx = session.ctx.copy()
    message_id = ctx['message_id']
    if get_privilege(ctx['user_id'], perm.BANNED):
        return

    group_id = ctx['group_id'] if 'group_id' in ctx else -1
    user_id = ctx['user_id']
    if 'group_id' in ctx and not get_privilege(user_id, perm.OWNER):
        if admin_control.get_data(ctx['group_id'], 'banned'):
            await session.finish('管理员已设置禁止该群接收色图。如果确认这是错误的话,请联系bot制作者')

    sanity = -1
    monitored = False
    multiplier = 1
    doMultiply = False

    if group_id in sanity_meter.get_sanity_dict():
        sanity = sanity_meter.get_sanity(group_id)

    elif 'group_id' not in ctx and not get_privilege(user_id, perm.WHITELIST):
        await session.finish('我主人还没有添加你到信任名单哦。请找BOT制作者要私聊使用权限~')

    else:
        sanity = sanity_meter.get_max_sanity()
        sanity_meter.set_sanity(group_id=group_id,
                                sanity=sanity_meter.get_max_sanity())

    if sanity <= 0:
        if group_id not in sanity_meter.remind_dict or not sanity_meter.remind_dict[
                group_id]:
            sanity_meter.set_remid_dict(group_id, True)
            await session.finish('您已经理智丧失了,不能再查了哟~(小提示:指令理智查询可以帮您查看本群还剩多少理智)')

        return

    if not admin_control.get_if_authed():
        pixiv_api.set_auth(
            access_token=admin_control.get_access_token(),
            refresh_token='iL51azZw7BWWJmGysAurE3qfOsOhGW-xOZP41FPhG-s')
        admin_control.set_if_authed(True)

    is_exempt = admin_control.get_data(group_id,
                                       'exempt') if group_id != -1 else False

    key_word = str(session.get('key_word', prompt='请输入一个关键字进行查询')).lower()

    if key_word in sanity_meter.get_bad_word_dict():
        multiplier = sanity_meter.get_bad_word_dict()[key_word]
        doMultiply = True
        if multiplier > 0:
            await session.send(
                f'该查询关键词在黑名单中,危机合约模式已开启:本次色图搜索将{multiplier}倍消耗理智')

            if multiplier * 2 > 400:
                sanity_meter.set_user_data(user_id, 'ban_count')
                if sanity_meter.get_user_data_by_tag(user_id,
                                                     'ban_count') >= 2:
                    user_control_module.set_user_privilege(
                        user_id, 'BANNED', True)
                    await session.send(f'用户{user_id}已被封停机器人使用权限')
                    bot = nonebot.get_bot()
                    await bot.send_private_msg(
                        user_id=SUPER_USER,
                        message=
                        f'User {user_id} has been banned for triggering prtection. Keyword = {key_word}'
                    )

                else:
                    await session.send('本次黑名单搜索已触发群保护机制,下次触发将会导致所有功能禁用。')
                    bot = nonebot.get_bot()
                    await bot.send_private_msg(
                        user_id=SUPER_USER,
                        message=
                        f'User {user_id} triggered protection mechanism. Keyword = {key_word}'
                    )

                del bot
                return
        else:
            await session.send(
                f'该查询关键词在白名单中,支援合约已开启:本次色图搜索将{abs(multiplier)}倍补充理智')

    if key_word in sanity_meter.get_monitored_keywords():
        await session.send('该关键词在主人的监控下,本次搜索不消耗理智,且会转发主人一份√')
        monitored = True
        if 'group_id' in ctx:
            sanity_meter.set_user_data(user_id, 'hit_xp')
            sanity_meter.set_xp_data(key_word)

    elif '色图' in key_word:
        await session.finish(
            MessageSegment.image(
                f'file:///{getcwd()}/data/dl/others/QQ图片20191013212223.jpg'))

    elif '屑bot' in key_word:
        await session.finish('你屑你🐴呢')

    json_result = {}

    try:
        if '最新' in key_word:
            json_result = pixiv_api.illust_ranking('week')
        else:
            json_result = pixiv_api.search_illust(word=key_word,
                                                  sort="popular_desc")

    except pixivpy3.PixivError:
        await session.finish('pixiv连接出错了!')

    except Exception as err:
        await session.send(f'发现未知错误!错误信息已发送给bot主人分析!\n' f'{err}')

        bot = nonebot.get_bot()
        await bot.send_private_msg(
            user_id=SUPER_USER,
            message=f'Uncaught error while using pixiv search:\n'
            f'Error from {user_id}\n'
            f'Keyword = {key_word}\n'
            f'Exception = {err}')

        return

    # 看一下access token是否过期
    if 'error' in json_result:
        admin_control.set_if_authed(False)
        try:
            admin_control.set_access_token(access_token=pixiv_api.login(
                username=user_name, password=password).response.access_token)

            await session.send('新的P站匿名访问链接已建立……')
            admin_control.set_if_authed(True)

        except pixivpy3.PixivError as err:
            print(err)
            return

    if '{user='******'{user=(.*?)}', key_word)
        if key_word:
            key_word = key_word[0]
        else:
            await session.send('未找到该用户。')
            return

        json_user = pixiv_api.search_user(word=key_word, sort="popular_desc")
        if json_user.user_previews:
            user_id = json_user.user_previews[0].user.id
            json_result = pixiv_api.user_illusts(user_id)
        else:
            await session.send(f"{key_word}无搜索结果或图片过少……")
            return

    else:
        json_result = pixiv_api.search_illust(word=key_word,
                                              sort="popular_desc")

    if not json_result.illusts or len(json_result.illusts) < 4:
        nonebot.logger.warning(f"未找到图片, keyword = {key_word}")
        await session.send(f"{key_word}无搜索结果或图片过少……")
        return

    sanity_meter.track_keyword(key_word)
    illust = random.choice(json_result.illusts)
    is_r18 = illust.sanity_level == 6
    if not monitored:
        if is_r18:
            sanity_meter.drain_sanity(group_id=group_id,
                                      sanity=2 if not doMultiply else 2 *
                                      multiplier)
        else:
            sanity_meter.drain_sanity(group_id=group_id,
                                      sanity=1 if not doMultiply else 1 *
                                      multiplier)

    start_time = time.time()
    path = await download_image(illust)
    try:
        nickname = ctx['sender']['nickname']
    except TypeError:
        nickname = 'null'

    bot = nonebot.get_bot()
    if not is_r18:
        try:
            await session.send(
                f'[CQ:reply,id={message_id}]'
                f'Pixiv ID: {illust.id}\n'
                f'查询关键词:{key_word}\n'
                f'画师:{illust["user"]["name"]}\n' +
                f'{MessageSegment.image(f"file:///{path}")}\n' +
                f'Download Time: {(time.time() - start_time):.2f}s')

            nonebot.logger.info("sent image on path: " + path)

        except Exception as e:
            nonebot.logger.info('Something went wrong %s' % e)
            await session.send('悲,屑TX不收我图。')
            return

    elif is_r18 and (group_id == -1
                     or admin_control.get_data(group_id, 'R18')):
        await session.send(
            f'[CQ:reply,id={message_id}]'
            f'芜湖~好图来了ww\n'
            f'Pixiv ID: {illust.id}\n'
            f'关键词:{key_word}\n'
            f'画师:{illust["user"]["name"]}\n'
            f'[CQ:image,file=file:///{path}{",type=flash" if not is_exempt else ""}]'
            + f'Download Time: {(time.time() - start_time):.2f}s')

    else:
        if not monitored:
            await session.send('我找到色图了!\n但是我发给我主人了_(:зゝ∠)_')
            await bot.send_private_msg(
                user_id=SUPER_USER,
                message=f"图片来自:{nickname}\n"
                f"来自群:{group_id}\n"
                f"查询关键词:{key_word}\n" + f'Pixiv ID: {illust.id}\n' +
                f'{MessageSegment.image(f"file:///{path}")}\n' +
                f'Download Time: {(time.time() - start_time):.2f}s')

    sanity_meter.set_usage(group_id, 'setu')
    if 'group_id' in ctx:
        sanity_meter.set_user_data(user_id, 'setu')

    if monitored and not get_privilege(user_id, perm.OWNER):
        await bot.send_private_msg(user_id=SUPER_USER,
                                   message=f'图片来自:{nickname}\n'
                                   f'查询关键词:{key_word}\n'
                                   f'Pixiv ID: {illust.id}\n'
                                   '关键字在监控中' +
                                   f'[CQ:image,file=file:///{path}]')