Skip to content

Commit 37d3ac7

Browse files
authored
Merge pull request #63 from noneplugin/feat/uninfo
feat!: migrate to nonebot-plugin-uninfo
2 parents ff2d58e + 66919f7 commit 37d3ac7

37 files changed

Lines changed: 1294 additions & 1212 deletions

nonebot_plugin_chatrecorder/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from nonebot import require
22
from nonebot.plugin import PluginMetadata
33

4-
require("nonebot_plugin_session_orm")
4+
require("nonebot_plugin_orm")
5+
require("nonebot_plugin_uninfo")
56
require("nonebot_plugin_localstore")
67

78
from . import adapters as adapters

nonebot_plugin_chatrecorder/adapters/console.py

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
1+
import uuid
12
from dataclasses import asdict
23
from datetime import datetime, timezone
3-
from itertools import count
44
from typing import Any, Optional
55

66
from nonebot.adapters import Bot as BaseBot
77
from nonebot.message import event_postprocessor
88
from nonebot_plugin_orm import get_session
9-
from nonebot_plugin_session import Session, SessionLevel, extract_session
10-
from nonebot_plugin_session_orm import SessionModel, get_session_persist_id
9+
from nonebot_plugin_uninfo import (
10+
Scene,
11+
SceneType,
12+
Session,
13+
SupportAdapter,
14+
SupportScope,
15+
Uninfo,
16+
User,
17+
)
18+
from nonebot_plugin_uninfo.orm import get_session_persist_id
1119
from typing_extensions import override
1220

