satori-python-adapter-onebot11 0.3.2__tar.gz → 0.4.0__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.
Files changed (16) hide show
  1. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/.mina/adapter_onebot11.toml +2 -2
  2. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/PKG-INFO +9 -9
  3. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/README.md +7 -7
  4. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/pyproject.toml +2 -2
  5. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/api.py +55 -21
  6. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/events/message.py +9 -4
  7. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/events/notice.py +25 -12
  8. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/LICENSE +0 -0
  9. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/__init__.py +0 -0
  10. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/events/__init__.py +0 -0
  11. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/events/base.py +0 -0
  12. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/events/request.py +0 -0
  13. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/forward.py +0 -0
  14. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/message.py +0 -0
  15. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/reverse.py +0 -0
  16. {satori_python_adapter_onebot11-0.3.2 → satori_python_adapter_onebot11-0.4.0}/src/satori/adapters/onebot11/utils.py +0 -0
@@ -1,9 +1,9 @@
1
1
  includes = ["src/satori/adapters/onebot11"]
2
- raw-dependencies = ["satori-python-server >= 0.18.0"]
2
+ raw-dependencies = ["satori-python-server<1.4.0,>= 1.3.0"]
3
3
 
4
4
  [project]
5
5
  name = "satori-python-adapter-onebot11"
6
- version = "0.3.2"
6
+ version = "0.4.0"
7
7
  authors = [
8
8
  {name = "RF-Tar-Railt", email = "rf_tar_railt@qq.com"}
9
9
  ]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: satori-python-adapter-onebot11
3
- Version: 0.3.2
3
+ Version: 0.4.0
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>
@@ -17,7 +17,7 @@ Classifier: Operating System :: OS Independent
17
17
  Project-URL: Homepage, https://github.com/RF-Tar-Railt/satori-python
18
18
  Project-URL: Repository, https://github.com/RF-Tar-Railt/satori-python
19
19
  Requires-Python: <4.0,>=3.10
20
- Requires-Dist: satori-python-server>=0.18.0
20
+ Requires-Dist: satori-python-server<1.4.0,>=1.3.0
21
21
  Description-Content-Type: text/markdown
22
22
 
23
23
  # satori-python
@@ -70,13 +70,13 @@ pip install satori-python-server
70
70
 
71
71
  ### 官方适配器
72
72
 
73
- | 适配器 | 安装 | 路径 |
74
- |------------|----------------------------------------------|--------------------------------------------------------------------|
75
- | Satori | `pip install satori-python-adapter-satori` | satori.adapters.satori |
76
- | OneBot V11 | `pip install satori-python-adapter-onebot11` | satori.adapters.onebot11.forward, satori.adapters.onebot11.reverse |
77
- | Console | `pip install satori-python-adapter-console` | satori.adapters.console |
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.qq.main, satori.adapters.qq.websocket |
73
+ | 适配器 | 安装 | 路径 |
74
+ |------------|----------------------------------------------|--------------------------------------------------------------------------------------|
75
+ | Satori | `pip install satori-python-adapter-satori` | satori.adapters.satori |
76
+ | OneBot V11 | `pip install satori-python-adapter-onebot11` | satori.adapters.onebot11.forward, satori.adapters.onebot11.reverse |
77
+ | Console | `pip install satori-python-adapter-console` | satori.adapters.console |
78
+ | Milky | `pip install satori-python-adapter-milky` | satori.adapters.milky.main, satori.adapters.milky.webhook, satori.adapters.milky.sse |
79
+ | QQ | `pip install satori-python-adapter-qq` | satori.adapters.qq.main, satori.adapters.qq.websocket |
80
80
 
81
81
  ### 社区适配器
82
82
 
@@ -48,13 +48,13 @@ pip install satori-python-server
48
48
 
49
49
  ### 官方适配器
50
50
 
51
- | 适配器 | 安装 | 路径 |
52
- |------------|----------------------------------------------|--------------------------------------------------------------------|
53
- | Satori | `pip install satori-python-adapter-satori` | satori.adapters.satori |
54
- | OneBot V11 | `pip install satori-python-adapter-onebot11` | satori.adapters.onebot11.forward, satori.adapters.onebot11.reverse |
55
- | Console | `pip install satori-python-adapter-console` | satori.adapters.console |
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.qq.main, satori.adapters.qq.websocket |
51
+ | 适配器 | 安装 | 路径 |
52
+ |------------|----------------------------------------------|--------------------------------------------------------------------------------------|
53
+ | Satori | `pip install satori-python-adapter-satori` | satori.adapters.satori |
54
+ | OneBot V11 | `pip install satori-python-adapter-onebot11` | satori.adapters.onebot11.forward, satori.adapters.onebot11.reverse |
55
+ | Console | `pip install satori-python-adapter-console` | satori.adapters.console |
56
+ | Milky | `pip install satori-python-adapter-milky` | satori.adapters.milky.main, satori.adapters.milky.webhook, satori.adapters.milky.sse |
57
+ | QQ | `pip install satori-python-adapter-qq` | satori.adapters.qq.main, satori.adapters.qq.websocket |
58
58
 
