Skip to content

Commit d9c4732

Browse files
GLGDLYSaucePlumveehou
authored
feat & refactor: 重构事件并优化http debug log的url反馈 (#108)
* feat: 完善ws事件中Message数据的构建 * feat: 完善ws事件中User-Member数据的构建 * feat: 完善ws事件中Reaction、Audio、DirectMessage 以及 Forum(Thread类)数据的构建 feat: 去除EmbedField的value项(实际仅有name) * feat: 完善ws事件中监听文档并优化格式 refactor: 优化forum thread的事件数据名称 * fix: forum thread的事件数据名称更变后同步数据更改到其他文件 * refactor: 优化ext下的扩展工具 * refactor: 优化ext的convert_color模块 * refactor: 优化ext下的扩展工具 * refactor: 优化ext下的扩展工具 * docs: 修改一处表述不正确的地方 * feat: 修改一处表述不正确的地方 * fix: 帖子api中route方式错误的问题 * feat: 补齐频道成员中的删除频道成员api * feat: 更新文档并新增定时框架 * fix: 修复Member构建的部分字段取值错误的问题 * docs: 更新botpy文档 * fix: 修复删除频道成员API无法拉黑的问题 * fix: rst文件回滚 * feat: 为http请求成功添加trace_id * feat: http总_handle_response修改原来的route.url到真实请求url refactor: 重构事件的部分建构方式,优化部分拓展性问题 refactor: 为所有事件子参数新增默认值,避免将来数据更变下可能出现bug * fix: 修改单元测试报错的问题 * feat: Message事件新增兼容attachments字段 * feat: 补充member字段的guild_id字段 * refactor: parser中的kwargs改为payload * fix: 修复issue #109 中FormData报TypeError错误的问题 * feat: 去除不必要的包 Co-authored-by: 小念同学 <[email protected]> Co-authored-by: veehou <[email protected]>
1 parent a619a4e commit d9c4732

File tree

12 files changed

+224
-193
lines changed

12 files changed

+224
-193
lines changed

botpy/audio.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .api import BotAPI
2-
from .types import gateway, audio
2+
from .types import audio
33

44

55
class Audio:
@@ -12,11 +12,11 @@ class Audio:
1212
"text",
1313
"event_id")
1414

15-
def __init__(self, api: BotAPI, ctx: gateway.WsContext, data: audio.AudioAction):
15+
def __init__(self, api: BotAPI, event_id, data: audio.AudioAction):
1616
self._api = api
1717

18-
self.channel_id = data.get("channel_id")
19-
self.guild_id = data.get("guild_id")
20-
self.audio_url = data.get("audio_url")
21-
self.text = data.get("text")
22-
self.event_id = ctx.get("id")
18+
self.channel_id = data.get("channel_id", None)
19+
self.guild_id = data.get("guild_id", None)
20+
self.audio_url = data.get("audio_url", None)
21+
self.text = data.get("text", None)
22+
self.event_id = event_id

botpy/channel.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from .api import BotAPI
2-
from .types import channel, gateway
2+
from .types import channel
33

44

55
class Channel:
@@ -19,17 +19,17 @@ class Channel:
1919
"event_id",
2020
)
2121

22-
def __init__(self, api: BotAPI, ctx: gateway.WsContext, data: channel.ChannelPayload):
22+
def __init__(self, api: BotAPI, event_id, data: channel.ChannelPayload):
2323
self._api = api
2424

25-
self.id = data.get("id")
26-
self.name = data.get("name")
27-
self.type = data.get("type")
28-
self.sub_type = data.get("sub_type")
29-
self.position = data.get("position")
30-
self.owner_id = data.get("owner_id")
31-
self.private_type = data.get("private_type")
32-
self.speak_permission = data.get("speak_permission")
33-
self.application_id = data.get("application_id")
34-
self.permissions = data.get("permissions")
35-
self.event_id = ctx.get("id")
25+
self.id = data.get("id", None)
26+
self.name = data.get("name", None)
27+
self.type = data.get("type", None)
28+
self.sub_type = data.get("sub_type", None)
29+
self.position = data.get("position", None)
30+
self.owner_id = data.get("owner_id", None)
31+
self.private_type = data.get("private_type", None)
32+
self.speak_permission = data.get("speak_permission", None)
33+
self.application_id = data.get("application_id", None)
34+
self.permissions = data.get("permissions", None)
35+
self.event_id = event_id