1321
from ..config import plugin_config
14-
from ..consts import SupportedAdapter, SupportedPlatform
1522
from ..message import (
1623
MessageDeserializer,
1724
MessageSerializer,
@@ -25,36 +32,21 @@
2532
try:
2633
from nonebot.adapters.console import Bot, Message, MessageEvent, MessageSegment
2734
from nonechat import ConsoleMessage, Emoji, Text
28-
from sqlalchemy import select
29-
30-
adapter = SupportedAdapter.console
3135

32-
id = None
36+
adapter = SupportAdapter.console
3337

34-
async def get_id() -> str:
35-
global id
36-
if not id:
37-
statement = (
38-
select(MessageRecord.message_id)
39-
.where(SessionModel.bot_type == adapter)
40-
.order_by(MessageRecord.message_id.desc())
41-
.join(SessionModel, SessionModel.id == MessageRecord.session_persist_id)
42-
)
43-
async with get_session() as db_session:
44-
message_id = await db_session.scalar(statement)
45-
id = count(int(message_id) + 1) if message_id else count(0)
46-
return str(next(id))
38+
def get_id() -> str:
39+
return uuid.uuid4().hex
4740

4841
@event_postprocessor
49-
async def record_recv_msg(bot: Bot, event: MessageEvent):
50-
session = extract_session(bot, event)
42+
async def record_recv_msg(event: MessageEvent, session: Uninfo):
5143
session_persist_id = await get_session_persist_id(session)
5244

5345
record = MessageRecord(
5446
session_persist_id=session_persist_id,
5547
time=remove_timezone(event.time.astimezone(timezone.utc)),
5648
type=record_type(event),
57-
message_id=await get_id(),
49+
message_id=get_id(),
5850
message=serialize_message(adapter, event.get_message()),
5951
plain_text=event.get_plaintext(),
6052
)
@@ -78,13 +70,11 @@ async def record_send_msg(
7870
return
7971

8072
session = Session(
81-
bot_id=bot.self_id,
82-
bot_type=bot.type,
83-
platform=SupportedPlatform.console,
84-
level=SessionLevel.LEVEL1,
85-
id1=data.get("user_id"),
86-
id2=None,
87-
id3=None,
73+
self_id=bot.self_id,
74+
adapter=adapter,
75+
scope=SupportScope.console,
76+
scene=Scene(id=data["user_id"], type=SceneType.PRIVATE),
77+
user=User(id=bot.self_id),
8878
)
8979
session_persist_id = await get_session_persist_id(session)
9080

@@ -105,7 +95,7 @@ async def record_send_msg(
10595
session_persist_id=session_persist_id,
10696
time=remove_timezone(datetime.now(timezone.utc)),
10797
type="message_sent",
108-
message_id=await get_id(),
98+
message_id=get_id(),
10999
message=serialize_message(adapter, message),
110100
plain_text=message.extract_plain_text(),
111101
)

nonebot_plugin_chatrecorder/adapters/discord.py

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,19 @@
33
from nonebot.adapters import Bot as BaseBot
44
from nonebot.message import event_postprocessor
55
from nonebot_plugin_orm import get_session
6-
from nonebot_plugin_session import Session, SessionLevel, extract_session
7-
from nonebot_plugin_session_orm import get_session_persist_id
6+
from nonebot_plugin_uninfo import (
7+
Scene,
8+
SceneType,
9+
Session,
10+
SupportAdapter,
11+
SupportScope,
12+
Uninfo,
13+
User,
14+
)
15+
from nonebot_plugin_uninfo.orm import get_session_persist_id
816
from typing_extensions import override
917

1018
from ..config import plugin_config
11-
from ..consts import SupportedAdapter, SupportedPlatform
1219
from ..message import (
1320
MessageDeserializer,
1421
MessageSerializer,
@@ -23,11 +30,10 @@
2330
from nonebot.adapters.discord import Bot, Message, MessageEvent
2431
from nonebot.adapters.discord.api import UNSET, Channel, ChannelType, MessageGet
2532

26-
adapter = SupportedAdapter.discord
33+
adapter = SupportAdapter.discord
2734

2835
@event_postprocessor
29-
async def record_recv_msg(bot: Bot, event: MessageEvent):
30-
session = extract_session(bot, event)
36+
async def record_recv_msg(event: MessageEvent, session: Uninfo):
3137
session_persist_id = await get_session_persist_id(session)
3238

3339
record = MessageRecord(
@@ -71,30 +77,26 @@ async def record_send_msg(
7177
return
7278

7379
channel = await get_channel(bot, result.channel_id)
74-
75-
level = SessionLevel.LEVEL0
76-
id1 = None
77-
id2 = str(result.channel_id)
78-
id3 = None
80+
parent = None
7981
if channel.type in [ChannelType.DM]:
80-
level = SessionLevel.LEVEL1
81-
id1 = (
82+
scene_type = SceneType.PRIVATE
83+
scene_id = (
8284
str(channel.recipients[0].id)
8385
if channel.recipients != UNSET and channel.recipients
84-
else None
86+
else ""
8587
)
8688
else:
87-
level = SessionLevel.LEVEL3
88-
id3 = str(channel.guild_id) if channel.guild_id != UNSET else None
89+
scene_type = SceneType.CHANNEL_TEXT
90+
scene_id = str(result.channel_id)
91+
if channel.guild_id != UNSET:
92+
parent = Scene(id=str(channel.guild_id), type=SceneType.GUILD)
8993

9094
session = Session(
91-
bot_id=bot.self_id,
92-
bot_type=bot.type,
93-
platform=SupportedPlatform.discord,
94-
level=level,
95-
id1=id1,
96-
id2=id2,
97-
id3=id3,
95+
self_id=bot.self_id,
96+
adapter=adapter,
97+
scope=SupportScope.discord,
98+
scene=Scene(id=scene_id, type=scene_type, parent=parent),
99+
user=User(id=bot.self_id),
98100
)
99101
session_persist_id = await get_session_persist_id(session)
100102

nonebot_plugin_chatrecorder/adapters/dodo.py

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,19 @@
44
from nonebot.adapters import Bot as BaseBot
55
from nonebot.message import event_postprocessor
66
from nonebot_plugin_orm import get_session
7-
from nonebot_plugin_session import Session, SessionLevel, extract_session
8-
from nonebot_plugin_session_orm import get_session_persist_id
7+
from nonebot_plugin_uninfo import (
8+
Scene,
9+
SceneType,
10+
Session,
11+
SupportAdapter,
12+
SupportScope,
13+
Uninfo,
14+
User,
15+
)
16+
from nonebot_plugin_uninfo.orm import get_session_persist_id
917
from typing_extensions import override
1018

1119
from ..config import plugin_config
12-
from ..consts import SupportedAdapter, SupportedPlatform
1320
from ..message import (
1421
MessageDeserializer,
1522
MessageSerializer,
@@ -24,11 +31,10 @@
2431
from nonebot.adapters.dodo import Bot, Message, MessageEvent
2532
from nonebot.adapters.dodo.models import MessageReturn
2633

27-
adapter = SupportedAdapter.dodo
34+
adapter = SupportAdapter.dodo
2835

2936
@event_postprocessor
30-
async def record_recv_msg(bot: Bot, event: MessageEvent):
31-
session = extract_session(bot, event)
37+
async def record_recv_msg(event: MessageEvent, session: Uninfo):
3238
session_persist_id = await get_session_persist_id(session)
3339

3440
record = MessageRecord(
@@ -58,29 +64,25 @@ async def record_send_msg(
5864
if e or not result or not isinstance(result, MessageReturn):
5965
return
6066

61-
island_source_id = None
62-
channel_id = None
6367
if api == "set_channel_message_send":
64-
level = SessionLevel.LEVEL3
65-
channel_id = data["channel_id"]
66-
dodo_source_id = data.get("dodo_source_id")
68+
scene_type = SceneType.CHANNEL_TEXT
69+
scene_id = data["channel_id"]
70+
parent = None
6771
elif api == "set_personal_message_send":
68-
level = SessionLevel.LEVEL1
69-
island_source_id = data["island_source_id"]
70-
dodo_source_id = data["dodo_source_id"]
72+
scene_type = SceneType.PRIVATE
73+
scene_id = data["dodo_source_id"]
74+
parent = Scene(id=data["island_source_id"], type=SceneType.GUILD)
7175
else:
7276
return
7377

7478
message = Message.from_message_body(data["message_body"])
7579

7680
session = Session(
77-
bot_id=bot.self_id,
78-
bot_type=bot.type,
79-
platform=SupportedPlatform.dodo,
80-
level=level,
81-
id1=dodo_source_id,
82-
id2=channel_id,
83-
id3=island_source_id,
81+
self_id=bot.self_id,
82+
adapter=adapter,
83+
scope=SupportScope.dodo,
84+
scene=Scene(id=scene_id, type=scene_type, parent=parent),
85+
user=User(id=bot.self_id),
8486
)
8587
session_persist_id = await get_session_persist_id(session)
8688

nonebot_plugin_chatrecorder/adapters/feishu.py

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,19 @@
55
from nonebot.adapters import Bot as BaseBot
66
from nonebot.message import event_postprocessor
77
from nonebot_plugin_orm import get_session
8-
from nonebot_plugin_session import Session, SessionLevel, extract_session
9-
from nonebot_plugin_session_orm import get_session_persist_id
8+
from nonebot_plugin_uninfo import (
9+
Scene,
10+
SceneType,
11+
Session,
12+
SupportAdapter,
13+
SupportScope,
14+
Uninfo,
15+
User,
16+
)
17+
from nonebot_plugin_uninfo.orm import get_session_persist_id
1018
from typing_extensions import override
1119

1220
from ..config import plugin_config
13-
from ..consts import SupportedAdapter, SupportedPlatform
1421
from ..message import (
1522
MessageDeserializer,
1623
MessageSerializer,
@@ -24,11 +31,10 @@
2431
try:
2532
from nonebot.adapters.feishu import Bot, Message, MessageEvent
2633

27-
adapter = SupportedAdapter.feishu
34+
adapter = SupportAdapter.feishu
2835

2936
@event_postprocessor
30-
async def record_recv_msg(bot: Bot, event: MessageEvent):
31-
session = extract_session(bot, event)
37+
async def record_recv_msg(event: MessageEvent, session: Uninfo):
3238
session_persist_id = await get_session_persist_id(session)
3339

3440
record = MessageRecord(
@@ -82,24 +88,17 @@ async def record_send_msg(
8288
resp = await get_chat_info(bot, chat_id)
8389
chat_mode = resp["data"]["chat_mode"]
8490

85-
level = SessionLevel.LEVEL0
86-
id1 = None
87-
id2 = None
8891
if chat_mode == "p2p":
89-
level = SessionLevel.LEVEL1
90-
id1 = resp["data"]["owner_id"]
92+
scene_type = SceneType.PRIVATE
9193
elif chat_mode == "group":
92-
level = SessionLevel.LEVEL2
93-
id2 = chat_id
94+
scene_type = SceneType.GROUP
9495

9596
session = Session(
96-
bot_id=bot.self_id,
97-
bot_type=bot.type,
98-
platform=SupportedPlatform.feishu,
99-
level=level,
100-
id1=id1,
101-
id2=id2,
102-
id3=None,
97+
self_id=bot.self_id,
98+
adapter=adapter,
99+
scope=SupportScope.feishu,
100+
scene=Scene(id=chat_id, type=scene_type),
101+
user=User(id=bot.self_id),
103102
)
104103
session_persist_id = await get_session_persist_id(session)
105104

0 commit comments

Comments
 (0)