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

Python开发Discord Bot:除on_ready外其他事件无法触发求助

问题解决方法

1. 修正Intents配置

默认的ds.Intents.default()不包含消息内容读取和成员事件的权限,这是导致on_message和on_member_join无法触发的核心原因,需要手动开启这些意图:

intents = ds.Intents.default()
intents.message_content = True  # 开启消息内容读取权限
intents.members = True          # 开启成员相关事件权限
client = ds.Client(intents=intents)

2. 调整on_message事件逻辑

client.process_commands(message)的位置错误,它不应被包裹在if分支内,否则只有当消息内容为"c"时才会处理命令,需要将其移到函数末尾,确保所有消息都能被正常处理:

@client.event
async def on_message(message):
    if message.content == "c":
       await message.channel.send("dasdsada")
    await client.process_commands(message)  # 移至if分支外部

3. 在Discord开发者平台开启特权网关意图

仅代码配置还不够,需要在Discord开发者后台开启对应特权权限:

  • 登录Discord开发者门户,找到你的Bot应用
  • 进入「Bot」页面,下滑到「Privileged Gateway Intents」区域
  • 开启「Server Members Intent」和「Message Content Intent」
  • 保存更改

完整修正代码

import discord as ds
import os
from dotenv import load_dotenv

load_dotenv("token.envella")
DISCORD_TOKEN = os.getenv("DISCORD_TOKEN")

# 配置正确的Intents
intents = ds.Intents.default()
intents.message_content = True
intents.members = True
client = ds.Client(intents=intents)

@client.event
async def on_ready():   
    print(f"{client.user} is Ready")    

@client.event
async def on_message(message):
    if message.content == "c":
       await message.channel.send("dasdsada")
    await client.process_commands(message)

@client.event
async def on_member_join(member):
    await member.create_dm()
    await member.dm_channel.send(
        f'messaggio di benvenuto per {member.name}'
    )

client.run(DISCORD_TOKEN)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:30:34