예제 #1
0
async def handle_auth_id(bot: Bot, event: Event, state: T_State):
    auth_type = state["auth_type"]
    auth_id = state["auth_id"]
    if not re.match(r'^\d+$', auth_id):
        await omegaauth.finish('参数错误QAQ, qq或群号应为纯数字')

    if auth_type == 'user':
        user = DBUser(user_id=auth_id)
        if user.exist():
            await omegaauth.send(f'即将对用户: 【{user.nickname().result}】执行操作')
        else:
            logger.error(f'为 {auth_type}/{auth_id} 配置权限节点失败, 数据库中不存在该用户')
            await omegaauth.finish('数据库中不存在该用户QAQ')
    elif auth_type == 'group':
        group = DBGroup(group_id=auth_id)
        if group.exist():
            await omegaauth.send(f'即将对群组: 【{group.name().result}】执行操作')
        else:
            logger.error(f'为 {auth_type}/{auth_id} 配置权限节点失败, 数据库中不存在该群组')
            await omegaauth.finish('数据库中不存在该群组QAQ')
    else:
        await omegaauth.finish('参数错误QAQ')

    # 处理可用权限节点列表
    plugins = get_loaded_plugins()
    auth_node_plugin = []
    for plugin in plugins:
        if plugin.export.get('auth_node'):
            auth_node_plugin.append(plugin.name)

    state["auth_node_plugin"] = auth_node_plugin
    p_list = '\n'.join(auth_node_plugin)
    await omegaauth.send(f'可配置权限节点的插件有:\n\n{p_list}')
예제 #2
0
async def user_skill_clear(bot: Bot, event: GroupMessageEvent, state: T_State) -> Result:
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    _res = user.skill_clear()
    if _res.success():
        result = Result(False, _res.info, 0)
    else:
        result = Result(True, _res.info, -1)
    return result
예제 #3
0
async def user_skill_del(bot: Bot, event: GroupMessageEvent, state: T_State) -> Result:
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    skill_name = state['skill_name']
    _res = user.skill_del(skill=DBSkill(name=skill_name))
    if _res.success():
        result = Result(False, _res.info, 0)
    else:
        result = Result(True, _res.info, -1)
    return result
예제 #4
0
async def group_upgrade(bot: Bot, event: GroupMessageEvent, state: T_State) -> Result:
    group_id = event.group_id
    # 调用api获取群信息
    group_info = await bot.call_api(api='get_group_info', group_id=group_id)
    group_name = group_info['group_name']
    group = DBGroup(group_id=group_id)

    # 添加并初始化群信息
    _result = group.add(name=group_name)
    if not _result.success():
        return Result(True, _result.info, -1)

    # 更新用户
    group_member_list = await bot.call_api(api='get_group_member_list', group_id=group_id)
    failed_user = []

    # 首先清除数据库中退群成员
    exist_member_list = []
    for user_info in group_member_list:
        user_qq = user_info['user_id']
        exist_member_list.append(int(user_qq))

    db_member_list = []
    for user_id, nickname in group.member_list().result:
        db_member_list.append(user_id)
    del_member_list = list(set(db_member_list).difference(set(exist_member_list)))

    for user_id in del_member_list:
        group.member_del(user=DBUser(user_id=user_id))

    # 更新群成员
    for user_info in group_member_list:
        # 用户信息
        user_qq = user_info['user_id']
        user_nickname = user_info['nickname']
        user_group_nickmane = user_info['card']
        if not user_group_nickmane:
            user_group_nickmane = user_nickname

        _user = DBUser(user_id=user_qq)
        _result = _user.add(nickname=user_nickname)
        if not _result.success():
            failed_user.append(_user.qq)
            logger.warning(f'User: {user_qq}, {_result.info}')
            continue

        _result = group.member_add(user=_user, user_group_nickname=user_group_nickmane)
        if not _result.success():
            failed_user.append(_user.qq)
            logger.warning(f'User: {user_qq}, {_result.info}')

    group.init_member_status()

    return Result(False, f'Success with ignore user: {failed_user}', 0)
