mirror of
https://github.com/nonebot/nonebot2.git
synced 2024-11-28 03:05:25 +08:00
🎨 impove typing
This commit is contained in:
parent
629eed08b6
commit
6b3f6a46e6
@ -28,11 +28,11 @@ import importlib
|
|||||||
import pkg_resources
|
import pkg_resources
|
||||||
from typing import Dict, Type, Optional
|
from typing import Dict, Type, Optional
|
||||||
|
|
||||||
|
from nonebot.adapters import Bot
|
||||||
|
from nonebot.drivers import Driver
|
||||||
from nonebot.utils import escape_tag
|
from nonebot.utils import escape_tag
|
||||||
from nonebot.config import Env, Config
|
from nonebot.config import Env, Config
|
||||||
from nonebot.adapters import BaseBot as Bot
|
|
||||||
from nonebot.log import logger, default_filter
|
from nonebot.log import logger, default_filter
|
||||||
from nonebot.drivers import BaseDriver as Driver
|
|
||||||
|
|
||||||
_dist: pkg_resources.Distribution = pkg_resources.get_distribution("nonebot2")
|
_dist: pkg_resources.Distribution = pkg_resources.get_distribution("nonebot2")
|
||||||
__version__ = _dist.version
|
__version__ = _dist.version
|
||||||
|
@ -15,10 +15,10 @@ from pydantic import BaseModel
|
|||||||
from nonebot.config import Config
|
from nonebot.config import Config
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.drivers import BaseDriver as Driver, BaseWebSocket as WebSocket
|
from nonebot.drivers import Driver, WebSocket
|
||||||
|
|
||||||
|
|
||||||
class BaseBot(abc.ABC):
|
class Bot(abc.ABC):
|
||||||
"""
|
"""
|
||||||
Bot 基类。用于处理上报消息,并提供 API 调用接口。
|
Bot 基类。用于处理上报消息,并提供 API 调用接口。
|
||||||
"""
|
"""
|
||||||
@ -141,7 +141,7 @@ class BaseBot(abc.ABC):
|
|||||||
T = TypeVar("T", bound=BaseModel)
|
T = TypeVar("T", bound=BaseModel)
|
||||||
|
|
||||||
|
|
||||||
class BaseEvent(abc.ABC, Generic[T]):
|
class Event(abc.ABC, Generic[T]):
|
||||||
"""
|
"""
|
||||||
Event 基类。提供上报信息的关键信息,其余信息可从原始上报消息获取。
|
Event 基类。提供上报信息的关键信息,其余信息可从原始上报消息获取。
|
||||||
"""
|
"""
|
||||||
@ -304,7 +304,7 @@ class BaseEvent(abc.ABC, Generic[T]):
|
|||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class BaseMessageSegment(abc.ABC):
|
class MessageSegment(abc.ABC):
|
||||||
"""消息段基类"""
|
"""消息段基类"""
|
||||||
type: str
|
type: str
|
||||||
"""
|
"""
|
||||||
@ -349,7 +349,7 @@ class BaseMessageSegment(abc.ABC):
|
|||||||
return cls("text", {"text": text})
|
return cls("text", {"text": text})
|
||||||
|
|
||||||
|
|
||||||
class BaseMessage(list, abc.ABC):
|
class Message(list, abc.ABC):
|
||||||
"""消息数组"""
|
"""消息数组"""
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
|
@ -10,8 +10,8 @@ import httpx
|
|||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.config import Config
|
from nonebot.config import Config
|
||||||
from nonebot.typing import overrides
|
from nonebot.typing import overrides
|
||||||
from nonebot.adapters import BaseBot
|
|
||||||
from nonebot.message import handle_event
|
from nonebot.message import handle_event
|
||||||
|
from nonebot.adapters import Bot as BaseBot
|
||||||
from nonebot.exception import RequestDenied
|
from nonebot.exception import RequestDenied
|
||||||
|
|
||||||
from .event import Event
|
from .event import Event
|
||||||
|
@ -2,7 +2,7 @@ import asyncio
|
|||||||
from typing import Any, Dict, List, Union, Optional
|
from typing import Any, Dict, List, Union, Optional
|
||||||
|
|
||||||
from nonebot.config import Config
|
from nonebot.config import Config
|
||||||
from nonebot.adapters import BaseBot
|
from nonebot.adapters import Bot as BaseBot
|
||||||
from nonebot.drivers import BaseDriver as Driver, BaseWebSocket as WebSocket
|
from nonebot.drivers import BaseDriver as Driver, BaseWebSocket as WebSocket
|
||||||
|
|
||||||
from .event import Event
|
from .event import Event
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from nonebot.typing import overrides
|
from nonebot.typing import overrides
|
||||||
from nonebot.adapters import BaseEvent
|
from nonebot.adapters import Event as BaseEvent
|
||||||
|
|
||||||
from .message import Message
|
from .message import Message
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import re
|
|||||||
from typing import Any, Dict, Union, Tuple, Iterable, Optional
|
from typing import Any, Dict, Union, Tuple, Iterable, Optional
|
||||||
|
|
||||||
from nonebot.typing import overrides
|
from nonebot.typing import overrides
|
||||||
from nonebot.adapters import BaseMessage, BaseMessageSegment
|
from nonebot.adapters import Message as BaseMessage, MessageSegment as BaseMessageSegment
|
||||||
|
|
||||||
from .utils import log, escape, unescape, _b2s
|
from .utils import log, escape, unescape, _b2s
|
||||||
|
|
||||||
|
@ -6,8 +6,8 @@ from typing import Any, Union, Optional, TYPE_CHECKING
|
|||||||
import httpx
|
import httpx
|
||||||
from nonebot.log import logger
|
from nonebot.log import logger
|
||||||
from nonebot.config import Config
|
from nonebot.config import Config
|
||||||
from nonebot.adapters import BaseBot
|
|
||||||
from nonebot.message import handle_event
|
from nonebot.message import handle_event
|
||||||
|
from nonebot.adapters import Bot as BaseBot
|
||||||
from nonebot.exception import RequestDenied
|
from nonebot.exception import RequestDenied
|
||||||
|
|
||||||
from .utils import log
|
from .utils import log
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from typing import Union, Optional
|
from typing import Union, Optional
|
||||||
|
|
||||||
from nonebot.adapters import BaseEvent
|
from nonebot.adapters import Event as BaseEvent
|
||||||
|
|
||||||
from .message import Message
|
from .message import Message
|
||||||
from .model import MessageModel, ConversationType, TextMessage
|
from .model import MessageModel, ConversationType, TextMessage
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
from typing import Any, Dict, Union, Iterable
|
from typing import Any, Dict, Union, Iterable
|
||||||
|
|
||||||
from nonebot.adapters import BaseMessage, BaseMessageSegment
|
from nonebot.adapters import Message as BaseMessage, MessageSegment as BaseMessageSegment
|
||||||
|
|
||||||
from .utils import log
|
from .utils import log
|
||||||
from .model import TextMessage
|
from .model import TextMessage
|
||||||
|
@ -12,10 +12,10 @@ from nonebot.log import logger
|
|||||||
from nonebot.config import Env, Config
|
from nonebot.config import Env, Config
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.adapters import BaseBot as Bot
|
from nonebot.adapters import Bot
|
||||||
|
|
||||||
|
|
||||||
class BaseDriver(abc.ABC):
|
class Driver(abc.ABC):
|
||||||
"""
|
"""
|
||||||
Driver 基类。将后端框架封装,以满足适配器使用。
|
Driver 基类。将后端框架封装,以满足适配器使用。
|
||||||
"""
|
"""
|
||||||
@ -140,7 +140,7 @@ class BaseDriver(abc.ABC):
|
|||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class BaseWebSocket(object):
|
class WebSocket(object):
|
||||||
"""WebSocket 连接封装,统一接口方便外部调用。"""
|
"""WebSocket 连接封装,统一接口方便外部调用。"""
|
||||||
|
|
||||||
@abc.abstractmethod
|
@abc.abstractmethod
|
||||||
|
@ -23,7 +23,7 @@ from nonebot.typing import overrides
|
|||||||
from nonebot.config import Env, Config
|
from nonebot.config import Env, Config
|
||||||
from nonebot.utils import DataclassEncoder
|
from nonebot.utils import DataclassEncoder
|
||||||
from nonebot.exception import RequestDenied
|
from nonebot.exception import RequestDenied
|
||||||
from nonebot.drivers import BaseDriver, BaseWebSocket
|
from nonebot.drivers import Driver as BaseDriver, WebSocket as BaseWebSocket
|
||||||
|
|
||||||
|
|
||||||
class Driver(BaseDriver):
|
class Driver(BaseDriver):
|
||||||
|
@ -20,9 +20,7 @@ from nonebot.typing import State, Handler, ArgsParser
|
|||||||
from nonebot.exception import PausedException, RejectedException, FinishedException
|
from nonebot.exception import PausedException, RejectedException, FinishedException
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.adapters import (BaseBot as Bot, BaseEvent as Event,
|
from nonebot.adapters import Bot, Event, Message, MessageSegment
|
||||||
BaseMessage as Message, BaseMessageSegment as
|
|
||||||
MessageSegment)
|
|
||||||
|
|
||||||
matchers: Dict[int, List[Type["Matcher"]]] = defaultdict(list)
|
matchers: Dict[int, List[Type["Matcher"]]] = defaultdict(list)
|
||||||
"""
|
"""
|
||||||
|
@ -17,7 +17,7 @@ from nonebot.exception import IgnoredException, StopPropagation
|
|||||||
from nonebot.typing import State, EventPreProcessor, RunPreProcessor, EventPostProcessor, RunPostProcessor
|
from nonebot.typing import State, EventPreProcessor, RunPreProcessor, EventPostProcessor, RunPostProcessor
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.adapters import BaseBot as Bot, BaseEvent as Event
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
_event_preprocessors: Set[EventPreProcessor] = set()
|
_event_preprocessors: Set[EventPreProcessor] = set()
|
||||||
_event_postprocessors: Set[EventPostProcessor] = set()
|
_event_postprocessors: Set[EventPostProcessor] = set()
|
||||||
|
@ -16,7 +16,7 @@ from nonebot.utils import run_sync
|
|||||||
from nonebot.typing import PermissionChecker
|
from nonebot.typing import PermissionChecker
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.adapters import BaseBot as Bot, BaseEvent as Event
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
|
|
||||||
class Permission:
|
class Permission:
|
||||||
|
@ -27,8 +27,8 @@ plugins: Dict[str, "Plugin"] = {}
|
|||||||
:说明: 已加载的插件
|
:说明: 已加载的插件
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_tmp_matchers: ContextVar[Set[Type[Matcher]]] = ContextVar("_tmp_matchers")
|
|
||||||
_export: ContextVar["Export"] = ContextVar("_export")
|
_export: ContextVar["Export"] = ContextVar("_export")
|
||||||
|
_tmp_matchers: ContextVar[Set[Type[Matcher]]] = ContextVar("_tmp_matchers")
|
||||||
|
|
||||||
|
|
||||||
class Export(dict):
|
class Export(dict):
|
||||||
|
@ -10,8 +10,8 @@ from nonebot.typing import State, Handler, RuleChecker
|
|||||||
|
|
||||||
plugins: Dict[str, "Plugin"] = ...
|
plugins: Dict[str, "Plugin"] = ...
|
||||||
|
|
||||||
_tmp_matchers: ContextVar[Set[Type[Matcher]]] = ...
|
|
||||||
_export: ContextVar["Export"] = ...
|
_export: ContextVar["Export"] = ...
|
||||||
|
_tmp_matchers: ContextVar[Set[Type[Matcher]]] = ...
|
||||||
|
|
||||||
|
|
||||||
class Export(dict):
|
class Export(dict):
|
||||||
|
@ -4,7 +4,7 @@ from nonebot.rule import to_me
|
|||||||
from nonebot.typing import State
|
from nonebot.typing import State
|
||||||
from nonebot.plugin import on_command
|
from nonebot.plugin import on_command
|
||||||
from nonebot.permission import SUPERUSER
|
from nonebot.permission import SUPERUSER
|
||||||
from nonebot.adapters import BaseBot as Bot, BaseEvent as Event, BaseMessageSegment as MessageSegment
|
from nonebot.adapters import Bot, Event, MessageSegment
|
||||||
|
|
||||||
say = on_command("say", to_me(), permission=SUPERUSER)
|
say = on_command("say", to_me(), permission=SUPERUSER)
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ from nonebot.utils import run_sync
|
|||||||
from nonebot.typing import State, RuleChecker
|
from nonebot.typing import State, RuleChecker
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.adapters import BaseBot as Bot, BaseEvent as Event
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
|
|
||||||
class Rule:
|
class Rule:
|
||||||
|
@ -18,18 +18,10 @@
|
|||||||
https://docs.python.org/3/library/typing.html
|
https://docs.python.org/3/library/typing.html
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from types import ModuleType
|
from typing import Any, Dict, Union, Optional, Callable, Awaitable, TYPE_CHECKING
|
||||||
from typing import NoReturn, TYPE_CHECKING
|
|
||||||
from typing import Any, Set, List, Dict, Type, Tuple, Mapping
|
|
||||||
from typing import Union, TypeVar, Optional, Iterable, Callable, Awaitable, Generic
|
|
||||||
|
|
||||||
# import some modules needed when checking types
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from nonebot.rule import Rule as RuleClass
|
from nonebot.rule import Rule
|
||||||
from nonebot.drivers import BaseDriver, BaseWebSocket
|
|
||||||
from nonebot.permission import Permission as PermissionClass
|
|
||||||
from nonebot.adapters import BaseBot, BaseEvent, BaseMessage, BaseMessageSegment
|
|
||||||
from nonebot.matcher import Matcher as MatcherClass
|
|
||||||
|
|
||||||
|
|
||||||
def overrides(InterfaceClass: object):
|
def overrides(InterfaceClass: object):
|
||||||
@ -42,56 +34,6 @@ def overrides(InterfaceClass: object):
|
|||||||
return overrider
|
return overrider
|
||||||
|
|
||||||
|
|
||||||
Driver = TypeVar("Driver", bound="BaseDriver")
|
|
||||||
"""
|
|
||||||
:类型: ``BaseDriver``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
所有 Driver 的基类。
|
|
||||||
"""
|
|
||||||
WebSocket = TypeVar("WebSocket", bound="BaseWebSocket")
|
|
||||||
"""
|
|
||||||
:类型: ``BaseWebSocket``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
所有 WebSocket 的基类。
|
|
||||||
"""
|
|
||||||
|
|
||||||
Bot = TypeVar("Bot", bound="BaseBot")
|
|
||||||
"""
|
|
||||||
:类型: ``BaseBot``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
所有 Bot 的基类。
|
|
||||||
"""
|
|
||||||
Event = TypeVar("Event", bound="BaseEvent")
|
|
||||||
"""
|
|
||||||
:类型: ``BaseEvent``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
所有 Event 的基类。
|
|
||||||
"""
|
|
||||||
Message = TypeVar("Message", bound="BaseMessage")
|
|
||||||
"""
|
|
||||||
:类型: ``BaseMessage``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
所有 Message 的基类。
|
|
||||||
"""
|
|
||||||
MessageSegment = TypeVar("MessageSegment", bound="BaseMessageSegment")
|
|
||||||
"""
|
|
||||||
:类型: ``BaseMessageSegment``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
所有 MessageSegment 的基类。
|
|
||||||
"""
|
|
||||||
|
|
||||||
State = Dict[Any, Any]
|
State = Dict[Any, Any]
|
||||||
"""
|
"""
|
||||||
:类型: ``Dict[Any, Any]``
|
:类型: ``Dict[Any, Any]``
|
||||||
@ -134,22 +76,6 @@ RunPostProcessor = Callable[["Matcher", Optional[Exception], Bot, Event, State],
|
|||||||
事件响应器运行前预处理函数 RunPostProcessor 类型,第二个参数为运行时产生的错误(如果存在)
|
事件响应器运行前预处理函数 RunPostProcessor 类型,第二个参数为运行时产生的错误(如果存在)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Matcher = TypeVar("Matcher", bound="MatcherClass")
|
|
||||||
"""
|
|
||||||
:类型: ``Matcher``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
Matcher 即响应事件的处理类。通过 Rule 判断是否响应事件,运行 Handler。
|
|
||||||
"""
|
|
||||||
Rule = TypeVar("Rule", bound="RuleClass")
|
|
||||||
"""
|
|
||||||
:类型: ``Rule``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
Rule 即判断是否响应事件的处理类。内部存储 RuleChecker ,返回全为 True 则响应事件。
|
|
||||||
"""
|
|
||||||
RuleChecker = Callable[[Bot, Event, State], Union[bool, Awaitable[bool]]]
|
RuleChecker = Callable[[Bot, Event, State], Union[bool, Awaitable[bool]]]
|
||||||
"""
|
"""
|
||||||
:类型: ``Callable[[Bot, Event, State], Union[bool, Awaitable[bool]]]``
|
:类型: ``Callable[[Bot, Event, State], Union[bool, Awaitable[bool]]]``
|
||||||
@ -158,14 +84,6 @@ RuleChecker = Callable[[Bot, Event, State], Union[bool, Awaitable[bool]]]
|
|||||||
|
|
||||||
RuleChecker 即判断是否响应事件的处理函数。
|
RuleChecker 即判断是否响应事件的处理函数。
|
||||||
"""
|
"""
|
||||||
Permission = TypeVar("Permission", bound="PermissionClass")
|
|
||||||
"""
|
|
||||||
:类型: ``Permission``
|
|
||||||
|
|
||||||
:说明:
|
|
||||||
|
|
||||||
Permission 即判断是否响应消息的处理类。内部存储 PermissionChecker ,返回只要有一个 True 则响应消息。
|
|
||||||
"""
|
|
||||||
PermissionChecker = Callable[[Bot, Event], Union[bool, Awaitable[bool]]]
|
PermissionChecker = Callable[[Bot, Event], Union[bool, Awaitable[bool]]]
|
||||||
"""
|
"""
|
||||||
:类型: ``Callable[[Bot, Event], Union[bool, Awaitable[bool]]]``
|
:类型: ``Callable[[Bot, Event], Union[bool, Awaitable[bool]]]``
|
||||||
|
@ -1,14 +1,15 @@
|
|||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from nonebot import on_message
|
from nonebot import on_message
|
||||||
|
from nonebot.typing import State
|
||||||
from nonebot.permission import USER
|
from nonebot.permission import USER
|
||||||
from nonebot.typing import Bot, Event
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
a = on_message(priority=0, permission=USER(123123123), temp=True)
|
a = on_message(priority=0, permission=USER(123123123), temp=True)
|
||||||
|
|
||||||
|
|
||||||
@a.handle()
|
@a.handle()
|
||||||
async def test_a(bot: Bot, event: Event, state: dict):
|
async def test_a(bot: Bot, event: Event, state: State):
|
||||||
print("======== A Received ========")
|
print("======== A Received ========")
|
||||||
print("======== A Running Completed ========")
|
print("======== A Running Completed ========")
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ b = on_message(priority=0, permission=USER(123456789), temp=True)
|
|||||||
|
|
||||||
|
|
||||||
@b.handle()
|
@b.handle()
|
||||||
async def test_b(bot: Bot, event: Event, state: dict):
|
async def test_b(bot: Bot, event: Event, state: State):
|
||||||
print("======== B Received ========")
|
print("======== B Received ========")
|
||||||
await asyncio.sleep(10)
|
await asyncio.sleep(10)
|
||||||
print("======== B Running Completed ========")
|
print("======== B Running Completed ========")
|
||||||
@ -27,5 +28,5 @@ c = on_message(priority=0, permission=USER(1111111111))
|
|||||||
|
|
||||||
|
|
||||||
@c.handle()
|
@c.handle()
|
||||||
async def test_c(bot: Bot, event: Event, state: dict):
|
async def test_c(bot: Bot, event: Event, state: State):
|
||||||
print("======== C Received ========")
|
print("======== C Received ========")
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
from nonebot.typing import Bot, Event
|
from nonebot.typing import State
|
||||||
|
from nonebot.adapters import Bot, Event
|
||||||
from nonebot.permission import GROUP_OWNER
|
from nonebot.permission import GROUP_OWNER
|
||||||
|
|
||||||
from . import cmd
|
from . import cmd
|
||||||
@ -7,5 +8,5 @@ test_1 = cmd.command("1", aliases={"test"}, permission=GROUP_OWNER)
|
|||||||
|
|
||||||
|
|
||||||
@test_1.handle()
|
@test_1.handle()
|
||||||
async def test1(bot: Bot, event: Event, state: dict):
|
async def test1(bot: Bot, event: Event, state: State):
|
||||||
await test_1.finish(event.raw_message)
|
await test_1.finish(event.raw_message)
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
from nonebot.typing import Bot, Event
|
from nonebot.typing import State
|
||||||
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
from . import match
|
from . import match
|
||||||
|
|
||||||
|
|
||||||
async def heartbeat(bot: Bot, event: Event, state: dict) -> bool:
|
async def heartbeat(bot: Bot, event: Event, state: State) -> bool:
|
||||||
return event.detail_type == "heartbeat"
|
return event.detail_type == "heartbeat"
|
||||||
|
|
||||||
|
|
||||||
@ -11,5 +12,5 @@ test = match.on_metaevent(rule=heartbeat)
|
|||||||
|
|
||||||
|
|
||||||
@test.receive()
|
@test.receive()
|
||||||
async def handle_heartbeat(bot: Bot, event: Event, state: dict):
|
async def handle_heartbeat(bot: Bot, event: Event, state: State):
|
||||||
print("[i] Heartbeat")
|
print("[i] Heartbeat")
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
from nonebot.typing import Bot, Event
|
from nonebot.typing import State
|
||||||
|
from nonebot.adapters import Bot, Event
|
||||||
from nonebot.plugin import on_metaevent
|
from nonebot.plugin import on_metaevent
|
||||||
|
|
||||||
|
|
||||||
async def heartbeat(bot: Bot, event: Event, state: dict) -> bool:
|
async def heartbeat(bot: Bot, event: Event, state: State) -> bool:
|
||||||
return event.detail_type == "heartbeat"
|
return event.detail_type == "heartbeat"
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.typing import Event
|
from nonebot.typing import State
|
||||||
from nonebot.plugin import on_command
|
from nonebot.plugin import on_command
|
||||||
from nonebot.adapters.cqhttp import Bot
|
from nonebot.adapters.cqhttp import Bot, Event
|
||||||
|
|
||||||
test_command = on_command("帮助", to_me())
|
test_command = on_command("帮助", to_me())
|
||||||
|
|
||||||
|
|
||||||
@test_command.handle()
|
@test_command.handle()
|
||||||
async def test_handler(bot: Bot, event: Event, state: dict):
|
async def test_handler(bot: Bot, event: Event, state: State):
|
||||||
args = str(event.message).strip()
|
args = str(event.message).strip()
|
||||||
print("[!] Command:", state["_prefix"], "Args:", args)
|
print("[!] Command:", state["_prefix"], "Args:", args)
|
||||||
if args:
|
if args:
|
||||||
@ -17,7 +17,7 @@ async def test_handler(bot: Bot, event: Event, state: dict):
|
|||||||
|
|
||||||
|
|
||||||
@test_command.got("help", prompt="你要帮助的命令是?")
|
@test_command.got("help", prompt="你要帮助的命令是?")
|
||||||
async def test_handler(bot: Bot, event: Event, state: dict):
|
async def test_handler(bot: Bot, event: Event, state: State):
|
||||||
print("[!] Command 帮助:", state["help"])
|
print("[!] Command 帮助:", state["help"])
|
||||||
if state["help"] not in ["test1", "test2"]:
|
if state["help"] not in ["test1", "test2"]:
|
||||||
await test_command.reject(f"{state['help']} 不支持,请重新输入!")
|
await test_command.reject(f"{state['help']} 不支持,请重新输入!")
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.typing import Event
|
from nonebot.typing import State
|
||||||
from nonebot.plugin import on_startswith
|
from nonebot.plugin import on_startswith
|
||||||
from nonebot.adapters.cqhttp import Bot
|
|
||||||
from nonebot.adapters.ding import Bot as DingBot, Event as DingEvent
|
|
||||||
from nonebot.permission import GROUP_ADMIN
|
from nonebot.permission import GROUP_ADMIN
|
||||||
|
from nonebot.adapters.ding import Bot as DingBot, Event as DingEvent
|
||||||
|
from nonebot.adapters.cqhttp import Bot as CQHTTPBot, Event as CQHTTPEvent
|
||||||
|
|
||||||
test_command = on_startswith("hello", to_me(), permission=GROUP_ADMIN)
|
test_command = on_startswith("hello", to_me(), permission=GROUP_ADMIN)
|
||||||
|
|
||||||
|
|
||||||
@test_command.handle()
|
@test_command.handle()
|
||||||
async def test_handler(bot: Bot, event: Event, state: dict):
|
async def test_handler(bot: CQHTTPBot, event: CQHTTPEvent, state: State):
|
||||||
await test_command.finish("cqhttp hello")
|
await test_command.finish("cqhttp hello")
|
||||||
|
|
||||||
|
|
||||||
@test_command.handle()
|
@test_command.handle()
|
||||||
async def test_handler(bot: DingBot, event: DingEvent, state: dict):
|
async def test_handler(bot: DingBot, event: DingEvent, state: State):
|
||||||
await test_command.finish("ding hello")
|
await test_command.finish("ding hello")
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
from nonebot.typing import Bot, Event, Matcher
|
from nonebot.typing import State
|
||||||
|
from nonebot.matcher import Matcher
|
||||||
|
from nonebot.adapters import Bot, Event
|
||||||
from nonebot.message import event_preprocessor, run_preprocessor
|
from nonebot.message import event_preprocessor, run_preprocessor
|
||||||
|
|
||||||
|
|
||||||
@event_preprocessor
|
@event_preprocessor
|
||||||
async def handle(bot: Bot, event: Event, state: dict):
|
async def handle(bot: Bot, event: Event, state: State):
|
||||||
state["preprocessed"] = True
|
state["preprocessed"] = True
|
||||||
print(event)
|
print(event)
|
||||||
|
|
||||||
|
|
||||||
@run_preprocessor
|
@run_preprocessor
|
||||||
async def run(matcher: Matcher, bot: Bot, event: Event, state: dict):
|
async def run(matcher: Matcher, bot: Bot, event: Event, state: State):
|
||||||
print(matcher)
|
print(matcher)
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
from nonebot import on_command
|
from nonebot import on_command
|
||||||
from nonebot.rule import to_me
|
from nonebot.rule import to_me
|
||||||
from nonebot.typing import Bot, Event
|
from nonebot.typing import State
|
||||||
|
from nonebot.adapters import Bot, Event
|
||||||
|
|
||||||
weather = on_command("天气", rule=to_me(), priority=1)
|
weather = on_command("天气", rule=to_me(), priority=1)
|
||||||
|
|
||||||
|
|
||||||
@weather.handle()
|
@weather.handle()
|
||||||
async def handle_first_receive(bot: Bot, event: Event, state: dict):
|
async def handle_first_receive(bot: Bot, event: Event, state: State):
|
||||||
args = str(event.message).strip() # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海
|
args = str(event.message).strip() # 首次发送命令时跟随的参数,例:/天气 上海,则args为上海
|
||||||
print(f"==={args}===")
|
print(f"==={args}===")
|
||||||
if args:
|
if args:
|
||||||
@ -14,7 +15,7 @@ async def handle_first_receive(bot: Bot, event: Event, state: dict):
|
|||||||
|
|
||||||
|
|
||||||
@weather.got("city", prompt="你想查询哪个城市的天气呢?")
|
@weather.got("city", prompt="你想查询哪个城市的天气呢?")
|
||||||
async def handle_city(bot: Bot, event: Event, state: dict):
|
async def handle_city(bot: Bot, event: Event, state: State):
|
||||||
city = state["city"]
|
city = state["city"]
|
||||||
if city not in ["上海", "北京"]:
|
if city not in ["上海", "北京"]:
|
||||||
await weather.reject("你想查询的城市暂不支持,请重新输入!")
|
await weather.reject("你想查询的城市暂不支持,请重新输入!")
|
||||||
|
Loading…
Reference in New Issue
Block a user