Discord.py中startswith匹配正确短语失效问题求助
问题原因与解决方案
核心问题
你遇到的情况是因为Discord.py v2.0及以上版本要求必须显式启用message_content Intent才能读取用户发送的消息内容,而你当前代码里的discord.Intents.default()并不包含这个权限。机器人自身发送的消息不受此限制,所以能正常触发匹配逻辑。
解决步骤
开启开发者后台的消息内容权限
登录Discord开发者门户,找到你的机器人应用,进入"Bot"页面,在"Privileged Gateway Intents"区域,开启"Message Content Intent"开关。修改代码中的Intents配置
更新代码,在初始化Intents时添加message_content=True:import discord # 初始化包含message_content的Intents intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print('Roger victim. I m in as {0.user}'.format(client)) @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith('Hello'): await message.channel.send('Hola !') else: await message.channel.send('no, Hello') client.run('token value')
补充说明
- 机器人自身的消息能触发匹配,是因为Discord允许机器人读取自己发送的消息内容,不需要额外的
message_content权限,所以测试代码里机器人自发送的"Hello"能正常触发startswith判断。 - 你之前尝试替换匹配字符为'.'或'/'无效,本质还是因为无法读取用户消息的内容,所以所有基于
message.content的判断都无法生效。
内容的提问来源于stack exchange,提问作者Anirudh Agrawal
相关产品推荐
相关产品推荐