botpy/connection.py

Lines changed: 68 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from . import logging
1515
from .api import BotAPI
1616
from .robot import Robot
17-
from .types import gateway, channel, guild, user, session, reaction, interaction, forum
17+
from .types import session
1818

1919
_log = logging.get_logger()
2020

@@ -36,7 +36,7 @@ def __init__(
3636
):
3737
self.dispatch = dispatch
3838
self.state = ConnectionState(dispatch, api)
39-
self.parser: Dict[str, Callable[[gateway.WsContext, Any], None]] = self.state.parsers
39+
self.parser: Dict[str, Callable[[dict], None]] = self.state.parsers
4040

4141
self._connect = connect
4242
self._max_async = max_async
@@ -89,141 +89,141 @@ def __init__(self, dispatch: Callable, api: BotAPI):
8989
self._dispatch = dispatch
9090
self.api = api
9191

92-
def parse_ready(self, ctx: gateway.WsContext, data: gateway.ReadyEvent):
92+
def parse_ready(self, payload):
9393
self._dispatch("ready")
9494

95-
def parse_resumed(self, ctx: gateway.WsContext, data: gateway.ReadyEvent):
95+
def parse_resumed(self, payload):
9696
self._dispatch("resumed")
9797

9898
# botpy.flags.Intents.guilds
99-
def parse_guild_create(self, ctx: gateway.WsContext, data: guild.GuildPayload):
100-
_guild = Guild(self.api, ctx, data)
99+
def parse_guild_create(self, payload):
100+
_guild = Guild(self.api, payload.get('id', None), payload.get('d', {}))
101101
self._dispatch("guild_create", _guild)
102102

103-
def parse_guild_update(self, ctx: gateway.WsContext, data: guild.GuildPayload):
104-
_guild = Guild(self.api, ctx, data)
103+
def parse_guild_update(self, payload):
104+
_guild = Guild(self.api, payload.get('id', None), payload.get('d', {}))
105105
self._dispatch("guild_update", _guild)
106106

107-
def parse_guild_delete(self, ctx: gateway.WsContext, data: guild.GuildPayload):
108-
_guild = Guild(self.api, ctx, data)
107+
def parse_guild_delete(self, payload):
108+
_guild = Guild(self.api, payload.get('id', None), payload.get('d', {}))
109109
self._dispatch("guild_delete", _guild)
110110

111-
def parse_channel_create(self, ctx: gateway.WsContext, data: channel.ChannelPayload):
112-
_channel = Channel(self.api, ctx, data)
111+
def parse_channel_create(self, payload):
112+
_channel = Channel(self.api, payload.get('id', None), payload.get('d', {}))
113113
self._dispatch("channel_create", _channel)
114114

115-
def parse_channel_update(self, ctx: gateway.WsContext, data: channel.ChannelPayload):
116-
_channel = Channel(self.api, ctx, data)
115+
def parse_channel_update(self, payload):
116+
_channel = Channel(self.api, payload.get('id', None), payload.get('d', {}))
117117
self._dispatch("channel_update", _channel)
118118

119-
def parse_channel_delete(self, ctx: gateway.WsContext, data: channel.ChannelPayload):
120-
_channel = Channel(self.api, ctx, data)
119+
def parse_channel_delete(self, payload):
120+
_channel = Channel(self.api, payload.get('id', None), payload.get('d', {}))
121121
self._dispatch("channel_delete", _channel)
122122

123123
# botpy.flags.Intents.guild_members
124-
def parse_guild_member_add(self, ctx: gateway.WsContext, data: user.GuildMemberPayload):
125-
_member = Member(self.api, ctx, data)
124+
def parse_guild_member_add(self, payload):
125+
_member = Member(self.api, payload.get('id', None), payload.get('d', {}))
126126
self._dispatch("guild_member_add", _member)
127127