59
59
  ### 社区适配器
60
60
 
@@ -1,11 +1,11 @@
1
1
  [project]
2
2
  name = "satori-python-adapter-onebot11"
3
- version = "0.3.2"
3
+ version = "0.4.0"
4
4
  authors = [
5
5
  { name = "RF-Tar-Railt", email = "rf_tar_railt@qq.com" },
6
6
  ]
7
7
  dependencies = [
8
- "satori-python-server >= 0.18.0",
8
+ "satori-python-server<1.4.0,>= 1.3.0",
9
9
  ]
10
10
  description = "Satori Protocol SDK for python, adapter for OneBot 11"
11
11
  readme = "README.md"
@@ -5,13 +5,13 @@ from satori import Api
5
5
  from satori.model import (
6
6
  Channel,
7
7
  ChannelType,
8
+ Friend,
8
9
  Guild,
9
10
  Login,
10
11
  Member,
11
12
  MessageObject,
12
13
  PageDequeResult,
13
14
  PageResult,
14
- Role,
15
15
  User,
16
16
  )
17
17
  from satori.server import Adapter, Request
@@ -35,11 +35,11 @@ from satori.server.route import (
35
35
  ReactionCreateParam,
36
36
  ReactionDeleteParam,
37
37
  UserChannelCreateParam,
38
- UserGetParam,
38
+ UserOpParam,
39
39
  )
40
40
 
41
41
  from .message import OneBot11MessageEncoder, decode
42
- from .utils import GROUP_AVATAR_URL, USER_AVATAR_URL, OneBotNetwork
42
+ from .utils import GROUP_AVATAR_URL, ROLE_MAPPING, USER_AVATAR_URL, OneBotNetwork
43
43
 
44
44
 
45
45
  def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_getter: Callable[[str], Login]):
@@ -197,6 +197,18 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
197
197
  @adapter.route(Api.CHANNEL_GET)
198
198
  async def channel_get(request: Request[ChannelParam]):
199
199
  net = net_getter(request.self_id)
200
+ channel_id = request.params["channel_id"]
201
+ if channel_id.startswith("private:"):
202
+ user_id = channel_id.removeprefix("private:")
203
+ result = await net.call_api("get_stranger_info", {"user_id": int(user_id)})
204
+ if not result:
205
+ raise RuntimeError(f"Failed to get user {user_id}")
206
+ return Channel(
207
+ f"private:{user_id}",
208
+ ChannelType.DIRECT,
209
+ result["nickname"],
210
+ USER_AVATAR_URL.format(uin=user_id),
211
+ )
200
212
  result = await net.call_api("get_group_info", {"group_id": int(request.params["channel_id"])})
201
213
  if not result:
202
214
  raise RuntimeError(f"Failed to get group {request.params['channel_id']}")
@@ -250,6 +262,8 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
250
262
  @adapter.route(Api.CHANNEL_UPDATE)
251
263
  async def channel_update(request: Request[ChannelUpdateParam]):
252
264
  net = net_getter(request.self_id)