예제 #5
0
async def refresh_group_info():
    from nonebot import get_bots

    for bot_id, bot in get_bots().items():
        group_list = await bot.call_api('get_group_list')
        for group in group_list:
            group_id = group.get('group_id')
            # 调用api获取群信息
            group_info = await bot.call_api(api='get_group_info', group_id=group_id)
            group_name = group_info['group_name']
            group = DBGroup(group_id=group_id)

            # 添加并初始化群信息
            group.add(name=group_name)

            # 更新用户
            group_member_list = await bot.call_api(api='get_group_member_list', group_id=group_id)

            # 首先清除数据库中退群成员
            exist_member_list = []
            for user_info in group_member_list:
                user_qq = user_info['user_id']
                exist_member_list.append(int(user_qq))

            db_member_list = []
            for user_id, nickname in group.member_list().result:
                db_member_list.append(user_id)
            del_member_list = list(set(db_member_list).difference(set(exist_member_list)))

            for user_id in del_member_list:
                group.member_del(user=DBUser(user_id=user_id))

            # 更新群成员
            for user_info in group_member_list:
                # 用户信息
                user_qq = user_info['user_id']
                user_nickname = user_info['nickname']
                user_group_nickmane = user_info['card']
                if not user_group_nickmane:
                    user_group_nickmane = user_nickname
                _user = DBUser(user_id=user_qq)
                _result = _user.add(nickname=user_nickname)
                if not _result.success():
                    logger.warning(f'Refresh group info, User: {user_qq}, {_result.info}')
                    continue
                _result = group.member_add(user=_user, user_group_nickname=user_group_nickmane)
                if not _result.success():
                    logger.warning(f'Refresh group info, User: {user_qq}, {_result.info}')

            group.init_member_status()
            logger.info(f'Refresh group info completed, Bot: {bot_id}, Group: {group_id}')
예제 #6
0
async def handle_first_receive(bot: Bot, event: GroupMessageEvent,
                               state: T_State):
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    result = user.status_set(status=0)
    if result.success():
        logger.info(
            f"reset_status: {event.group_id}/{user_id}, Success, {result.info}"
        )
        await my_status.finish('Success')
    else:
        logger.error(
            f"reset_status: {event.group_id}/{user_id}, Failed, {result.info}")
        await my_status.finish('Failed QAQ')
예제 #7
0
async def group_init(bot: Bot, event: GroupMessageEvent, state: T_State) -> Result:
    group_id = event.group_id
    # 调用api获取群信息
    group_info = await bot.call_api(api='get_group_info', group_id=group_id)
    group_name = group_info['group_name']
    group = DBGroup(group_id=group_id)

    # 添加并初始化群信息
    _result = group.add(name=group_name)
    if not _result.success():
        return Result(True, _result.info, -1)

    _result = group.permission_set(notice=1, command=1, level=10)
    if not _result.success():
        return Result(True, _result.info, -1)

    _result = group.member_clear()
    if not _result.success():
        return Result(True, _result.info, -1)

    # 添加用户
    group_member_list = await bot.call_api(api='get_group_member_list', group_id=group_id)
    failed_user = []
    for user_info in group_member_list:
        # 用户信息
        user_qq = user_info['user_id']
        user_nickname = user_info['nickname']
        user_group_nickmane = user_info['card']
        if not user_group_nickmane:
            user_group_nickmane = user_nickname

        _user = DBUser(user_id=user_qq)
        _result = _user.add(nickname=user_nickname)
        if not _result.success():
            failed_user.append(_user.qq)
            logger.warning(f'User: {user_qq}, {_result.info}')
            continue

        _result = group.member_add(user=_user, user_group_nickname=user_group_nickmane)
        if not _result.success():
            failed_user.append(_user.qq)
            logger.warning(f'User: {user_qq}, {_result.info}')

    group.init_member_status()

    return Result(False, f'Success with ignore user: {failed_user}', 0)
예제 #8
0
async def handle_first_receive(bot: Bot, event: GroupMessageEvent,
                               state: T_State):
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    result = user.vocation_status()
    if result.success():
        status, stop_time = result.result
        if status == 1:
            msg = f'你的假期将持续到: 【{stop_time}】'
        else:
            msg = '你似乎并不在假期中呢~需要现在请假吗?'
        logger.info(
            f"my_vocation: {event.group_id}/{user_id}, Success, {result.info}")
        await my_status.finish(msg)
    else:
        logger.error(
            f"my_vocation: {event.group_id}/{user_id}, Failed, {result.info}")
        await my_status.finish('没有查询到你的假期信息QAQ, 请尝试使用【/重置状态】来解决问题')
