satori-python-adapter-onebot11 0.3.0__tar.gz → 0.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/.mina/adapter_onebot11.toml +1 -1
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/PKG-INFO +2 -2
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/README.md +1 -1
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/pyproject.toml +1 -1
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/api.py +12 -12
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/events/notice.py +19 -10
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/forward.py +8 -1
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/reverse.py +17 -5
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/LICENSE +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/__init__.py +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/events/__init__.py +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/events/base.py +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/events/message.py +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/events/request.py +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/message.py +0 -0
- {satori_python_adapter_onebot11-0.3.0 → satori_python_adapter_onebot11-0.3.2}/src/satori/adapters/onebot11/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: satori-python-adapter-onebot11
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Satori Protocol SDK for python, adapter for OneBot 11
|
|
5
5
|
Home-page: https://github.com/RF-Tar-Railt/satori-python
|
|
6
6
|
Author-Email: RF-Tar-Railt <rf_tar_railt@qq.com>
|
|
@@ -76,7 +76,7 @@ pip install satori-python-server
|
|
|
76
76
|
| OneBot V11 | `pip install satori-python-adapter-onebot11` | satori.adapters.onebot11.forward, satori.adapters.onebot11.reverse |
|
|
77
77
|
| Console | `pip install satori-python-adapter-console` | satori.adapters.console |
|
|
78
78
|
| Milky | `pip install satori-python-adapter-milky` | satori.adapters.milky.main, satori.adapters.milky.webhook |
|
|
79
|
-
| QQ | `pip install satori-python-adapter-qq` | satori.adapters.
|
|
79
|
+
| QQ | `pip install satori-python-adapter-qq` | satori.adapters.qq.main, satori.adapters.qq.websocket |
|
|
80
80
|
|
|
81
81
|
### 社区适配器
|
|
82
82
|
|
|
@@ -54,7 +54,7 @@ pip install satori-python-server
|
|
|
54
54
|
| OneBot V11 | `pip install satori-python-adapter-onebot11` | satori.adapters.onebot11.forward, satori.adapters.onebot11.reverse |
|
|
55
55
|
| Console | `pip install satori-python-adapter-console` | satori.adapters.console |
|
|
56
56
|
| Milky | `pip install satori-python-adapter-milky` | satori.adapters.milky.main, satori.adapters.milky.webhook |
|
|
57
|
-
| QQ | `pip install satori-python-adapter-qq` | satori.adapters.
|
|
57
|
+
| QQ | `pip install satori-python-adapter-qq` | satori.adapters.qq.main, satori.adapters.qq.websocket |
|
|
58
58
|
|
|
59
59
|
### 社区适配器
|
|
60
60
|
|
|
@@ -223,18 +223,18 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
|
|
|
223
223
|
@adapter.route(Api.CHANNEL_LIST)
|
|
224
224
|
async def channel_list(request: Request[ChannelListParam]):
|
|
225
225
|
net = net_getter(request.self_id)
|
|
226
|
-
result
|
|
227
|
-
|
|
228
|
-
[
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
)
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
)
|
|
226
|
+
result = await net.call_api("get_group_info", {"group_id": int(request.params["guild_id"])})
|
|
227
|
+
if not result:
|
|
228
|
+
raise RuntimeError(f"Failed to get group {request.params['guild_id']}")
|
|
229
|
+
channels = [
|
|
230
|
+
Channel(
|
|
231
|
+
str(result["group_id"]),
|
|
232
|
+
ChannelType.TEXT,
|
|
233
|
+
result["group_name"],
|
|
234
|
+
GROUP_AVATAR_URL.format(group=result["group_id"]),
|
|
235
|
+
)
|
|
236
|
+
]
|
|
237
|
+
return PageResult(channels)
|
|
238
238
|
|
|
239
239
|
@adapter.route(Api.GUILD_LIST)
|
|
240
240
|
async def guild_list(request: Request[GuildListParam]):
|
|
@@ -89,16 +89,6 @@
|
|
|
89
89
|
# scene=group,
|
|
90
90
|
# )
|
|
91
91
|
#
|
|
92
|
-
# @m.entity(OneBot11Capability.event_callback, raw_event="notice.friend_add")
|
|
93
|
-
# async def friend_add(self, raw_event: dict):
|
|
94
|
-
# self_id = raw_event["self_id"]
|
|
95
|
-
# account = self.connection.accounts.get(self_id)
|
|
96
|
-
# if account is None:
|
|
97
|
-
# logger.warning(f"Unknown account {self_id} received message {raw_event}")
|
|
98
|
-
# return
|
|
99
|
-
# friend = Selector().land("qq").friend(str(raw_event["user_id"]))
|
|
100
|
-
# context = Context(account, friend, friend, friend, account.route)
|
|
101
|
-
# return DirectSessionCreated(context)
|
|
102
92
|
#
|
|
103
93
|
# @m.entity(OneBot11Capability.event_callback, raw_event="notice.notify.poke")
|
|
104
94
|
# async def nudge_received(self, raw_event: dict):
|
|
@@ -351,3 +341,22 @@ async def group_increase(login: Login, net: OneBotNetwork, raw: dict):
|
|
|
351
341
|
operator=operator,
|
|
352
342
|
role=Role("MEMBER", "群成员"),
|
|
353
343
|
)
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
@register_event("notice.friend_add")
|
|
347
|
+
async def friend_add(login: Login, net: OneBotNetwork, raw: dict):
|
|
348
|
+
user_info = await net.call_api("get_stranger_info", {"user_id": raw["user_id"]})
|
|
349
|
+
user = User(
|
|
350
|
+
str(raw["user_id"]),
|
|
351
|
+
user_info["nickname"],
|
|
352
|
+
user_info.get("card"),
|
|
353
|
+
USER_AVATAR_URL.format(uin=raw["user_id"]),
|
|
354
|
+
)
|
|
355
|
+
channel = Channel(f"private:{raw['user_id']}", ChannelType.DIRECT, user_info["nickname"])
|
|
356
|
+
return Event(
|
|
357
|
+
EventType.FRIEND_ADDED,
|
|
358
|
+
datetime.now(),
|
|
359
|
+
login=login,
|
|
360
|
+
user=user,
|
|
361
|
+
channel=channel,
|
|
362
|
+
)
|
|
@@ -34,9 +34,11 @@ class OneBot11ForwardAdapter(BaseAdapter):
|
|
|
34
34
|
self,
|
|
35
35
|
endpoint: str | URL,
|
|
36
36
|
access_token: str | None = None,
|
|
37
|
+
timeout: float = 60,
|
|
37
38
|
):
|
|
38
39
|
super().__init__()
|
|
39
40
|
self.endpoint = URL(endpoint)
|
|
41
|
+
self.timeout = timeout
|
|
40
42
|
self.access_token = access_token
|
|
41
43
|
self.close_signal = asyncio.Event()
|
|
42
44
|
self.response_waiters: dict[str, asyncio.Future] = {}
|
|
@@ -154,6 +156,7 @@ class OneBot11ForwardAdapter(BaseAdapter):
|
|
|
154
156
|
if (access_token := self.access_token) is not None
|
|
155
157
|
else None
|
|
156
158
|
),
|
|
159
|
+
timeout=self.timeout,
|
|
157
160
|
)
|
|
158
161
|
try:
|
|
159
162
|
self.connection = await ctx.__aenter__()
|
|
@@ -187,6 +190,8 @@ class OneBot11ForwardAdapter(BaseAdapter):
|
|
|
187
190
|
for login in self.logins.values():
|
|
188
191
|
login.status = LoginStatus.OFFLINE
|
|
189
192
|
await self.server.post(Event(EventType.LOGIN_REMOVED, datetime.now(), login))
|
|
193
|
+
for fut in self.response_waiters.values():
|
|
194
|
+
fut.cancel()
|
|
190
195
|
await asyncio.sleep(1)
|
|
191
196
|
return
|
|
192
197
|
if close_task in done:
|
|
@@ -195,6 +200,8 @@ class OneBot11ForwardAdapter(BaseAdapter):
|
|
|
195
200
|
for login in self.logins.values():
|
|
196
201
|
login.status = LoginStatus.RECONNECT
|
|
197
202
|
await self.server.post(Event(EventType.LOGIN_UPDATED, datetime.now(), login))
|
|
203
|
+
for fut in self.response_waiters.values():
|
|
204
|
+
fut.cancel()
|
|
198
205
|
await asyncio.sleep(5)
|
|
199
206
|
logger.info(f"{self} Reconnecting...")
|
|
200
207
|
continue
|
|
@@ -229,7 +236,7 @@ class OneBot11ForwardAdapter(BaseAdapter):
|
|
|
229
236
|
|
|
230
237
|
try:
|
|
231
238
|
await self.connection.send_str(encode({"action": action, "params": params or {}, "echo": echo}))
|
|
232
|
-
result = await future
|
|
239
|
+
result = await asyncio.wait_for(future, timeout=self.timeout)
|
|
233
240
|
finally:
|
|
234
241
|
del self.response_waiters[echo]
|
|
235
242
|
|
|
@@ -31,10 +31,17 @@ class _Connection:
|
|
|
31
31
|
self.response_waiters: dict[str, asyncio.Future] = {}
|
|
32
32
|
|
|
33
33
|
async def message_receive(self):
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
|
|
35
|
+
while True:
|
|
36
|
+
message = await self.ws.receive()
|
|
37
|
+
|
|
38
|
+
if message["type"] == "websocket.disconnect":
|
|
39
|
+
break
|
|
40
|
+
yield self, decode(message["text"])
|
|
41
|
+
# async for msg in self.ws.iter_text():
|
|
42
|
+
# yield self, decode(msg)
|
|
43
|
+
# else:
|
|
44
|
+
self.close_signal.set()
|
|
38
45
|
|
|
39
46
|
async def message_handle(self):
|
|
40
47
|
async for connection, data in self.message_receive():
|
|
@@ -116,7 +123,7 @@ class _Connection:
|
|
|
116
123
|
|
|
117
124
|
try:
|
|
118
125
|
await self.ws.send_text(encode({"action": action, "params": params or {}, "echo": echo}))
|
|
119
|
-
result = await future
|
|
126
|
+
result = await asyncio.wait_for(future, timeout=self.adapter.timeout)
|
|
120
127
|
finally:
|
|
121
128
|
del self.response_waiters[echo]
|
|
122
129
|
|
|
@@ -134,12 +141,14 @@ class OneBot11ReverseAdapter(BaseAdapter):
|
|
|
134
141
|
path: str = "onebot/v11",
|
|
135
142
|
endpoint: str = "ws",
|
|
136
143
|
access_token: str | None = None,
|
|
144
|
+
timeout: int = 60,
|
|
137
145
|
):
|
|
138
146
|
super().__init__()
|
|
139
147
|
self.endpoint = URL(prefix) / path / endpoint
|
|
140
148
|
self.access_token = access_token
|
|
141
149
|
self.logins: dict[str, Login] = {}
|
|
142
150
|
self.connections: dict[str, _Connection] = {}
|
|
151
|
+
self.timeout = timeout
|
|
143
152
|
|
|
144
153
|
apply(self, lambda _: self.connections[_], lambda _: self.logins[_])
|
|
145
154
|
|
|
@@ -180,6 +189,9 @@ class OneBot11ReverseAdapter(BaseAdapter):
|
|
|
180
189
|
finally:
|
|
181
190
|
del self.connections[account_id]
|
|
182
191
|
logger.info(f"Websocket {ws} closed")
|
|
192
|
+
if connection.response_waiters:
|
|
193
|
+
for future in connection.response_waiters.values():
|
|
194
|
+
future.cancel()
|
|
183
195
|
self.logins[account_id].status = LoginStatus.OFFLINE
|
|
184
196
|
await self.server.post(Event(EventType.LOGIN_REMOVED, datetime.now(), self.logins[account_id]))
|
|
185
197
|
await asyncio.sleep(1)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|