128-
def parse_guild_member_update(self, ctx: gateway.WsContext, data: user.GuildMemberPayload):
129-
_member = Member(self.api, ctx, data)
128+
def parse_guild_member_update(self, payload):
129+
_member = Member(self.api, payload.get('id', None), payload.get('d', {}))
130130
self._dispatch("guild_member_update", _member)
131131

132-
def parse_guild_member_remove(self, ctx: gateway.WsContext, data: user.GuildMemberPayload):
133-
_member = Member(self.api, ctx, data)
132+
def parse_guild_member_remove(self, payload):
133+
_member = Member(self.api, payload.get('id', None), payload.get('d', {}))
134134
self._dispatch("guild_member_remove", _member)
135135

136136
# botpy.flags.Intents.guild_messages
137-
def parse_message_create(self, ctx: gateway.WsContext, data: gateway.MessagePayload):
138-
_message = Message(self.api, ctx, data)
137+
def parse_message_create(self, payload):
138+
_message = Message(self.api, payload.get('id', None), payload.get('d', {}))
139139
self._dispatch("message_create", _message)
140140

141-
def parse_message_delete(self, ctx: gateway.WsContext, data: gateway.MessagePayload):
142-
_message = Message(self.api, ctx, data)
141+
def parse_message_delete(self, payload):
142+
_message = Message(self.api, payload.get('id', None), payload.get('d', {}))
143143
self._dispatch("message_delete", _message)
144144

145145
# botpy.flags.Intents.guild_message_reactions
146-
def parse_message_reaction_add(self, ctx: gateway.WsContext, data: reaction.Reaction):
147-
_reaction = Reaction(self.api, ctx, data)
146+
def parse_message_reaction_add(self, payload):
147+
_reaction = Reaction(self.api, payload.get('id', None), payload.get('d', {}))
148148
self._dispatch("message_reaction_add", _reaction)
149149

150-
def parse_message_reaction_remove(self, ctx: gateway.WsContext, data: reaction.Reaction):
151-
_reaction = Reaction(self.api, ctx, data)
150+
def parse_message_reaction_remove(self, payload):
151+
_reaction = Reaction(self.api, payload.get('id', None), payload.get('d', {}))
152152
self._dispatch("message_reaction_remove", _reaction)
153153

154154
# botpy.flags.Intents.direct_message
155-
def parse_direct_message_create(self, ctx: gateway.WsContext, data: gateway.DirectMessagePayload):
156-
_message = DirectMessage(self.api, ctx, data)
155+
def parse_direct_message_create(self, payload):
156+
_message = DirectMessage(self.api, payload.get('id', None), payload.get('d', {}))
157157
self._dispatch("direct_message_create", _message)
158158

159-
def parse_direct_message_delete(self, ctx: gateway.WsContext, data: gateway.DirectMessagePayload):
160-
_message = DirectMessage(self.api, ctx, data)
159+
def parse_direct_message_delete(self, payload):
160+
_message = DirectMessage(self.api, payload.get('id', None), payload.get('d', {}))
161161
self._dispatch("direct_message_delete", _message)
162162

163163
# botpy.flags.Intents.interaction
164-
def parse_interaction_create(self, ctx: gateway.WsContext, data: interaction.InteractionPayload):
165-
_interaction = Interaction(self.api, ctx, data)
164+
def parse_interaction_create(self, payload):
165+
_interaction = Interaction(self.api, payload.get('id', None), payload.get('d', {}))
166166
self._dispatch("interaction_create", _interaction)
167167

168168
# botpy.flags.Intents.message_audit
169-
def parse_message_audit_pass(self, ctx: gateway.WsContext, data: gateway.MessageAuditPayload):
170-
_message_audit = MessageAudit(self.api, ctx, data)
169+
def parse_message_audit_pass(self, payload):
170+
_message_audit = MessageAudit(self.api, payload.get('id', None), payload.get('d', {}))
171171
self._dispatch("message_audit_pass", _message_audit)
172172

173-
def parse_message_audit_reject(self, ctx: gateway.WsContext, data: gateway.MessageAuditPayload):
174-
_message_audit = MessageAudit(self.api, ctx, data)
173+
def parse_message_audit_reject(self, payload):
174+
_message_audit = MessageAudit(self.api, payload.get('id', None), payload.get('d', {}))
175175
self._dispatch("message_audit_reject", _message_audit)
176176