265
+ if request.params["channel_id"].startswith("private:"):
266
+ raise RuntimeError("Cannot update private channel")
253
267
  await net.call_api(
254
268
  "set_group_name",
255
269
  {"group_id": int(request.params["channel_id"]), "group_name": request.params["data"]["name"]},
@@ -259,6 +273,8 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
259
273
  @adapter.route(Api.CHANNEL_MUTE)
260
274
  async def channel_mute(request: Request[ChannelMuteParam]):
261
275
  net = net_getter(request.self_id)
276
+ if request.params["channel_id"].startswith("private:"):
277
+ raise RuntimeError("Cannot mute private channel")
262
278
  await net.call_api(
263
279
  "set_group_whole_ban",
264
280
  {
@@ -339,7 +355,7 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
339
355
  {
340
356
  "group_id": int(request.params["guild_id"]),
341
357
  "user_id": int(request.params["user_id"]),
342
- "enable": request.params["role_id"] == "ADMINISTRATOR",
358
+ "enable": request.params["role_id"] == "admin",
343
359
  },
344
360
  )
345
361
  return
@@ -352,17 +368,17 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
352
368
  {
353
369
  "group_id": int(request.params["guild_id"]),
354
370
  "user_id": int(request.params["user_id"]),
355
- "enable": request.params["role_id"] != "ADMINISTRATOR",
371
+ "enable": request.params["role_id"] != "admin",
356
372
  },
357
373
  )
358
374
  return
359
375
 
360
376
  @adapter.route(Api.GUILD_ROLE_LIST)
361
377
  async def guild_role_list(request: Request[GuildXXXListParam]):
362
- return PageResult([Role("ADMINISTRATOR", "admin"), Role("MEMBER", "member"), Role("OWNER", "owner")])
378
+ return PageResult(list(ROLE_MAPPING.values()))
363
379
 
364
380
  @adapter.route(Api.USER_GET)
365
- async def user_get(request: Request[UserGetParam]):
381
+ async def user_get(request: Request[UserOpParam]):
366
382
  net = net_getter(request.self_id)
367
383
  result = await net.call_api("get_stranger_info", {"user_id": int(request.params["user_id"])})
368
384
  if not result:
@@ -380,11 +396,13 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
380
396
  result: list[dict] = await net.call_api("get_friend_list", {}) # type: ignore
381
397
  return PageResult(
382
398
  [
383
- User(
384
- str(item["user_id"]),
385
- item["nickname"],
399
+ Friend(
400
+ User(
401
+ str(item["user_id"]),
402
+ item["nickname"],
403
+ USER_AVATAR_URL.format(uin=item["user_id"]),
404
+ ),
386
405
  item.get("remark"),
387
- USER_AVATAR_URL.format(uin=item["user_id"]),
388
406
  )
389
407
  for item in result
390
408
  ]
@@ -441,7 +459,7 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
441
459
  "set_msg_emoji_like",
442
460
  {
443
461
  "message_id": int(request.params["message_id"]),
444
- "emoji": request.params["emoji"],
462
+ "emoji": request.params["emoji_id"],
445
463
  },
446
464
  )
447
465
  elif app_name == "Lagrange.OneBot" and not channel_id.startswith("private:"):
@@ -450,7 +468,7 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
450
468
  {
451
469
  "group_id": int(channel_id),
452
470
  "message_id": int(request.params["message_id"]),
453
- "code": request.params["emoji"],
471
+ "code": request.params["emoji_id"],
454
472
  "is_add": True,
455
473
  },
456
474
  )
@@ -459,18 +477,26 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
459
477
  "set_msg_emoji_like",
460
478
  {
461
479
  "message_id": int(request.params["message_id"]),
462
- "emoji_id": request.params["emoji"],
480
+ "emoji_id": request.params["emoji_id"],
463
481
  "set": True,
464
482
  },
465
483
  )
466
484
  elif app_name == "ws-plugin" and not channel_id.startswith("private:"):
467
- emj_type = 1 if int(request.params["emoji"]) < 5000 else 2
485
+ emoji_id = request.params["emoji_id"]
486
+ if ":" in emoji_id:
487
+ # custom emoji, format: {type}:{id}
488
+ emj_type_str, emj_id_str = emoji_id.split(":", 1)
489
+ emj_type = int(emj_type_str)
490
+ emj_id = int(emj_id_str)
491
+ else:
492
+ emj_id = int(emoji_id)
493
+ emj_type = 1 if emj_id < 5000 else 2
468
494
  await net.call_api(
469
495
  "set_reaction",
470
496
  {
471
497
  "group_id": int(channel_id),
472
498
  "message_seq": int(request.params["message_id"]),
473
- "code": request.params["emoji"],
499
+ "code": emj_id,
474
500
  "is_add": True,
475
501
  "type": emj_type,
476
502
  },
@@ -488,7 +514,7 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
488
514
  "unset_msg_emoji_like",
489
515
  {
490
516
  "message_id": int(request.params["message_id"]),
491
- "emoji": request.params["emoji"],
517
+ "emoji": request.params["emoji_id"],
492
518
  },
493
519
  )
494
520
  elif app_name == "Lagrange.OneBot" and not channel_id.startswith("private:"):
@@ -497,7 +523,7 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
497
523
  {
498
524
  "group_id": int(channel_id),
499
525
  "message_id": int(request.params["message_id"]),
500
- "code": request.params["emoji"],
526
+ "code": request.params["emoji_id"],
501
527
  "is_add": False,
502
528
  },
503
529
  )
