コード例 #1
0
ファイル: single_session.py プロジェクト: synodriver/nonebot2
async def postprocess(event: Event):
    try:
        session_id = event.get_session_id()
    except Exception:
        return
    if session_id in _running_matcher:
        del _running_matcher[session_id]
コード例 #2
0
ファイル: utils.py プロジェクト: nightingu/damebot
async def command_env_settings(bot: Bot, event: Event, state: T_State, matcher: Matcher, regex: str):
    env_vars = os.environ.copy()
    old_python_env = env_vars.get("PYTHONPATH", "")
    if old_python_env.strip() == "":
        old_python_env = []
    else:
        old_python_env = old_python_env.split(":")
    env_vars["PYTHONPATH"] = ":".join(old_python_env + [str(PROJECT_ROOT)])
    if event is not None:
        env_vars["BOT_USER_ID"] = str(event.get_user_id())
        env_vars["BOT_SESSION_ID"] = str(event.get_session_id())
        if event.is_tome():
            env_vars["TO_BOT"] = str(1)
        env_vars["BOT_EVENT_TYPE"] = str(event.get_type())
        msg = str(event.get_plaintext())
        env_vars["BOT_EVENT_MESSAGE"] = msg
        group_id = getattr(event, "group_id", None)
        if group_id is not None:
            env_vars["BOT_GROUP_ID"] = str(group_id)
        if regex is not None:
            match = re.match(regex, msg, flags=re.MULTILINE | re.DOTALL)
            if match:
                _, origin_command, command_text = match.groups()
                env_vars["BOT_EVENT_COMMAND"] = origin_command
                env_vars["BOT_EVENT_COMMAND_ARGS"] = command_text
    return env_vars
コード例 #3
0
ファイル: single_session.py プロジェクト: Fxizenta/qqbot
async def _(matcher: Matcher, exception: Optional[Exception], bot: Bot, event: Event, state: T_State):
    try:
        session_id = event.get_session_id()
    except:
        session_id = None
    if session_id in _running_matcher:
        del _running_matcher[session_id]
コード例 #4
0
ファイル: single_session.py プロジェクト: zelong77/nonebot2
async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
    session_id = event.get_session_id()
    event_id = id(event)

    if _running_matcher.get(session_id, None) != event_id:
        raise IgnoredException("Annother matcher running")

    _running_matcher[session_id] = event_id
コード例 #5
0
async def postprocess(matcher: Matcher, exception: Optional[Exception],
                      bot: Bot, event: Event, state: T_State):
    try:
        session_id = event.get_session_id()
    except Exception:
        return
    if session_id in _running_matcher:
        del _running_matcher[session_id]
コード例 #6
0
ファイル: single_session.py プロジェクト: synodriver/nonebot2
async def preprocess(event: Event):
    try:
        session_id = event.get_session_id()
    except Exception:
        return
    current_event_id = id(event)
    event_id = _running_matcher.get(session_id, None)
    if event_id and event_id != current_event_id:
        raise IgnoredException("Another matcher running")

    _running_matcher[session_id] = current_event_id
コード例 #7
0
async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
    try:
        session_id = event.get_session_id()
    except Exception:
        return
    current_event_id = id(event)
    event_id = _running_matcher.get(session_id, None)
    if event_id and event_id != current_event_id:
        raise IgnoredException("Another matcher running")

    _running_matcher[session_id] = current_event_id
コード例 #8
0
ファイル: single_session.py プロジェクト: Fxizenta/qqbot
async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
    try:
        session_id = event.get_session_id()
    except:
        session_id = None
    event_id = id(event)
    eid = _running_matcher.get(session_id, None)
    if eid != event_id and eid is not None:
        raise IgnoredException("Annother matcher running")

    _running_matcher[session_id] = event_id
コード例 #9
0
async def _handle_init(bot: Bot, event: Event, state: T_State):

    await database.connect()
    user_status = await database.fetch_val(f"SELECT command_active FROM status WHERE session_id = {event.get_session_id()}")

    # 用户不存在
    if user_status == None:
        await database.execute("INSERT INTO status (message_type, session_id, command_active) VALUES (:mgt,:sid,:cat)",
                                {'mgt': str(event.get_event_name()),
                                'sid': int(event.get_session_id()),
                                'cat': 1})
        await database.execute("INSERT INTO commands (session_id) VALUES (:sid)",
                                {'sid': int(event.get_session_id())})
        await bot.send(message='* 进入交互环境,输入 exit 退出', event=event)

    # 用户存在,判断状态
    if user_status == 0: 
        await database.execute(f"UPDATE status SET command_active = 1 WHERE session_id = {event.get_session_id()}")
        await bot.send(message='进入交互环境,输入 exit 退出', event=event)
    elif user_status == 1:
        await bot.send(message='已处于交互环境,输入 exit 退出', event=event)

    await database.disconnect()