177177
# botpy.flags.Intents.audio_action
178-
def parse_audio_start(self, ctx: gateway.WsContext, data):
179-
_audio = Audio(self.api, ctx, data)
178+
def parse_audio_start(self, payload):
179+
_audio = Audio(self.api, payload.get('id', None), payload.get('d', {}))
180180
self._dispatch("audio_start", _audio)
181181

182-
def parse_audio_finish(self, ctx: gateway.WsContext, data):
183-
_audio = Audio(self.api, ctx, data)
182+
def parse_audio_finish(self, payload):
183+
_audio = Audio(self.api, payload.get('id', None), payload.get('d', {}))
184184
self._dispatch("audio_finish", _audio)
185185

186-
def parse_on_mic(self, ctx: gateway.WsContext, data):
187-
_audio = Audio(self.api, ctx, data)
186+
def parse_on_mic(self, payload):
187+
_audio = Audio(self.api, payload.get('id', None), payload.get('d', {}))
188188
self._dispatch("on_mic", _audio)
189189

190-
def parse_off_mic(self, ctx: gateway.WsContext, data):
191-
_audio = Audio(self.api, ctx, data)
190+
def parse_off_mic(self, payload):
191+
_audio = Audio(self.api, payload.get('id', None), payload.get('d', {}))
192192
self._dispatch("off_mic", _audio)
193193

194194
# botpy.flags.Intents.public_guild_messages
195-
def parse_at_message_create(self, ctx: gateway.WsContext, data: gateway.MessagePayload):
196-
_message = Message(self.api, ctx, data)
195+
def parse_at_message_create(self, payload):
196+
_message = Message(self.api, payload.get('id', None), payload.get('d', {}))
197197
self._dispatch("at_message_create", _message)
198198

199-
def parse_public_message_delete(self, ctx: gateway.WsContext, data: gateway.MessagePayload):
200-
_message = Message(self.api, ctx, data)
199+
def parse_public_message_delete(self, payload):
200+
_message = Message(self.api, payload.get('id', None), payload.get('d', {}))
201201
self._dispatch("public_message_delete", _message)
202202

203203
# botpy.flags.Intents.forums
204-
def parse_forum_thread_create(self, ctx: gateway.WsContext, data: forum.Thread):
205-
_forum = Thread(self.api, ctx, data)
204+
def parse_forum_thread_create(self, payload):
205+
_forum = Thread(self.api, payload.get('id', None), payload.get('d', {}))
206206
self._dispatch("forum_thread_create", _forum)
207207

208-
def parse_forum_thread_update(self, ctx: gateway.WsContext, data: forum.Thread):
209-
_forum = Thread(self.api, ctx, data)
208+
def parse_forum_thread_update(self, payload):
209+
_forum = Thread(self.api, payload.get('id', None), payload.get('d', {}))
210210
self._dispatch("forum_thread_update", _forum)
211211

212-
def parse_forum_thread_delete(self, ctx: gateway.WsContext, data: forum.Thread):
213-
_forum = Thread(self.api, ctx, data)
212+
def parse_forum_thread_delete(self, payload):
213+
_forum = Thread(self.api, payload.get('id', None), payload.get('d', {}))
214214
self._dispatch("forum_thread_delete", _forum)
215215

216-
def parse_forum_post_create(self, ctx: gateway.WsContext, data: forum.Post):
217-
self._dispatch("forum_post_create", data)
216+
def parse_forum_post_create(self, payload):
217+
self._dispatch("forum_post_create", payload.get('d', {}))
218218

219-
def parse_forum_post_delete(self, ctx: gateway.WsContext, data: forum.Post):
220-
self._dispatch("forum_post_delete", data)
219+
def parse_forum_post_delete(self, payload):
220+
self._dispatch("forum_post_delete", payload.get('d', {}))
221221

222-
def parse_forum_reply_create(self, ctx: gateway.WsContext, data: forum.Reply):
223-
self._dispatch("forum_reply_create", data)
222+
def parse_forum_reply_create(self, payload):
223+
self._dispatch("forum_reply_create", payload.get('d', {}))
224224

