Skip to content

Commit eb7285b

Browse files
committed
⬆️ upgrade adapter-console
resolve #111
1 parent aef79fc commit eb7285b

File tree

4 files changed

+109
-64
lines changed

4 files changed

+109
-64
lines changed

example/bot.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import nonebot
2+
3+
# from nonebot.adapters.console import Adapter as ConsoleAdapter
24
from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter
35

46
# from nonebot.adapters.satori import Adapter as SatoriAdapter

pdm.lock

Lines changed: 55 additions & 56 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ dev = [
4646
"uvicorn[standard]>=0.28.1",
4747
"pydantic>=2.7.0",
4848
"nonebot2[httpx,websockets]>=2.3.0",
49-
"nonebot-adapter-console>=0.5.0",
49+
"nonebot-adapter-console<0.10.0,>=0.9.0",
5050
"nonebot-adapter-ding>=2.0.0a16",
5151
"nonebot-adapter-discord>=0.1.8",
5252
"nonebot-adapter-dodo>=0.2.1",
@@ -94,7 +94,7 @@ test = [
9494
"pyyaml>=6.0.1",
9595
"nonebot-adapter-telegram>=0.1.0b18",
9696
"nonebot-adapter-kaiheila>=0.3.4",
97-
"nonebot-adapter-console>=0.6.0",
97+
"nonebot-adapter-console<0.10.0,>=0.9.0",
9898
]
9999
[tool.pdm.build]
100100
includes = ["src/nonebot_plugin_alconna"]

src/nonebot_plugin_alconna/uniseg/adapters/console/exporter.py

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
from typing import TYPE_CHECKING, Union
1+
from typing import TYPE_CHECKING, Any, Union, Sequence
22

3+
from nonechat.model import DIRECT
34
from nonebot.adapters import Bot, Event
45
from nonebot.adapters.console import Bot as ConsoleBot
5-
from nonebot.adapters.console.event import MessageEvent
66
from nonebot.adapters.console.message import Message, MessageSegment
7+
from nonebot.adapters.console.event import MessageEvent, MessageResponse
78

9+
from nonebot_plugin_alconna import Segment
810
from nonebot_plugin_alconna.uniseg.segment import Text, Emoji
911
from nonebot_plugin_alconna.uniseg.constraint import SupportScope
1012
from nonebot_plugin_alconna.uniseg.exporter import Target, SupportAdapter, MessageExporter, export
@@ -19,17 +21,26 @@ def get_adapter(cls) -> SupportAdapter:
1921
return SupportAdapter.console
2022

2123
def get_target(self, event: Event, bot: Union[Bot, None] = None) -> Target:
24+
assert isinstance(event, MessageEvent)
25+
if event.channel.id == DIRECT.id or event.channel.id.startswith("private:"):
26+
# If the event is a direct message, we can use the user ID as the target ID
27+
return Target(
28+
event.user.id,
29+
private=True,
30+
adapter=self.get_adapter(),
31+
self_id=bot.self_id if bot else None,
32+
scope=SupportScope.console,
33+
)
2234
return Target(
23-
event.get_user_id(),
24-
private=True,
35+
event.channel.id,
2536
adapter=self.get_adapter(),
2637
self_id=bot.self_id if bot else None,
2738
scope=SupportScope.console,
2839
)
2940

3041
def get_message_id(self, event: Event) -> str:
3142
assert isinstance(event, MessageEvent)
32-
return str(event.self_id)
43+
return event.message_id
3344

3445
@export
3546
async def text(self, seg: Text, bot: Union[Bot, None]) -> "MessageSegment":
@@ -54,4 +65,37 @@ async def send_to(self, target: Union[Target, Event], bot: Bot, message: Message
5465
assert isinstance(message, Message)
5566
if isinstance(target, Event):
5667
return await bot.send(target, message, **kwargs) # type: ignore
57-
return await bot.send_msg(user_id=target.id, message=message, **kwargs)
68+
if target.private:
69+
return await bot.send_private_message(user_id=target.id, message=message)
70+
return await bot.send_message(channel_id=target.id, message=message)
71+
72+
async def recall(self, mid: Any, bot: Bot, context: Union[Target, Event]):
73+
assert isinstance(bot, ConsoleBot)
74+
if isinstance(mid, str):
75+
if isinstance(context, Event):
76+
assert isinstance(context, MessageEvent)
77+
await bot.recall_message(message_id=mid, channel_id=context.channel.id)
78+
else:
79+
if context.private:
80+
channel_id = (await bot.create_dm(context.id)).id
81+
else:
82+
channel_id = context.id
83+
await bot.recall_message(message_id=mid, channel_id=channel_id)
84+
elif isinstance(mid, MessageResponse):
85+
await bot.recall_message(mid.message_id, channel_id=mid.channel_id)
86+
87+
async def edit(self, new: Sequence[Segment], mid: Any, bot: Bot, context: Union[Target, Event]):
88+
assert isinstance(bot, ConsoleBot)
89+
new_msg = await self.export(new, bot, True)
90+
if isinstance(mid, str):
91+
if isinstance(context, Event):
92+
assert isinstance(context, MessageEvent)
93+
await bot.edit_message(message_id=mid, channel_id=context.channel.id, content=new_msg)
94+
else:
95+
if context.private:
96+
channel_id = (await bot.create_dm(context.id)).id
97+
else:
98+
channel_id = context.id
99+
await bot.edit_message(message_id=mid, channel_id=channel_id, content=new_msg)
100+
elif isinstance(mid, MessageResponse):
101+
await bot.edit_message(mid.message_id, mid.channel_id, new_msg)

0 commit comments

Comments
 (0)