Skip to content

Commit c824386

Browse files
committed
✨ 为TargetQQGuildChannel添加可选的guild_id字段
1 parent d186318 commit c824386

File tree

7 files changed

+50
-16
lines changed

7 files changed

+50
-16
lines changed

nonebot_plugin_saa/adapters/onebot_v12.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ def _extract_group_msg_event(event: Event) -> PlatformTarget:
132132
def _extarct_channel_msg_event(event: Event) -> PlatformTarget:
133133
assert isinstance(event, ChannelMessageEvent)
134134
if event.self.platform == "qqguild": # all4one
135-
return TargetQQGuildChannel(channel_id=int(event.channel_id))
135+
return TargetQQGuildChannel(
136+
channel_id=int(event.channel_id), guild_id=event.guild_id
137+
)
136138
return TargetOB12Unknow(
137139
platform=event.self.platform,
138140
detail_type="channel",
@@ -188,7 +190,9 @@ def _extarct_channel_notice_event(event: Event) -> PlatformTarget:
188190
),
189191
)
190192
if event.self.platform == "qqguild": # all4one
191-
return TargetQQGuildChannel(channel_id=int(event.channel_id))
193+
return TargetQQGuildChannel(
194+
channel_id=int(event.channel_id), guild_id=event.guild_id
195+
)
192196
return TargetOB12Unknow(
193197
platform=event.self.platform,
194198
detail_type="channel",
@@ -365,7 +369,10 @@ async def list_targets(bot: BaseBot) -> list[PlatformTarget]:
365369
platform = bot.platform
366370
if platform == "qqguild":
367371
targets.append(
368-
TargetQQGuildChannel(channel_id=int(channel["channel_id"]))
372+
TargetQQGuildChannel(
373+
channel_id=int(channel["channel_id"]),
374+
guild_id=guild["guild_id"],
375+
)
369376
)
370377
else:
371378
targets.append(

nonebot_plugin_saa/adapters/qq.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ def extract_message_event(event: Event) -> PlatformTarget:
9292
)
9393
elif isinstance(event, (MessageCreateEvent, AtMessageCreateEvent)):
9494
assert event.channel_id
95-
return TargetQQGuildChannel(channel_id=int(event.channel_id))
95+
return TargetQQGuildChannel(
96+
channel_id=int(event.channel_id), guild_id=event.guild_id
97+
)
9698
else:
9799
raise ValueError(f"{type(event)} not supported")
98100

@@ -240,6 +242,7 @@ async def list_targets(bot: BaseBot) -> list[PlatformTarget]:
240242
targets.append(
241243
TargetQQGuildChannel(
242244
channel_id=int(channel.id),
245+
guild_id=guild.id,
243246
)
244247
)
245248

nonebot_plugin_saa/auto_select_bot.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,18 @@
1111
from nonebot import logger, get_bots
1212
from nonebot.compat import model_dump
1313

14-
from .registries import BotSpecifier, PlatformTarget, TargetQQGuildDirect
1514
from .utils import (
1615
NoBotFound,
1716
SupportedAdapters,
1817
AdapterNotSupported,
1918
extract_adapter_type,
2019
)
20+
from .registries import (
21+
BotSpecifier,
22+
PlatformTarget,
23+
TargetQQGuildDirect,
24+
TargetQQGuildChannel,
25+
)
2126

2227
BOT_CACHE: dict[Bot, set[PlatformTarget]] = {}
2328
BOT_CACHE_LOCK = asyncio.Lock()
@@ -123,6 +128,21 @@ def get_bot(target: PlatformTarget) -> Bot:
123128
raise NotImplementedError("暂不支持私聊")
124129

125130
bots = []
131+
132+
if isinstance(target, TargetQQGuildChannel) and not target.guild_id:
133+
logger.warning(f"{target} guild_id is empty, maybe cause mismatch")
134+
for bot, targets in BOT_CACHE.items():
135+
if any(
136+
qct.channel_id == target.channel_id
137+
for qct in targets
138+
if isinstance(qct, TargetQQGuildChannel)
139+
):
140+
bots.append(bot)
141+
if not bots:
142+
_info_current()
143+
raise NoBotFound()
144+
return random.choice(bots)
145+
126146
for bot, targets in BOT_CACHE.items():
127147
if target in targets:
128148
bots.append(bot)

nonebot_plugin_saa/registries/platform_send_target.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,14 +110,14 @@ class TargetQQPrivateOpenId(PlatformTarget, BotSpecifier):
110110

111111
class TargetQQGuildChannel(PlatformTarget):
112112
"""QQ频道子频道
113-
114113
参数
115114
channel_id: 子频道号
116115
"""
117116

118117
platform_type: Literal[SupportedPlatform.qq_guild_channel] = (
119118
SupportedPlatform.qq_guild_channel
120119
)
120+
guild_id: Optional[str] = None # 为了兼容 Kritor
121121
channel_id: int
122122

123123

tests/test_auto_select_qq_bot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ async def test_enable(app: App, mocker: MockerFixture):
8888
)
8989
await asyncio.sleep(0.1)
9090

