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
相关产品推荐
相关产品推荐

