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}')
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
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
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)
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}')
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')
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)
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, 请尝试使用【/重置状态】来解决问题')
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')
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
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, 请尝试使用【/重置状态】来解决问题')
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
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')