如何修复Discord Python机器人踢人命令的TypeError错误
修复Discord Python机器人踢人命令的TypeError错误
你遇到的这个错误很明确——TypeError: Can't convert 'list' object to str implicitly,问题出在消息拼接的环节,让我给你拆解原因和修复方法:
问题根源
当你执行messageParsed = message.content.split()后,messageParsed[2:]会返回一个列表,里面装着命令里所有的理由单词。而你直接把这个列表和前面的格式化字符串拼接时,Python没法自动把列表转换成字符串,所以抛出了这个类型错误。
修复方法
你需要把这个列表转换成完整的字符串,用' '.join(msg)就能实现——它会把列表里的每个元素用空格连接起来,变成通顺的理由文本。
修改后的核心代码
把发送通知消息的那行代码改成下面这样(用格式化字符串更清晰):
await client.send_message( discord.Object(id=serverchannel), '{0} was kicked by {1}, with reason:"**{2}**"'.format( member.mention, message.author.mention, ' '.join(msg) ) )
如果你偏好原来的拼接写法,也可以这样调整:
await client.send_message( discord.Object(id=serverchannel), '{0} was kicked by {1}, with reason:"**'.format(member.mention, message.author.mention) + ' '.join(msg) + '**"' )
额外优化提示
建议你加个判断逻辑:如果用户没输入理由,msg会是空列表,' '.join(msg)会返回空字符串,这时可以给个默认理由,让通知更友好:
reason = ' '.join(msg) if msg else 'No reason provided' await client.send_message( discord.Object(id=serverchannel), '{0} was kicked by {1}, with reason:"**{2}**"'.format( member.mention, message.author.mention, reason ) )
内容的提问来源于stack exchange,提问作者SpaRk_PWM
相关产品推荐
相关产品推荐