@@ -506,18 +532,26 @@ def apply(adapter: Adapter, net_getter: Callable[[str], OneBotNetwork], login_ge
506
532
  "set_msg_emoji_like",
507
533
  {
508
534
  "message_id": int(request.params["message_id"]),
509
- "emoji": request.params["emoji"],
535
+ "emoji": request.params["emoji_id"],
510
536
  "set": False,
511
537
  },
512
538
  )
513
539
  elif app_name == "ws-plugin" and not channel_id.startswith("private:"):
514
- emj_type = 1 if int(request.params["emoji"]) < 5000 else 2
540
+ emoji_id = request.params["emoji_id"]
541
+ if ":" in emoji_id:
542
+ # custom emoji, format: {type}:{id}
543
+ emj_type_str, emj_id_str = emoji_id.split(":", 1)
544
+ emj_type = int(emj_type_str)
545
+ emj_id = int(emj_id_str)
546
+ else:
547
+ emj_id = int(emoji_id)
548
+ emj_type = 1 if emj_id < 5000 else 2
515
549
  await net.call_api(
516
550
  "set_reaction",
517
551
  {
518
552
  "group_id": int(channel_id),
519
553
  "message_seq": int(request.params["message_id"]),
520
- "code": request.params["emoji"],
554
+ "code": emj_id,
521
555
  "is_add": False,
522
556
  "type": emj_type,
523
557
  },
@@ -80,7 +80,9 @@ async def group(login: Login, net: OneBotNetwork, raw: dict):
80
80
  member_info = await net.call_api(
81
81
  "get_group_member_info", {"group_id": raw["group_id"], "user_id": sender["user_id"]}
82
82
  )
83
- member = Member(user, member_info["card"], USER_AVATAR_URL.format(uin=sender["user_id"]))
83
+ member = Member(
84
+ user, member_info["card"], USER_AVATAR_URL.format(uin=sender["user_id"]), roles=[ROLE_MAPPING[sender["role"]]]
85
+ )
84
86
  guild = Guild(
85
87
  str(raw["group_id"]), group_info.get("group_name"), avatar=GROUP_AVATAR_URL.format(group=raw["group_id"])
86
88
  )
@@ -93,7 +95,6 @@ async def group(login: Login, net: OneBotNetwork, raw: dict):
93
95
  guild=guild,
94
96
  channel=channel,
95
97
  member=member,
96
- role=ROLE_MAPPING[sender["role"]],
97
98
  message=MessageObject(str(raw["message_id"]), await decode(raw["message"], net)),
98
99
  )
99
100
 
@@ -111,7 +112,12 @@ async def group_message_recall(login: Login, net: OneBotNetwork, raw: dict):
111
112
  member_info.get("card"),
112
113
  USER_AVATAR_URL.format(uin=raw["user_id"]),
113
114
  )
114
- member = Member(user, member_info.get("card"), USER_AVATAR_URL.format(uin=raw["user_id"]))
115
+ member = Member(
116
+ user,
117
+ member_info.get("card"),
118
+ USER_AVATAR_URL.format(uin=raw["user_id"]),
119
+ roles=[ROLE_MAPPING[member_info["role"]]],
120
+ )
115
121
  guild = Guild(
116
122
  str(raw["group_id"]), group_info.get("group_name"), avatar=GROUP_AVATAR_URL.format(group=raw["group_id"])
117
123
  )
@@ -131,6 +137,5 @@ async def group_message_recall(login: Login, net: OneBotNetwork, raw: dict):
131
137
  channel=channel,
132
138
  member=member,
133
139
  operator=operator,
134
- role=ROLE_MAPPING[member_info["role"]],
135
140
  message=MessageObject(str(raw["message_id"]), ""),
136
141
  )
@@ -179,8 +179,12 @@ async def group_admin_set(login: Login, net: OneBotNetwork, raw: dict):
179
179
  )
180
180
  channel = Channel(str(raw["group_id"]), ChannelType.TEXT, group_info.get("group_name"))
181
181
  user = User(str(raw["user_id"]), member_info["nickname"], avatar=USER_AVATAR_URL.format(uin=raw["user_id"]))
182
- member = Member(user, member_info.get("card"), avatar=USER_AVATAR_URL.format(uin=raw["user_id"]))
183
- role = Role("ADMINISTRATOR", "管理员")
182
+ member = Member(
183
+ user,
184
+ member_info.get("card"),
185
+ avatar=USER_AVATAR_URL.format(uin=raw["user_id"]),
186
+ roles=[Role("ADMINISTRATOR", "管理员")],
187
+ )
184
188
  return Event(
185
189
  EventType.GUILD_MEMBER_UPDATED,
186
190
  datetime.now(),
@@ -189,7 +193,6 @@ async def group_admin_set(login: Login, net: OneBotNetwork, raw: dict):
189
193
  member=member,
190
194
  guild=guild,
191
195
  channel=channel,
192
- role=role,
193
196
  )
