属性错误:'str'对象没有属性'content'



我能够将我自己的Discord机器人代码和一个通过用户输入将数据写入Google Sheets的代码进行某种程度的合并。然而,当我尝试引入一个经济体系时,我总是出错。应该发生的是,当有人输入以下命令时:

!bet result[0],result[1],result[2]

我会取结果[2]的值,并将其扣除到他们的货币中,在我的情况下,是代币。我是这样写的:

@client.command()
async def bet(ctx,message):
await open_account(ctx.author)
users = await token_data()
user = ctx.author
if message.content.startswith('!b '):
msg = message.content[3:]
result = [x.strip() for x in msg.split(',')]
SPREADSHEET_ID = 'Sheet ID here'
RANGE_NAME = result[0]+'!A2'
FIELDS = 3
token_bet = int(result[2])

if len(result) == FIELDS:
print(message.created_at)
DATA = [ctx.author.name] + [str(ctx.author.id)] + [str(message.created_at)] + result
sheet.add(SPREADSHEET_ID, RANGE_NAME, DATA)
await message.channel.send('Thank you! Your bet has been placed :)')

else:
await message.channel.send('Error: Please try again!'.format(FIELDS,FIELDS-1))
users[str(user.id)]["token"] -= token_bet

问题是,每当我尝试执行命令时,它都会给我这个错误:

AttributeError: 'str' object has no attribute 'content'

有什么原因吗?任何帮助都将不胜感激。

我认为您从使用on_message的地方复制了代码,并将其放入命令中。在on_message中,message是一个Message对象,因此要获得内容,您必须使用message.content,但在命令中,您只需要获得原始字符串。我建议将您的命令def修改为:

async def bet(ctx, *, message):

这将确保将整个消息内容传递给您的命令。然后用message替换命令中message.content的所有实例

编辑:此外,如果您有类似message.channel.send的内容,则需要将其更改为ctx.send,以便向上下文发送消息

如果您对有任何进一步的问题,我建议您查看命令文档

显然没有为message定义类。如果您的变量是字符串输入的一部分(我假设是这样(,则需要将此字符串声明为(已给定或自行编写的(类对象的实例,该类对象继承属性content

不幸的是,鉴于这段代码,没有办法给你进一步的建议!

最新更新