TypeError: Message 类型的对象不是 JSON 可序列化的 |不和谐.py
Posted
技术标签:
【中文标题】TypeError: Message 类型的对象不是 JSON 可序列化的 |不和谐.py【英文标题】:TypeError: Object of type Message is not JSON serializable | discord.py 【发布时间】:2021-10-16 10:54:27 【问题描述】:我正在为我的 discord 机器人创建 autovc 命令,但遇到了一些错误。 代码:
@client.command()
async def autovc(ctx):
def check(message):
return message.author == ctx.author
await ctx.send("Please enter the channel name you want to create?")
c_name= await client.wait_for('message', check=check)
await ctx.send("What would be the channel user limit?")
c_limit= int((await client.wait_for('message', check=check)).content)
await ctx.send("Please Enter the Category ID in which tha channel will be created.")
guild = client.get_guild(852866665371926588)
ctg= discord.utils.get(guild.categories, id=(int((await client.wait_for('message', check=check)).content)))
await guild.create_voice_channel(name= c_name, category= ctg, user_limit= c_limit)
错误:
文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py", 第 85 行,包裹 ret = await coro(*args, **kwargs) 文件“d:\BOT\test.py”,第 30 行,在 autovc 中 await guild.create_voice_channel(name= c_name, category= ctg, user_limit= c_limit)
文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\guild.py", 第 987 行,在 create_voice_channel 中 data = await self.create_channel(name, overwrites, ChannelType.voice, category, reason=reason, **options) 文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\http.py", 第 156 行,应要求提供 kwargs['data'] = utils.to_json(kwargs.pop('json')) 文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\utils.py ", 第 328 行,在 to_json 中 返回 json.dumps(obj, separators=(',', ':'), ensure_ascii=True) 文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\json_init.py", 第 234 行,在转储中 返回 cls( 文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", 第 199 行,在编码中 chunks = self.iterencode(o, _one_shot=True) 文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", 第 257 行,在 iterencode 中 return _iterencode(o, 0) 文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\json\encoder.py", 第 179 行,默认 raise TypeError(f'Object of type o.class.name '
TypeError: Message 类型的对象不是 JSON 可序列化的
上述异常是以下异常的直接原因:
Traceback(最近一次调用最后一次):文件 "C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\bot.py", 第 939 行,调用中 等待 ctx.command.invoke(ctx) 文件“C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py”, 第 863 行,在调用中 等待注入(*ctx.args,**ctx.kwargs)文件“C:\Users\illus\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\ext\commands\core.py”, 第 94 行,包裹 从 exc discord.ext.commands.errors.CommandInvokeError 引发 CommandInvokeError(exc):命令引发 异常:TypeError:Message 类型的对象不是 JSON 可序列化的
【问题讨论】:
初始异常的回溯是什么? 更新了!我会把整个终端输出放在那里。 我建议直接使用命令输入所需的参数(频道名称、类别 ID、用户限制),如下所示:async def autovc(ctx, c_name: str, c_categid: int, c_limit: int):
【参考方案1】:
我认为这是因为您尝试使用 message
对象而不是 string
命名您的 vc。不要将c_name
设置为name
参数,而是尝试使用c_name.content
,这样您就可以获得消息的实际内容。像这样:
await guild.create_voice_channel(name=c_name.content, category=ctg, user_limit=c_limit)
我还没有测试过,但我很确定这是问题所在。
【讨论】:
以上是关于TypeError: Message 类型的对象不是 JSON 可序列化的 |不和谐.py的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:预期的 float32,得到的列表包含类型为“_Message”的张量
Tensorflow Slim:TypeError:预期 int32,得到的列表包含类型为“_Message”的张量