예제 #9
0
async def handle_vocation_stop(bot: Bot, event: GroupMessageEvent,
                               state: T_State):
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    stop_at = state['stop_at']
    reason = state['reason']
    result = user.vocation_set(stop_time=stop_at, reason=reason)
    if result.success():
        logger.info(
            f"Group: {event.group_id}/{user_id}, set_vocation, Success, {result.info}"
        )
        await set_vocation.finish(
            f'请假成功! 你的假期将持续到【{stop_at.strftime("%Y-%m-%d %H:%M:%S")}】')
    else:
        logger.error(
            f"Group: {event.group_id}/{user_id}, set_vocation, Failed, {result.info}"
        )
        await set_vocation.finish('请假失败, 发生了意外的错误QAQ')
예제 #10
0
async def user_skill_set(bot: Bot, event: GroupMessageEvent, state: T_State) -> Result:
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    skill_name = state['skill_name']
    skill_level = state['skill_level']
    msg = f'为你设置了技能: 【{skill_name}/{skill_level}】'
    if skill_level == '普通':
        skill_level = 1
    elif skill_level == '熟练':
        skill_level = 2
    elif skill_level == '专业':
        skill_level = 3
    _res = user.skill_add(skill=DBSkill(name=skill_name), skill_level=skill_level)
    if _res.success():
        result = Result(False, _res.info, msg)
    else:
        result = Result(True, _res.info, '')
    return result
예제 #11
0
async def handle_first_receive(bot: Bot, event: GroupMessageEvent,
                               state: T_State):
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    result = user.status()
    if result.success():
        status = result.result
        if status == 1:
            status = '请假中'
        elif status == 2:
            status = '工作中'
        else:
            status = '空闲中'
        logger.info(
            f"my_status: {event.group_id}/{user_id}, Success, {result.info}")
        await my_status.finish(f'你现在的状态是: 【{status}】')
    else:
        logger.error(
            f"my_status: {event.group_id}/{user_id}, Failed, {result.info}")
        await my_status.finish('没有查询到你的状态信息QAQ, 请尝试使用【/重置状态】来解决问题')
예제 #12
0
async def user_skill_list(bot: Bot, event: GroupMessageEvent, state: T_State) -> Result:
    user_id = event.user_id
    user = DBUser(user_id=user_id)
    _res = user.skill_list()
    if _res.success():
        if not _res.result:
            msg = '你似乎没有掌握任何技能哦~'
        else:
            msg = '你目前已掌握了以下技能:'
            for skill_name, skill_level in _res.result:
                if skill_level == 1:
                    skill_level = '普通'
                elif skill_level == 2:
                    skill_level = '熟练'
                elif skill_level == 3:
                    skill_level = '专业'
                msg += f'\n【{skill_name}/{skill_level}】'
        result = Result(False, _res.info, msg)
    else:
        result = Result(True, _res.info, '')
    return result
예제 #13
0
async def member_vocations_monitor():
    logger.debug(f"member_vocations_monitor: vocation checking started")

    from nonebot import get_bots

    over_vocation_user = set()

    for bot_id, bot in get_bots().items():
        group_list = await bot.call_api('get_group_list')
        for group in group_list:
            group_id = group.get('group_id')
            group = DBGroup(group_id=group_id)

            # 跳过不具备权限的组
            if group.permission_command(
            ).result != 1 or group.permission_level().result < 80:
                continue

            # 调用api获取群成员信息
            group_member_list = await bot.call_api(api='get_group_member_list',
                                                   group_id=group_id)

            for user_info in group_member_list:
                user_nickname = user_info['card']
                if not user_nickname:
                    user_nickname = user_info['nickname']
                user_qq = user_info['user_id']
                user = DBUser(user_id=user_qq)
                status, stop_time = user.vocation_status().result
                if status == 1 and datetime.now() >= stop_time:
                    msg = f'【{user_nickname}】的假期已经结束啦~\n快给他/她安排工作吧!'
                    await bot.call_api(api='send_group_msg',
                                       group_id=group_id,
                                       message=msg)
                    over_vocation_user.add(user)
    for user in over_vocation_user:
        _res = user.status_set(status=0)
        if not _res.success():
            logger.error(f"reset user status failed: {_res.info}")
    logger.debug('member_vocations_monitor: vocation checking completed')