194
197
 
195
198
 
@@ -202,8 +205,12 @@ async def group_admin_unset(login: Login, net: OneBotNetwork, raw: dict):
202
205
  )
203
206
  channel = Channel(str(raw["group_id"]), ChannelType.TEXT, group_info.get("group_name"))
204
207
  user = User(str(raw["user_id"]), member_info["nickname"], avatar=USER_AVATAR_URL.format(uin=raw["user_id"]))
205
- member = Member(user, member_info.get("card"), avatar=USER_AVATAR_URL.format(uin=raw["user_id"]))
206
- role = Role("MEMBER", "群成员")
208
+ member = Member(
209
+ user,
210
+ member_info.get("card"),
211
+ avatar=USER_AVATAR_URL.format(uin=raw["user_id"]),
212
+ roles=[Role("MEMBER", "群成员")],
213
+ )
207
214
  return Event(
208
215
  EventType.GUILD_MEMBER_UPDATED,
209
216
  datetime.now(),
@@ -212,7 +219,6 @@ async def group_admin_unset(login: Login, net: OneBotNetwork, raw: dict):
212
219
  member=member,
213
220
  guild=guild,
214
221
  channel=channel,
215
- role=role,
216
222
  )
217
223
 
218
224
 
@@ -267,7 +273,10 @@ async def member_kick_me(login: Login, net: OneBotNetwork, raw: dict):
267
273
  "get_group_member_info", {"group_id": raw["group_id"], "user_id": raw["operator_id"]}
268
274
  )
269
275
  member = Member(
270
- login.user, member_info.get("card", member_info["nickname"]), USER_AVATAR_URL.format(uin=raw["user_id"])
276
+ login.user,
277
+ member_info.get("card", member_info["nickname"]),
278
+ USER_AVATAR_URL.format(uin=raw["user_id"]),
279
+ roles=[ROLE_MAPPING[member_info["role"]]],
271
280
  )
272
281
  guild = Guild(
273
282
  str(raw["group_id"]), group_info.get("group_name"), avatar=GROUP_AVATAR_URL.format(group=raw["group_id"])
@@ -288,7 +297,6 @@ async def member_kick_me(login: Login, net: OneBotNetwork, raw: dict):
288
297
  guild=guild,
289
298
  channel=channel,
290
299
  operator=operator,
291
- role=ROLE_MAPPING[member_info["role"]],
292
300
  )
293
301
 
294
302
 
@@ -303,10 +311,11 @@ async def group_increase(login: Login, net: OneBotNetwork, raw: dict):
303
311
  datetime.now(),
304
312
  login=login,
305
313
  user=login.user,
306
- member=Member(login.user, avatar=USER_AVATAR_URL.format(uin=login.user.id)),
314
+ member=Member(
315
+ login.user, avatar=USER_AVATAR_URL.format(uin=login.user.id), roles=[Role("MEMBER", "群成员")]
316
+ ),
307
317
  guild=guild,
308
318
  channel=channel,
309
- role=Role("MEMBER", "群成员"),
310
319
  )
311
320
  group_info = await net.call_api("get_group_info", {"group_id": raw["group_id"]})
312
321
  member_info = await net.call_api("get_group_member_info", {"group_id": raw["group_id"], "user_id": raw["user_id"]})
@@ -319,7 +328,12 @@ async def group_increase(login: Login, net: OneBotNetwork, raw: dict):
319
328
  member_info.get("card"),
320
329
  USER_AVATAR_URL.format(uin=raw["user_id"]),
321
330
  )
322
- member = Member(user, member_info.get("card"), USER_AVATAR_URL.format(uin=raw["user_id"]))
331
+ member = Member(
332
+ user,
333
+ member_info.get("card"),
334
+ USER_AVATAR_URL.format(uin=raw["user_id"]),
335
+ roles=[ROLE_MAPPING[member_info["role"]]],
336
+ )
323
337
  guild = Guild(
324
338
  str(raw["group_id"]), group_info.get("group_name"), avatar=GROUP_AVATAR_URL.format(group=raw["group_id"])
325
339
  )
@@ -339,7 +353,6 @@ async def group_increase(login: Login, net: OneBotNetwork, raw: dict):
339
353
  guild=guild,
340
354
  channel=channel,
341
355
  operator=operator,
342
- role=Role("MEMBER", "群成员"),
343
356
  )
344
357
 
345
358