Skip to content

Commit 2815051

Browse files
committed
✨ gewechat support send reply
1 parent 530602e commit 2815051

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ async def _():
125125
| 语音 Voice |||| ⬆️ | 🚫 | ⬆️ | 🚫 | 🚫 | ⬆️ || ⬇️ | 🚫 | ⬆️ || ⬆️ | 🚫 || 🚫 ||| 🚫 ||
126126
| 视频 Video ||||| 🚫 || 🚫 | 🚫 |||| 🚫 | ⬆️ ||||| 🚫 ||| 🚫 ||
127127
| 文件 File | ⬇️,⬆️(🚧) |||| 🚫 || 🚫 | 🚫 |||| 🚫 | ⬆️ ||| ⬇️ | ⬇️ ||| 🚫 | 🚫 ||
128-
| 回复 Reply ||||| 🚫 || 🚫 | 🚫 |||| 🚫 |||||||| 🚫 | ⬆️ | ⬇️ |
128+
| 回复 Reply ||||| 🚫 || 🚫 | 🚫 |||| 🚫 |||||||| 🚫 | ⬆️ | |
129129
| 引用转发 Reference || 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | 🚫 || 🚫 | 🚫 | 🚫 ||| 🚫 || 🚫 | 🚫 | 🚫 | 🚫 ||
130130
| 超级消息 Hyper || 🚫 | 🚫 | ⬇️ | 🚫 || 🚫 | 🚫 |||| 🚫 | 🚫 || 🚫 | 🚫 || 🚫 | 🚫 || 🚫 ||
131131
| 按钮 Button | 🚫 | 🚫 | ⬆️ | 🚫 | 🚫 || 🚫 | 🚫 | 🚫 | 🚫 | 🚫 | ⬆️ || 🚫 || 🚫 || 🚫 | 🚫 | 🚫 | 🚫 | 🚫 |

pdm.lock

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

src/nonebot_plugin_alconna/uniseg/adapters/gewechat/builder.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from nonebot.adapters import Bot, Event
2-
from nonebot.adapters.gewechat.message import MessageSegment # type: ignore
2+
from nonebot.adapters.gewechat.message import Message, MessageSegment
33

44
from nonebot_plugin_alconna.uniseg.constraint import SupportAdapter
55
from nonebot_plugin_alconna.uniseg.builder import MessageBuilder, build
@@ -17,7 +17,7 @@ def text(self, seg: "MessageSegment"):
1717

1818
@build("at")
1919
def at(self, seg: "MessageSegment"):
20-
return At("user", seg.data["wxid"])
20+
return At("user", seg.data["wxid"], seg.data.get("nickname"))
2121

2222
@build("at_all")
2323
def at_all(self, seg: "MessageSegment"):
@@ -38,6 +38,11 @@ def xml(self, seg: "MessageSegment"):
3838
async def extract_reply(self, event: Event, bot: Bot):
3939
from nonebot.adapters.gewechat.event import QuoteMessageEvent
4040

41-
if isinstance(event, QuoteMessageEvent) and event.refer_msg:
42-
return Reply(event.refer_id, event.refer_msg, origin=event)
41+
if isinstance(event, QuoteMessageEvent):
42+
reply_id = event.reply.id if event.reply else event.original_message["quote", 0].data["svrId"]
43+
return Reply(
44+
reply_id,
45+
event.reply.msg if event.reply else Message(event.original_message[0].data["content"]),
46+
origin=event,
47+
)
4348
return None

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
)
2020

2121
from nonebot_plugin_alconna.uniseg.constraint import SupportScope
22-
from nonebot_plugin_alconna.uniseg.segment import At, File, Text, AtAll, Audio, Emoji, Hyper, Image, Video, Voice
2322
from nonebot_plugin_alconna.uniseg.exporter import Target, SupportAdapter, MessageExporter, SerializeFailed, export
23+
from nonebot_plugin_alconna.uniseg.segment import At, File, Text, AtAll, Audio, Emoji, Hyper, Image, Reply, Video, Voice
2424

2525

2626
class GeWeChatMessageExporter(MessageExporter["Message"]):
@@ -191,6 +191,15 @@ async def hyper(self, seg: Hyper, bot: Union[Bot, None]) -> "MessageSegment":
191191
raise SerializeFailed(lang.require("nbp-uniseg", "invalid_segment").format(type="hyper", seg=seg))
192192
return MessageSegment.xml(seg.raw)
193193

194+
@export
195+
async def reply(self, seg: Reply, bot: Union[Bot, None]):
196+
if not bot:
197+
return []
198+
assert isinstance(bot, GeWeChatBot)
199+
if not (origin_event := bot.getMessageEventByMsgId(seg.id)):
200+
return []
201+
return MessageSegment.quote(origin_event.FromUserName, origin_event.ToUserName, seg.id)
202+
194203
async def send_to(self, target: Union[Target, Event], bot: Bot, message: "Message", **kwargs):
195204
assert isinstance(bot, GeWeChatBot)
196205

0 commit comments

Comments
 (0)