コード例 #10
0
async def matcher_mutex(event: Event) -> AsyncGenerator[bool, None]:
    result = False
    try:
        session_id = event.get_session_id()
    except Exception:
        yield result
    else:
        current_event_id = id(event)
        event_id = _running_matcher.get(session_id, None)
        if event_id:
            result = event_id != current_event_id
        else:
            _running_matcher[session_id] = current_event_id
        yield result
        if not result:
            del _running_matcher[session_id]
コード例 #11
0
ファイル: __init__.py プロジェクト: iyume/arcaea-bot
async def handle_best30(bot: Bot, event: Event, state: T_State):

    userlst = str(showuser())

    if state['arg'] == 'userinfo':
        if str(event.get_session_id()) in userlst:
            try:
                code = qqnum2code(int(event.get_session_id()))
                userinfo = await getuserinfo(code)
                await bot.send(message=str(userinfo), event=event)
            except:
                await bot.send(message='失败了~', event=event)
        else:
            await bot.send(message='未注册', event=event)
        await arcbot.finish()


    if state['arg'] == 'recent':
        if str(event.get_session_id()) in userlst:

            try:
                code = qqnum2code(int(event.get_session_id()))
                recent = await getrecent(code)
                await bot.send(message=str(recent), event=event)
            except:
                await bot.send(message='失败了~', event=event)

        else:
            await bot.send(message='未注册', event=event)
        await arcbot.finish()


    if state['arg'] == 'b30':
        # await bot.send(message="[CQ:image,file=file:///root/service/notebook_workdir/img.jpg]b30", event=event)
        # await bot.send(message=[{"type":"image","data":{"file":"file:///root/service/notebook_workdir/img.jpg"}}], event=event)
        # cq_img = await get_best30(int(event.get_session_id()))
        # await bot.send(message=event.get_event_name(), event=event)
#        if 'private' in event.get_event_name():
#            await get_best30(int(event.get_session_id()), False)
#        else:
#            await get_best30(int(event.get_session_id()), True)
        # await bot.send(message=event.get_user_id(), event=event)
        if str(event.get_session_id()) in str(showuser()):
            try:
                await bot.send(message= 'ID: ' + str(event.get_session_id()) + '\n努力生成中`(*>﹏<*)\n注意:初次查分会耗时 1min 左右', event=event)
                code = qqnum2code(int(event.get_session_id()))
                # path = await genimg(code)
                path = await getbest30(code)
                await bot.send(message=[{"type":"image","data":{"file":f"file://{path}"}}], event=event)
            except:
                await bot.send(message='异常警报!请联系 Master', event=event)
        else:
            await bot.send(message='未注册哼哼 啊啊啊啊啊啊 啊啊啊啊啊啊啊啊啊啊啊ヾο(=ω<=)ρ', event=event)

        await arcbot.finish()


    if state['arg'].split(' ')[0] == 'register' or 'bind':
        code = state['arg'].split(' ')[-1] or ''
        if len(code) == 9:
            if event.get_session_id() not in userlst:
                adduser(int(code), int(event.get_session_id()))
                await bot.send(message='Success', event=event)
            else:
                await bot.send(message='已注册', event=event)
        else:
            await bot.send(message='Code invalid', event=event)


    if state['arg'].split(' ')[0] == 'removeuser':
        code = state['arg'].split(' ')[1] or None
        if code != None and str(code) in str(showuser()):
            _ = deluser(int(code))
            await bot.send(message=f'Delete {code} Success', event=event)
        else:
            await bot.send(message='Code invalid',event=event)
        await arcbot.finish()


    await arcbot.finish()
コード例 #12
0
ファイル: permission.py プロジェクト: synodriver/nonebot2
 async def __call__(self, bot: Bot, event: Event) -> bool:
     return bool(
         event.get_session_id() in self.users
         and (self.perm is None or await self.perm(bot, event))
     )
コード例 #13
0
 async def update_permission(self, bot: Bot, event: Event) -> Permission:
     updater = self.__class__._default_permission_updater
     if not updater:
         return USER(event.get_session_id(), perm=self.permission)
     return await updater(bot=bot, event=event, state=self.state, matcher=self)