91-
target = TargetQQGuildChannel(channel_id=2233)
91+
target = TargetQQGuildChannel(channel_id=2233, guild_id="1")
9292
assert bot is get_bot(target)
9393

9494
target = TargetQQGroupOpenId(bot_id="3344", group_openid="GROUP")

tests/test_onebot_v12.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ def test_extract_target(app: App):
573573
)
574574

575575
assert extract_target(qqguild_channel_message_event) == TargetQQGuildChannel(
576-
channel_id=6677
576+
channel_id=6677, guild_id="5566"
577577
)
578578

579579
friend_decrease_event = FriendDecreaseEvent(
@@ -747,7 +747,9 @@ def test_extract_target(app: App):
747747
channel_id="7788",
748748
operator_id="8899",
749749
)
750-
assert extract_target(channel_create_event) == TargetQQGuildChannel(channel_id=7788)
750+
assert extract_target(channel_create_event) == TargetQQGuildChannel(
751+
channel_id=7788, guild_id="6677"
752+
)
751753

752754
channel_create_event = ChannelCreateEvent(
753755
id="1122",
@@ -775,7 +777,9 @@ def test_extract_target(app: App):
775777
channel_id="7788",
776778
operator_id="8899",
777779
)
778-
assert extract_target(channel_delete_event) == TargetQQGuildChannel(channel_id=7788)
780+
assert extract_target(channel_delete_event) == TargetQQGuildChannel(
781+
channel_id=7788, guild_id="6677"
782+
)
779783

780784
channel_delete_event = ChannelDeleteEvent(
781785
id="1122",
@@ -806,7 +810,7 @@ def test_extract_target(app: App):
806810
operator_id="8899",
807811
)
808812
assert extract_target(channel_message_delete_event) == TargetQQGuildChannel(
809-
channel_id=7788
813+
channel_id=7788, guild_id="5566"
810814
)
811815

812816
channel_message_delete_event = ChannelMessageDeleteEvent(
@@ -839,7 +843,7 @@ def test_extract_target(app: App):
839843
operator_id="8899",
840844
)
841845
assert extract_target(channel_member_decrease_event) == TargetQQGuildChannel(
842-
channel_id=7788
846+
channel_id=7788, guild_id="5566"
843847
)
844848

845849
channel_member_decrease_event = ChannelMemberDecreaseEvent(
@@ -871,7 +875,7 @@ def test_extract_target(app: App):
871875
operator_id="8899",
872876
)
873877
assert extract_target(channel_member_increase_event) == TargetQQGuildChannel(
874-
channel_id=7788
878+
channel_id=7788, guild_id="5566"
875879
)
876880

877881
channel_member_increase_event = ChannelMemberIncreaseEvent(

tests/test_qq.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,10 +469,10 @@ async def test_extract_target(app: App):
469469
)
470470

471471
assert extract_target(guild_message_event) == TargetQQGuildChannel(
472-
channel_id=6677
472+
channel_id=6677, guild_id="5566"
473473
)
474474
assert extract_target(guild_message_event, bot) == TargetQQGuildChannel(
475-
channel_id=6677
475+
channel_id=6677, guild_id="5566"
476476
)
477477

478478
direct_message_event = DirectMessageCreateEvent(
@@ -537,7 +537,7 @@ async def test_target_dependency_injection(app: App):
537537
@matcher.handle()
538538
async def _(event: MessageCreateEvent, target: SaaTarget):
539539
assert event
540-
assert target == TargetQQGuildChannel(channel_id=2233)
540+
assert target == TargetQQGuildChannel(channel_id=2233, guild_id="1122")
541541

542542
@matcher.handle()
543543
async def _(event: DirectMessageCreateEvent, target: SaaTarget):

0 commit comments

Comments
 (0)