Module aiocqhttp.default
此模块提供了默认 bot 对象及用于控制和使用它的相关函数、对象、和装饰器。
Expand source code
"""
此模块提供了默认 bot 对象及用于控制和使用它的相关函数、对象、和装饰器。
"""
from . import CQHttp
from .api_impl import LazyApi
__all__ = [
'default_bot',
'default_server_app',
'api',
'sync_api',
'reconfigure_default_bot',
'run',
'send',
'before_sending',
'on',
'on_message',
'on_notice',
'on_request',
'on_meta_event',
'before',
'before_message',
'before_notice',
'before_request',
'before_meta_event',
]
__pdoc__ = {}
default_bot = CQHttp()
"""默认 bot 对象。"""
default_server_app = default_bot.server_app
"""默认 bot 对象的 Quart app。"""
api = default_bot.api
"""默认 bot 对象的 `aiocqhttp.api.AsyncApi` 对象,用于异步地调用 OneBot API。"""
sync_api = LazyApi(lambda: default_bot.sync)
"""默认 bot 对象的 `aiocqhttp.api.SyncApi` 对象,用于同步地调用 OneBot API。"""
reconfigure_default_bot = default_bot._configure
__pdoc__['reconfigure_default_bot'] = """
重新配置默认 bot 对象。
"""
run = default_bot.run
__pdoc__['run'] = """
运行默认 bot 对象。
"""
send = default_bot.send
__pdoc__['send'] = """
使用默认 bot 对象发送消息。
"""
before_sending = default_bot.before_sending
__pdoc__['before_sending'] = """
注册默认 bot 对象发送消息前的钩子函数,用作装饰器。
"""
on = default_bot.on
__pdoc__['on'] = """
注册默认 bot 对象的事件处理函数,用作装饰器。
"""
on_message = default_bot.on_message
__pdoc__['on_message'] = """
注册默认 bot 对象的消息事件处理函数,用作装饰器。
"""
on_notice = default_bot.on_notice
__pdoc__['on_notice'] = """
注册默认 bot 对象的通知事件处理函数,用作装饰器。
"""
on_request = default_bot.on_request
__pdoc__['on_request'] = """
注册默认 bot 对象的请求事件处理函数,用作装饰器。
"""
on_meta_event = default_bot.on_meta_event
__pdoc__['on_meta_event'] = """
注册默认 bot 对象的元事件处理函数,用作装饰器。
"""
before = default_bot.before
__pdoc__['before'] = """
注册默认 bot 对象事件处理前的钩子函数,用作装饰器。
"""
before_message = default_bot.before_message
__pdoc__['before_message'] = """
注册默认 bot 对象消息事件处理前的钩子函数,用作装饰器。
"""
before_notice = default_bot.before_notice
__pdoc__['before_notice'] = """
注册默认 bot 对象的通知事件处理前的钩子函数,用作装饰器。
"""
before_request = default_bot.before_request
__pdoc__['before_request'] = """
注册默认 bot 对象的请求事件处理前的钩子函数,用作装饰器。
"""
before_meta_event = default_bot.before_meta_event
__pdoc__['before_meta_event'] = """
注册默认 bot 对象的元事件处理前的钩子函数,用作装饰器。
"""
Global variables
Functions
def reconfigure_default_bot(api_root: Union[str, NoneType] = None, access_token: Union[str, NoneType] = None, secret: Union[~AnyStr, NoneType] = None, message_class: Union[type, NoneType] = None, api_timeout_sec: Union[float, NoneType] = None)
-
重新配置默认 bot 对象。
Expand source code
def _configure(self, api_root: Optional[str] = None, access_token: Optional[str] = None, secret: Optional[AnyStr] = None, message_class: Optional[type] = None, api_timeout_sec: Optional[float] = None): self._message_class = message_class api_timeout_sec = api_timeout_sec or 60 # wait for 60 secs by default self._access_token = access_token self._secret = secret self._api._http_api = HttpApi(api_root, access_token, api_timeout_sec) self._wsr_api_clients = {} # connected wsr api clients self._wsr_event_clients = set() self._api._wsr_api = WebSocketReverseApi(self._wsr_api_clients, self._wsr_event_clients, api_timeout_sec)
def run(host: str = '127.0.0.1', port: int = 8080, *args, **kwargs) ‑> NoneType
-
运行默认 bot 对象。
Expand source code
def run(self, host: str = '127.0.0.1', port: int = 8080, *args, **kwargs) -> None: """运行 bot 对象,实际就是运行 Quart app,参数与 `Quart.run` 一致。""" if 'use_reloader' not in kwargs: kwargs['use_reloader'] = False self._server_app.run(host=host, port=port, *args, **kwargs)
async def send(event: Event, message: Union[str, Dict[str, Any], List[Dict[str, Any]], ForwardRef('MessageSegment'), ForwardRef('Message')], **kwargs) ‑> Union[Dict[str, Any], NoneType]
-
使用默认 bot 对象发送消息。
Expand source code
async def send(self, event: Event, message: Message_T, **kwargs) -> Optional[Dict[str, Any]]: """ 向触发事件的主体发送消息。 ``event`` 参数为事件对象,``message`` 参数为要发送的消息。可额外传入 ``at_sender`` 命名参数用于控制是否 at 事件的触发者,默认为 `False`。其它命名参数作为 OneBot API ``send_msg`` 的参数直接传递。 """ msg = message if isinstance(message, Message) else Message(message) await run_async_funcs(self._before_sending_funcs, event, msg, kwargs) at_sender = kwargs.pop('at_sender', False) and ('user_id' in event) keys = {'message_type', 'user_id', 'group_id', 'discuss_id'} params = {k: v for k, v in event.items() if k in keys} params['message'] = msg params.update(kwargs) if 'message_type' not in params: if 'group_id' in params: params['message_type'] = 'group' elif 'discuss_id' in params: params['message_type'] = 'discuss' elif 'user_id' in params: params['message_type'] = 'private' if at_sender and params['message_type'] != 'private': params['message'] = MessageSegment.at(params['user_id']) + \ MessageSegment.text(' ') + params['message'] return await self.send_msg(**params)
def before_sending(func: Callable) ‑> Callable
-
注册默认 bot 对象发送消息前的钩子函数,用作装饰器。
Expand source code
def before_sending(self, func: Callable) -> Callable: """ 注册发送消息前的钩子函数,用作装饰器,例如: ```py @bot.before_sending async def hook(event: Event, message: Message, kwargs: Dict[str, Any]): message.clear() message.append(MessageSegment.text('hooked!')) ``` 该钩子函数在刚进入 `CQHttp.send` 函数时运行,用户可在钩子函数中修改要发送的 ``message`` 和发送参数 ``kwargs``。 """ self._before_sending_funcs.add(ensure_async(func)) return func
def on(*event_names: str) ‑> Callable
-
注册默认 bot 对象的事件处理函数,用作装饰器。
Expand source code
def on(self, *event_names: str) -> Callable: """ 注册事件处理函数,用作装饰器,例如: ```py @bot.on('notice.group_decrease', 'notice.group_increase') async def handler(event): pass ``` 参数为要注册的事件名,格式是点号分割的各级事件类型,见 `Event.name`。 可以多次调用,一个函数可作为多个事件的处理函数,一个事件也可以有多个处理函数。 可以按不同粒度注册处理函数,例如: ```py @bot.on('message') async def handle_message(event): pass @bot.on('message.private') async def handle_private_message(event): pass @bot.on('message.private.friend') async def handle_friend_private_message(event): pass ``` 当收到好友私聊消息时,会首先运行 ``handle_friend_private_message``,然后运行 ``handle_private_message``,最后运行 ``handle_message``。 """ def deco(func: Callable) -> Callable: for name in event_names: self.subscribe(name, func) return func return deco
def on_message(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的消息事件处理函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def on_notice(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的通知事件处理函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def on_request(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的请求事件处理函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def on_meta_event(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的元事件处理函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def before(*event_names: str) ‑> Callable
-
注册默认 bot 对象事件处理前的钩子函数,用作装饰器。
Expand source code
def before(self, *event_names: str) -> Callable: """ 注册事件处理前的钩子函数,用作装饰器,例如: ```py @bot.before('notice.group_decrease', 'notice.group_increase') async def hook(event): pass ``` 参数为要注册的事件名,格式是点号分割的各级事件类型,见 `Event.name`。 钩子函数的注册方法和事件处理函数几乎完全一致,只需将 ``on`` 改为 ``before``。 各级 before 钩子函数全部运行完成后,才会运行事件处理函数。 """ def deco(func: Callable) -> Callable: for name in event_names: self.hook_before(name, func) return func return deco
def before_message(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象消息事件处理前的钩子函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def before_notice(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的通知事件处理前的钩子函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def before_request(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的请求事件处理前的钩子函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco
def before_meta_event(arg: Union[str, Callable, NoneType] = None, *sub_event_names: str) ‑> Callable
-
注册默认 bot 对象的元事件处理前的钩子函数,用作装饰器。
Expand source code
def deco_deco(self, arg: Optional[Union[str, Callable]] = None, *sub_event_names: str) -> Callable: def deco(func: Callable) -> Callable: if isinstance(arg, str): e = [type_ + '.' + e for e in [arg] + list(sub_event_names)] # self.on(*e)(func) deco_method(self, *e)(func) else: # self.on(type_)(func) deco_method(self, type_)(func) return func if callable(arg): return deco(arg) return deco