You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发Discord Bot:@client.event与on_ready作用咨询

discord.py 事件机制核心问题解答

注:你提供的示例代码最后一行client.run(TOKEN缺少闭合右括号,运行前需要补上),否则会直接抛出语法错误。

@client.event的作用与运行逻辑

  • 它是discord.Client类内置的事件注册装饰器,你可以把它理解成一个挂钩工具:你不需要自己写代码轮询监听Discord的服务端通知,只要用这个装饰器标记你的函数,客户端就会在对应事件发生时自动执行你写的逻辑。
  • 完整运行流程:
    1. 调用client.run(TOKEN)后,Bot会和Discord官方网关建立WebSocket长连接,持续接收网关推送的全量事件通知,包括连接成功、收到新消息、服务器成员变动等等。
    2. 被@client.event装饰的函数,会被自动注册到客户端内部的回调映射表中,映射的键就是你的函数名。
    3. 每当客户端收到网关推送的事件,就会去映射表里找和事件名匹配的回调函数,丢到异步事件循环里执行。
  • 常见误区:这个装饰器只做注册动作,不会修改你的函数内部逻辑。如果函数名对但没加这个装饰器,事件触发时函数不会被自动调用。

on_ready的命名规则说明

  • 这个函数名是discord.py硬编码的固定事件回调名,不是开发者之间的随意约定。如果你把函数改成别的名字,比如bot_started,就算加了@client.event装饰器,Bot启动就绪时也不会执行这段代码。
  • 所有示例都用这个名字的原因很简单:Discord网关在Bot完成账号校验、拉取完所有可见的服务器/频道/用户缓存、连接状态正式切为可用时,固定派发的就绪事件,在discord.py内部就是和on_ready这个名字做绑定的,属于库预先定义好的事件接口,开发者直接按固定名字实现逻辑就行,不需要自己做事件名映射。
  • 除了on_ready之外,discord.py所有事件对应的回调函数都是固定命名,比如处理收到消息的on_message、处理新成员加入服务器的on_member_join、处理消息表情反应的on_reaction_add,名字拼写错误就无法触发对应逻辑。

内容的提问来源于stack exchange,提问作者J code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 02:01:33