add outer manager #6

This commit is contained in:
felinae98 2021-06-16 12:53:35 +08:00
parent 74b754f283
commit 286772a6db
No known key found for this signature in database
GPG Key ID: 00C8B010587FF610

View File

@ -1,3 +1,4 @@
from typing import Type
from nonebot import logger, on_command from nonebot import logger, on_command
from nonebot.adapters.cqhttp import Bot, Event, GroupMessageEvent from nonebot.adapters.cqhttp import Bot, Event, GroupMessageEvent
from nonebot.adapters.cqhttp.message import Message from nonebot.adapters.cqhttp.message import Message
@ -5,6 +6,7 @@ from nonebot.adapters.cqhttp.permission import GROUP_ADMIN, GROUP_MEMBER, GROUP_
from nonebot.permission import Permission, SUPERUSER from nonebot.permission import Permission, SUPERUSER
from nonebot.rule import to_me from nonebot.rule import to_me
from nonebot.typing import T_State from nonebot.typing import T_State
from nonebot.matcher import Matcher
from .config import Config, NoSuchSubscribeException from .config import Config, NoSuchSubscribeException
from .platform import platform_manager, check_sub_target from .platform import platform_manager, check_sub_target
@ -23,22 +25,16 @@ async def send_help(bot: Bot, event: Event, state: T_State):
message = '使用方法:\n@bot 添加订阅(仅管理员)\n@bot 查询订阅\n@bot 删除订阅(仅管理员)' message = '使用方法:\n@bot 添加订阅(仅管理员)\n@bot 查询订阅\n@bot 删除订阅(仅管理员)'
await help_match.finish(Message(await parse_text(message))) await help_match.finish(Message(await parse_text(message)))
add_sub = on_command("添加订阅", rule=to_me(), permission=GROUP_ADMIN | GROUP_OWNER | SUPERUSER, priority=5)
@add_sub.handle()
async def add_sub_handle_platform(bot: Bot, event: Event, state: T_State):
if 'platform' in state:
return
await bot.send(event=event, message='请输入想要订阅的平台,目前支持:\n' +
''.join(['{}{}\n'.format(platform_name, platform_manager[platform_name].name) \
for platform_name in common_platform]) +
'要查看全部平台请输入:“全部”'
)
await add_sub.pause()
def do_add_sub(add_sub: Type[Matcher]):
@add_sub.handle() @add_sub.handle()
async def add_sub_parse_platform(bot: Bot, event: Event, state: T_State): async def init_promote(bot: Bot, event: Event, state: T_State):
if 'platform' in state: state['_prompt'] = '请输入想要订阅的平台,目前支持:\n' + \
return ''.join(['{}{}\n'.format(platform_name, platform_manager[platform_name].name) \
for platform_name in common_platform]) + \
'要查看全部平台请输入:“全部”'
async def parse_platform(bot: Bot, event: Event, state: T_State) -> None:
platform = str(event.get_message()).strip() platform = str(event.get_message()).strip()
if platform == '全部': if platform == '全部':
message = '全部平台\n' + \ message = '全部平台\n' + \
@ -49,19 +45,13 @@ async def add_sub_parse_platform(bot: Bot, event: Event, state: T_State):
state['platform'] = platform state['platform'] = platform
else: else:
await add_sub.reject('平台输入错误') await add_sub.reject('平台输入错误')
# @add_sub.got('platform', '请输入想要订阅的平台,目前支持:{}'.format(', '.join(platform_manager.keys())))
# @add_sub.got('id', '请输入订阅用户的id详情查阅https://github.com/felinae98/nonebot-hk-reporter')
@add_sub.handle()
async def add_sub_handle_id(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].has_target or 'id' in state:
return
await bot.send(event=event, message='请输入订阅用户的id详情查阅https://github.com/felinae98/nonebot-hk-reporter')
await add_sub.pause()
@add_sub.got('platform', '{_prompt}', parse_platform)
@add_sub.handle() @add_sub.handle()
async def add_sub_parse_id(bot: Bot, event: Event, state: T_State): async def init_id(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].has_target or 'id' in state: state['_prompt'] = '请输入订阅用户的id详情查阅https://github.com/felinae98/nonebot-hk-reporter'
return
async def parse_id(bot: Bot, event: Event, state: T_State):
target = str(event.get_message()).strip() target = str(event.get_message()).strip()
name = await check_sub_target(state['platform'], target) name = await check_sub_target(state['platform'], target)
if not name: if not name:
@ -69,23 +59,16 @@ async def add_sub_parse_id(bot: Bot, event: Event, state: T_State):
state['id'] = target state['id'] = target
state['name'] = name state['name'] = name
@add_sub.got('id', '{_prompt}', parse_id)
@add_sub.handle() @add_sub.handle()
async def add_sub_handle_cat(bot: Bot, event: Event, state: T_State): async def init_cat(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].categories: if not platform_manager[state['platform']].categories:
state['cats'] = []
return return
if 'cats' in state: state['_prompt'] = '请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format(
return ','.join(list(platform_manager[state['platform']].categories.values())))
await bot.send(event=event, message='请输入要订阅的类别,以空格分隔,支持的类别有:{}'.format(
','.join(list(platform_manager[state['platform']].categories.values()))
))
await add_sub.pause()
@add_sub.handle() async def parser_cats(bot: Bot, event: Event, state: T_State):
async def add_sub_parse_cat(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].categories:
return
if 'cats' in state:
return
res = [] res = []
for cat in str(event.get_message()).strip().split(): for cat in str(event.get_message()).strip().split():
if cat not in platform_manager[state['platform']].reverse_category: if cat not in platform_manager[state['platform']].reverse_category:
@ -93,43 +76,38 @@ async def add_sub_parse_cat(bot: Bot, event: Event, state: T_State):
res.append(platform_manager[state['platform']].reverse_category[cat]) res.append(platform_manager[state['platform']].reverse_category[cat])
state['cats'] = res state['cats'] = res
@add_sub.got('cats', '{_prompt}', parser_cats)
@add_sub.handle() @add_sub.handle()
async def add_sub_handle_tag(bot: Bot, event: Event, state: T_State): async def init_tag(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].enable_tag: if not platform_manager[state['platform']].enable_tag:
state['tags'] = []
return return
if 'tags' in state: state['_prompt'] = '请输入要订阅的tag订阅所有tag输入"全部标签"'
return
await bot.send(event=event, message='请输入要订阅的tag订阅所有tag输入"全部标签"')
await add_sub.pause()
@add_sub.handle() async def parser_tags(bot: Bot, event: Event, state: T_State):
async def add_sub_parse_tag(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].enable_tag:
return
if 'tags' in state:
return
if str(event.get_message()).strip() == '全部标签': if str(event.get_message()).strip() == '全部标签':
state['tags'] = [] state['tags'] = []
else: else:
state['tags'] = str(event.get_message()).strip().split() state['tags'] = str(event.get_message()).strip().split()
@add_sub.got('tags', '{_prompt}', parser_tags)
@add_sub.handle() @add_sub.handle()
async def add_sub_process(bot: Bot, event: GroupMessageEvent, state: T_State): async def add_sub_process(bot: Bot, event: Event, state: T_State):
if not platform_manager[state['platform']].has_target: if not platform_manager[state['platform']].has_target:
state['name'] = await platform_manager[state['platform']].get_account_name(Target('')) state['name'] = await platform_manager[state['platform']].get_account_name(Target(''))
state['id'] = 'default' state['id'] = 'default'
config = Config() config = Config()
config.add_subscribe(event.group_id, user_type='group', config.add_subscribe(state.get('_user_id') or event.group_id, user_type='group',
target=state['id'], target=state['id'],
target_name=state['name'], target_type=state['platform'], target_name=state['name'], target_type=state['platform'],
cats=state.get('cats', []), tags=state.get('tags', [])) cats=state.get('cats', []), tags=state.get('tags', []))
await add_sub.finish('添加 {} 成功'.format(state['name'])) await add_sub.finish('添加 {} 成功'.format(state['name']))
query_sub = on_command("查询订阅", rule=to_me(), priority=5) def do_query_sub(query_sub: Type[Matcher]):
@query_sub.handle() @query_sub.handle()
async def _(bot: Bot, event: GroupMessageEvent, state: T_State): async def _(bot: Bot, event: Event, state: T_State):
config: Config = Config() config: Config = Config()
sub_list = config.list_subscribe(event.group_id, "group") sub_list = config.list_subscribe(state.get('_user_id') or event.group_id, "group")
res = '订阅的帐号为:\n' res = '订阅的帐号为:\n'
for sub in sub_list: for sub in sub_list:
res += '{} {} {}'.format(sub['target_type'], sub['target_name'], sub['target']) res += '{} {} {}'.format(sub['target_type'], sub['target_name'], sub['target'])
@ -142,11 +120,11 @@ async def _(bot: Bot, event: GroupMessageEvent, state: T_State):
# send_msgs(bot, event.group_id, 'group', [await parse_text(res)]) # send_msgs(bot, event.group_id, 'group', [await parse_text(res)])
await query_sub.finish(Message(await parse_text(res))) await query_sub.finish(Message(await parse_text(res)))
del_sub = on_command("删除订阅", rule=to_me(), permission=GROUP_ADMIN | GROUP_OWNER | SUPERUSER, priority=5) def do_del_sub(del_sub: Type[Matcher]):
@del_sub.handle() @del_sub.handle()
async def send_list(bot: Bot, event: GroupMessageEvent, state: T_State): async def send_list(bot: Bot, event: Event, state: T_State):
config: Config = Config() config: Config = Config()
sub_list = config.list_subscribe(event.group_id, "group") sub_list = config.list_subscribe(state.get('_user_id') or event.group_id, "group")
res = '订阅的帐号为:\n' res = '订阅的帐号为:\n'
state['sub_table'] = {} state['sub_table'] = {}
for index, sub in enumerate(sub_list, 1): for index, sub in enumerate(sub_list, 1):
@ -162,13 +140,43 @@ async def send_list(bot: Bot, event: GroupMessageEvent, state: T_State):
await bot.send(event=event, message=Message(await parse_text(res))) await bot.send(event=event, message=Message(await parse_text(res)))
@del_sub.receive() @del_sub.receive()
async def do_del(bot, event: GroupMessageEvent, state: T_State): async def do_del(bot, event: Event, state: T_State):
try: try:
index = int(str(event.get_message()).strip()) index = int(str(event.get_message()).strip())
config = Config() config = Config()
config.del_subscribe(event.group_id, 'group', **state['sub_table'][index]) config.del_subscribe(state.get('_user_id') or event.group_id, 'group', **state['sub_table'][index])
except Exception as e: except Exception as e:
await del_sub.reject('删除错误') await del_sub.reject('删除错误')
logger.warning(e) logger.warning(e)
else: else:
await del_sub.finish('删除成功') await del_sub.finish('删除成功')
async def parse_group_number(bot: Bot, event: Event, state: T_State):
state[state["_current_key"]] = int(str(event.get_message()))
add_sub_matcher = on_command("添加订阅", rule=to_me(), permission=GROUP_ADMIN | GROUP_OWNER | SUPERUSER, priority=5)
do_add_sub(add_sub_matcher)
manage_add_sub_mather = on_command('管理-添加订阅', permission=SUPERUSER, priority=5)
@manage_add_sub_mather.got('_user_id', "群号", parse_group_number)
async def handle(bot: Bot, event: Event, state: T_State):
pass
do_add_sub(manage_add_sub_mather)
query_sub_macher = on_command("查询订阅", rule=to_me(), priority=5)
do_query_sub(query_sub_macher)
manage_query_sub_mather = on_command('管理-查询订阅', permission=SUPERUSER, priority=5)
@manage_query_sub_mather.got('_user_id', "群号", parse_group_number)
async def handle(bot: Bot, event: Event, state: T_State):
pass
do_query_sub(manage_query_sub_mather)
del_sub_macher = on_command("删除订阅", rule=to_me(), permission=GROUP_ADMIN | GROUP_OWNER | SUPERUSER, priority=5)
do_del_sub(del_sub_macher)
manage_del_sub_mather = on_command('管理-删除订阅', permission=SUPERUSER, priority=5)
@manage_del_sub_mather.got('_user_id', "群号", parse_group_number)
async def handle(bot: Bot, event: Event, state: T_State):
pass
do_del_sub(manage_del_sub_mather)