Python开发Discord Bot遇TypeError:'str'对象不可调用求助
问题解决步骤
1. 修复message.content()的调用错误
message.content是字符串属性,不是可调用方法,因此要去掉后面的括号,改为message.content——这是触发TypeError的直接原因。
2. 合并重复的on_message事件
你定义了两个@client.event装饰的on_message函数,discord.py只会执行最后一个,导致第一个函数里的消息打印逻辑失效。必须把两个函数的逻辑合并到同一个on_message中。
修改后的bot.py代码
import discord import responses async def send_message(message, user_message, is_private): try: response = responses.get_response(user_message) await message.author.send(response) if is_private else await message.channel.send(response) except Exception as e: print(e) def run_discord_bot(): TOKEN = '(token)' intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print(f'{client.user} is now running!') @client.event async def on_message(message): # 忽略机器人自身发送的消息 if message.author == client.user: return username = str(message.author) user_message = str(message.content) channel = str(message.channel) print(f'{username} said: "{user_message}" ({channel})') # 处理^help命令,替换为你的命令列表文本 if "^help" in user_message: help_content = """ 可用命令列表: ^help - 查看帮助信息 """ await message.channel.send(help_content) client.run(TOKEN)
额外提示
- 若需要用
send_message函数处理其他命令,可在on_message中添加前缀判断逻辑后调用该函数。 - 确保
responses.py文件存在且get_response函数可正常运行,避免影响其他消息处理流程。
内容的提问来源于stack exchange,提问作者Filippvas
相关产品推荐
相关产品推荐