225-
def parse_forum_reply_delete(self, ctx: gateway.WsContext, data: forum.Reply):
226-
self._dispatch("forum_reply_delete", data)
225+
def parse_forum_reply_delete(self, payload):
226+
self._dispatch("forum_reply_delete", payload.get('d', {}))
227227

228-
def parse_forum_publish_audit_result(self, ctx: gateway.WsContext, data: forum.AuditResult):
229-
self._dispatch("forum_publish_audit_result", data)
228+
def parse_forum_publish_audit_result(self, payload):
229+
self._dispatch("forum_publish_audit_result", payload.get('d', {}))

botpy/forum.py

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from json import loads
22

33
from .api import BotAPI
4-
from .types import gateway, forum
4+
from .types import forum
55

66

77
class _Text:
@@ -56,48 +56,48 @@ class Thread:
5656
"author_id",
5757
"event_id")
5858

59-
def __init__(self, api: BotAPI, ctx: gateway.WsContext, data: forum.Thread):
59+
def __init__(self, api: BotAPI, event_id, data: forum.Thread):
6060
self._api = api
6161

62-
self.author_id = data.get("author_id")
63-
self.channel_id = data.get("channel_id")
64-
self.guild_id = data.get("guild_id")
65-
self.thread_info = self._ThreadInfo(data.get("thread_info"))
66-
self.event_id = ctx.get("id")
62+
self.author_id = data.get("author_id", None)
63+
self.channel_id = data.get("channel_id", None)
64+
self.guild_id = data.get("guild_id", None)
65+
self.thread_info = self._ThreadInfo(data.get("thread_info", {}))
66+
self.event_id = event_id
6767

6868
class _ThreadInfo:
6969
def __init__(self, data):
70-
self.title = self._Title(loads(data.get("title")))
71-
self.content = self._Content(loads(data.get("content")))
72-
self.thread_id = data.get("thread_id")
73-
self.date_time = data.get("date_time")
70+
self.title = self._Title(loads(data.get("title", {})))
71+
self.content = self._Content(loads(data.get("content", {})))
72+
self.thread_id = data.get("thread_id", None)
73+
self.date_time = data.get("date_time", None)
7474

7575
class _Title:
7676
def __init__(self, data):
77-
self.paragraphs = [self._Paragraphs(items) for items in data.get("paragraphs")]
77+
self.paragraphs = [self._Paragraphs(items) for items in data.get("paragraphs", {})]
7878

7979
class _Paragraphs:
8080
def __init__(self, data):
81-
self.elems = [self._Elems(items) for items in data.get("elems")]
82-
self.props = data.get("props")
81+
self.elems = [self._Elems(items) for items in data.get("elems", {})]
82+
self.props = data.get("props", None)
8383

8484
class _Elems:
8585
def __init__(self, data):
86-
self.type = data.get("type")
86+
self.type = data.get("type", None)
8787
self.text = _Text(data.get("text", {}))
8888

8989
class _Content:
9090
def __init__(self, data):
91-
self.paragraphs = [self._Paragraphs(items) for items in data.get("paragraphs")]
91+
self.paragraphs = [self._Paragraphs(items) for items in data.get("paragraphs", {})]
9292

9393
class _Paragraphs:
9494
def __init__(self, data):
95-
self.elems = [self._Elems(items) for items in data.get("elems")]
96-
self.props = data.get("props")
95+
self.elems = [self._Elems(items) for items in data.get("elems", {})]
96+
self.props = data.get("props", None)
9797

9898
class _Elems:
9999
def __init__(self, data):
100-
self.type = data.get("type")
100+
self.type = data.get("type", None)
101101
if self.type == 1:
102102
self.text = _Text(data.get("text", {}))
103103
elif self.type == 2:

botpy/gateway.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,7 @@ async def on_message(self, ws, message):
9191
except KeyError:
9292
_log.error("_parser unknown event %s.", event)
9393
else:
94-
ctx = gateway.WsContext(id=msg.get("id", ""))
95-
func(ctx, msg.get("d"))
94+
func(msg)
9695

9796
async def on_connected(self, ws: ClientWebSocketResponse):
9897
self._conn = ws

0 commit comments

Comments
 (0)