mirror of
https://github.com/nonebot/nonebot2.git
synced 2025-10-07 19:26:44 +00:00
Compare commits
16 Commits
v2.0.0a8
...
v2.0.0a8.p
Author | SHA1 | Date | |
---|---|---|---|
|
3ea2c27e17 | ||
|
17960b2868 | ||
|
22416bf512 | ||
|
a4cb7f13be | ||
|
822709ceeb | ||
|
4dffc879d9 | ||
|
f036057b2b | ||
|
38ab392b91 | ||
|
a45d88ef29 | ||
|
996c57df62 | ||
|
8f69b2449d | ||
|
db7e10cb4d | ||
|
b446fcc929 | ||
|
5cc5375cb5 | ||
|
ebf3766cfb | ||
|
fbaf19e454 |
@@ -69,7 +69,7 @@ async def handle2(bot: Bot, event: Event, state: T_State):
|
|||||||
```python
|
```python
|
||||||
@matcher.got("key1")
|
@matcher.got("key1")
|
||||||
@matcher.got("key2")
|
@matcher.got("key2")
|
||||||
async def handle(bot: Bot, event: Event, state: State):
|
async def handle(bot: Bot, event: Event, state: T_State):
|
||||||
pass
|
pass
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -169,12 +169,12 @@ matcher = on_command("test")
|
|||||||
|
|
||||||
# 修改默认参数处理
|
# 修改默认参数处理
|
||||||
@matcher.args_parser
|
@matcher.args_parser
|
||||||
async def parse(bot: Bot, event: Event, state: State):
|
async def parse(bot: Bot, event: Event, state: T_State):
|
||||||
print(state["_current_key"], ":", str(event.get_message()))
|
print(state["_current_key"], ":", str(event.get_message()))
|
||||||
state[state["_current_key"]] = str(event.get_message())
|
state[state["_current_key"]] = str(event.get_message())
|
||||||
|
|
||||||
@matcher.handle()
|
@matcher.handle()
|
||||||
async def first_receive(bot: Bot, event: Event, state: State):
|
async def first_receive(bot: Bot, event: Event, state: T_State):
|
||||||
# 获取用户原始命令,如:/test
|
# 获取用户原始命令,如:/test
|
||||||
print(state["_prefix"]["raw_command"])
|
print(state["_prefix"]["raw_command"])
|
||||||
# 处理用户输入参数,如:/test arg1 arg2
|
# 处理用户输入参数,如:/test arg1 arg2
|
||||||
@@ -186,7 +186,7 @@ async def first_receive(bot: Bot, event: Event, state: State):
|
|||||||
|
|
||||||
|
|
||||||
@matcher.got("arg1", prompt="参数?")
|
@matcher.got("arg1", prompt="参数?")
|
||||||
async def arg_handle(bot: Bot, event: Event, state: State):
|
async def arg_handle(bot: Bot, event: Event, state: T_State):
|
||||||
# 在这里对参数进行验证
|
# 在这里对参数进行验证
|
||||||
if state["arg1"] not in ["allow", "list"]:
|
if state["arg1"] not in ["allow", "list"]:
|
||||||
await matcher.reject("参数不正确!请重新输入")
|
await matcher.reject("参数不正确!请重新输入")
|
@@ -21,7 +21,7 @@ async def handle_first_receive(bot: Bot, event: Event, state: T_State):
|
|||||||
|
|
||||||
|
|
||||||
@weather.got("city", prompt="你想查询哪个城市的天气呢?")
|
@weather.got("city", prompt="你想查询哪个城市的天气呢?")
|
||||||
async def handle_city(bot: Bot, event: Event, state: State):
|
async def handle_city(bot: Bot, event: Event, state: T_State):
|
||||||
city = state["city"]
|
city = state["city"]
|
||||||
if city not in ["上海", "北京"]:
|
if city not in ["上海", "北京"]:
|
||||||
await weather.reject("你想查询的城市暂不支持,请重新输入!")
|
await weather.reject("你想查询的城市暂不支持,请重新输入!")
|
||||||
@@ -115,16 +115,17 @@ rule 的出现使得 nonebot 对事件的响应可以非常自由,nonebot 内
|
|||||||
|
|
||||||
```python
|
```python
|
||||||
from nonebot.rule import Rule
|
from nonebot.rule import Rule
|
||||||
|
from nonebot.typing import T_State
|
||||||
|
|
||||||
async def async_checker(bot: Bot, event: Event, state: State) -> bool:
|
async def async_checker(bot: Bot, event: Event, state: T_State) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def sync_checker(bot: Bot, event: Event, state: State) -> bool:
|
def sync_checker(bot: Bot, event: Event, state: T_State) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def check(arg1, args2):
|
def check(arg1, args2):
|
||||||
|
|
||||||
async def _checker(bot: Bot, event: Event, state: State) -> bool:
|
async def _checker(bot: Bot, event: Event, state: T_State) -> bool:
|
||||||
return bool(arg1 + arg2)
|
return bool(arg1 + arg2)
|
||||||
|
|
||||||
return Rule(_check)
|
return Rule(_check)
|
@@ -1,4 +1,4 @@
|
|||||||
[
|
[
|
||||||
"2.0.0a8",
|
"2.0.0a8.post2",
|
||||||
"2.0.0a7"
|
"2.0.0a7"
|
||||||
]
|
]
|
@@ -69,7 +69,7 @@ async def handle2(bot: Bot, event: Event, state: T_State):
|
|||||||
```python
|
```python
|
||||||
@matcher.got("key1")
|
@matcher.got("key1")
|
||||||
@matcher.got("key2")
|
@matcher.got("key2")
|
||||||
async def handle(bot: Bot, event: Event, state: State):
|
async def handle(bot: Bot, event: Event, state: T_State):
|
||||||
pass
|
pass
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -169,12 +169,12 @@ matcher = on_command("test")
|
|||||||
|
|
||||||
# 修改默认参数处理
|
# 修改默认参数处理
|
||||||
@matcher.args_parser
|
@matcher.args_parser
|
||||||
async def parse(bot: Bot, event: Event, state: State):
|
async def parse(bot: Bot, event: Event, state: T_State):
|
||||||
print(state["_current_key"], ":", str(event.get_message()))
|
print(state["_current_key"], ":", str(event.get_message()))
|
||||||
state[state["_current_key"]] = str(event.get_message())
|
state[state["_current_key"]] = str(event.get_message())
|
||||||
|
|
||||||
@matcher.handle()
|
@matcher.handle()
|
||||||
async def first_receive(bot: Bot, event: Event, state: State):
|
async def first_receive(bot: Bot, event: Event, state: T_State):
|
||||||
# 获取用户原始命令,如:/test
|
# 获取用户原始命令,如:/test
|
||||||
print(state["_prefix"]["raw_command"])
|
print(state["_prefix"]["raw_command"])
|
||||||
# 处理用户输入参数,如:/test arg1 arg2
|
# 处理用户输入参数,如:/test arg1 arg2
|
||||||
@@ -186,7 +186,7 @@ async def first_receive(bot: Bot, event: Event, state: State):
|
|||||||
|
|
||||||
|
|
||||||
@matcher.got("arg1", prompt="参数?")
|
@matcher.got("arg1", prompt="参数?")
|
||||||
async def arg_handle(bot: Bot, event: Event, state: State):
|
async def arg_handle(bot: Bot, event: Event, state: T_State):
|
||||||
# 在这里对参数进行验证
|
# 在这里对参数进行验证
|
||||||
if state["arg1"] not in ["allow", "list"]:
|
if state["arg1"] not in ["allow", "list"]:
|
||||||
await matcher.reject("参数不正确!请重新输入")
|
await matcher.reject("参数不正确!请重新输入")
|
||||||
|
@@ -21,7 +21,7 @@ async def handle_first_receive(bot: Bot, event: Event, state: T_State):
|
|||||||
|
|
||||||
|
|
||||||
@weather.got("city", prompt="你想查询哪个城市的天气呢?")
|
@weather.got("city", prompt="你想查询哪个城市的天气呢?")
|
||||||
async def handle_city(bot: Bot, event: Event, state: State):
|
async def handle_city(bot: Bot, event: Event, state: T_State):
|
||||||
city = state["city"]
|
city = state["city"]
|
||||||
if city not in ["上海", "北京"]:
|
if city not in ["上海", "北京"]:
|
||||||
await weather.reject("你想查询的城市暂不支持,请重新输入!")
|
await weather.reject("你想查询的城市暂不支持,请重新输入!")
|
||||||
@@ -115,16 +115,17 @@ rule 的出现使得 nonebot 对事件的响应可以非常自由,nonebot 内
|
|||||||
|
|
||||||
```python
|
```python
|
||||||
from nonebot.rule import Rule
|
from nonebot.rule import Rule
|
||||||
|
from nonebot.typing import T_State
|
||||||
|
|
||||||
async def async_checker(bot: Bot, event: Event, state: State) -> bool:
|
async def async_checker(bot: Bot, event: Event, state: T_State) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def sync_checker(bot: Bot, event: Event, state: State) -> bool:
|
def sync_checker(bot: Bot, event: Event, state: T_State) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def check(arg1, args2):
|
def check(arg1, args2):
|
||||||
|
|
||||||
async def _checker(bot: Bot, event: Event, state: State) -> bool:
|
async def _checker(bot: Bot, event: Event, state: T_State) -> bool:
|
||||||
return bool(arg1 + arg2)
|
return bool(arg1 + arg2)
|
||||||
|
|
||||||
return Rule(_check)
|
return Rule(_check)
|
||||||
|
@@ -421,19 +421,19 @@ class Bot(BaseBot):
|
|||||||
message = escape(message) if isinstance(message, str) else message
|
message = escape(message) if isinstance(message, str) else message
|
||||||
msg = message if isinstance(message, Message) else Message(message)
|
msg = message if isinstance(message, Message) else Message(message)
|
||||||
|
|
||||||
at_sender = at_sender and hasattr(event, "user_id")
|
at_sender = at_sender and getattr(event, "user_id", None)
|
||||||
|
|
||||||
params = {}
|
params = {}
|
||||||
if hasattr(event, "user_id"):
|
if getattr(event, "user_id", None):
|
||||||
params["user_id"] = getattr(event, "user_id")
|
params["user_id"] = getattr(event, "user_id")
|
||||||
if hasattr(event, "group_id"):
|
if getattr(event, "group_id", None):
|
||||||
params["group_id"] = getattr(event, "group_id")
|
params["group_id"] = getattr(event, "group_id")
|
||||||
params.update(kwargs)
|
params.update(kwargs)
|
||||||
|
|
||||||
if "message_type" not in params:
|
if "message_type" not in params:
|
||||||
if "group_id" in params:
|
if params.get("group_id", None):
|
||||||
params["message_type"] = "group"
|
params["message_type"] = "group"
|
||||||
elif "user_id" in params:
|
elif params.get("user_id", None):
|
||||||
params["message_type"] = "private"
|
params["message_type"] = "private"
|
||||||
else:
|
else:
|
||||||
raise ValueError("Cannot guess message type to reply!")
|
raise ValueError("Cannot guess message type to reply!")
|
||||||
|
@@ -184,7 +184,7 @@ class GroupMessageEvent(MessageEvent):
|
|||||||
__event__ = "message.group"
|
__event__ = "message.group"
|
||||||
message_type: Literal["group"]
|
message_type: Literal["group"]
|
||||||
group_id: int
|
group_id: int
|
||||||
anonymous: Anonymous
|
anonymous: Optional[Anonymous] = None
|
||||||
|
|
||||||
@overrides(Event)
|
@overrides(Event)
|
||||||
def get_event_description(self) -> str:
|
def get_event_description(self) -> str:
|
||||||
@@ -319,6 +319,7 @@ class PokeNotifyEvent(NotifyEvent):
|
|||||||
__event__ = "notice.notify.poke"
|
__event__ = "notice.notify.poke"
|
||||||
sub_type: Literal["poke"]
|
sub_type: Literal["poke"]
|
||||||
target_id: int
|
target_id: int
|
||||||
|
group_id: Optional[int] = None
|
||||||
|
|
||||||
@overrides(Event)
|
@overrides(Event)
|
||||||
def is_tome(self) -> bool:
|
def is_tome(self) -> bool:
|
||||||
|
@@ -28,7 +28,8 @@ class ActionFailed(BaseActionFailed, CQHTTPAdapterException):
|
|||||||
self.info = kwargs
|
self.info = kwargs
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"<ActionFailed " + ", ".join(f"{k=}" for k in self.info) + ">"
|
return f"<ActionFailed " + ", ".join(
|
||||||
|
f"{k}={v}" for k, v in self.info.items()) + ">"
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.__repr__()
|
return self.__repr__()
|
||||||
|
@@ -117,8 +117,7 @@ async def _check_matcher(priority: int, bot: "Bot", event: "Event",
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
async def _check_expire(Matcher: Type[Matcher]) -> Optional[Type[Matcher]]:
|
async def _check_expire(Matcher: Type[Matcher]) -> Optional[Type[Matcher]]:
|
||||||
if Matcher.temp or (Matcher.expire_time and
|
if Matcher.expire_time and datetime.now() > Matcher.expire_time:
|
||||||
datetime.now() > Matcher.expire_time):
|
|
||||||
return Matcher
|
return Matcher
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -128,14 +127,19 @@ async def _check_matcher(priority: int, bot: "Bot", event: "Event",
|
|||||||
checking_expire_tasks = [
|
checking_expire_tasks = [
|
||||||
_check_expire(Matcher) for Matcher in current_matchers
|
_check_expire(Matcher) for Matcher in current_matchers
|
||||||
]
|
]
|
||||||
results = await asyncio.gather(*checking_tasks, return_exceptions=True)
|
results = await asyncio.gather(*checking_tasks)
|
||||||
expired = await asyncio.gather(*checking_expire_tasks)
|
expired = await asyncio.gather(*checking_expire_tasks)
|
||||||
for expired_matcher in filter(lambda x: x, expired):
|
for expired_matcher in filter(lambda x: x, expired):
|
||||||
try:
|
try:
|
||||||
matchers[priority].remove(expired_matcher) # type: ignore
|
matchers[priority].remove(expired_matcher) # type: ignore
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
return filter(lambda x: x, results)
|
for temp_matcher in filter(lambda x: x and x.temp, results):
|
||||||
|
try:
|
||||||
|
matchers[priority].remove(temp_matcher) # type: ignore
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return filter(lambda x: x, results) # type: ignore
|
||||||
|
|
||||||
|
|
||||||
async def _run_matcher(Matcher: Type[Matcher], bot: "Bot", event: "Event",
|
async def _run_matcher(Matcher: Type[Matcher], bot: "Bot", event: "Event",
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
[tool.poetry]
|
[tool.poetry]
|
||||||
name = "nonebot2"
|
name = "nonebot2"
|
||||||
version = "2.0.0-alpha.8"
|
version = "2.0.0-alpha.8.post2"
|
||||||
description = "An asynchronous python bot framework."
|
description = "An asynchronous python bot framework."
|
||||||
authors = ["yanyongyu <yanyongyu_1@126.com>"]
|
authors = ["yanyongyu <yanyongyu_1@126.com>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
Reference in New Issue
Block a user