Discord Py PartnerBot伙伴请求确认功能报错修复求助
修复Discord伙伴请求机器人的ReactConfirm响应问题
从你给出的错误日志来看,问题出在两个关键地方:ReactConfirm初始化时的实例引用错误,以及超时处理时的message.edit调用格式不对。下面是具体的修复方案:
错误1:bot变量引用错误
你的代码里初始化ReactConfirm时用了bot=bot,但从@client.command()和client.get_channel这些调用能看出来,你的客户端实例是client。discord.ext.commands.Bot类的实例才拥有wait_for方法,这里你应该传入正确的client实例,而不是未定义的bot变量——这正是第一个AttributeError的根源。
错误2:message.edit()参数格式错误
在discord.ext.forms的reactions.py中,超时处理代码直接调用了message.edit("Timeout!"),但Discord.py的Message.edit()方法要求用关键字参数指定内容,正确写法是message.edit(content="Timeout!")。这个问题属于依赖库适配性问题,需要我们手动修正。
完整修复后的代码
@client.command() async def partner(ctx): form = Form(ctx, "Partnership Request") form.add_question( "What's the invite link to your server?", "invitelink", "invite" ) form.add_question( "What's a description of your server?", "description" ) form.add_question( "What's your server's advertisement?", "advertisement" ) results = await form.start() embed = discord.Embed( title=f"Partnership Request from {results.invitelink.guild.name}", description=f"**Description:** {results.description}", ) embed.set_thumbnail(url=results.invitelink.guild.icon_url) embed.set_author(name=ctx.author, icon_url=ctx.author.avatar_url) partnershipreq = client.get_channel(843569943807393816) prompt = await partnershipreq.send(embed=embed) # 修复点1:传入正确的客户端实例client confirm = ReactConfirm(message=prompt, bot=client, user=ctx.message.author) accepted = await confirm.start() if accepted: partners = client.get_channel(843569943807393815) em = discord.Embed(title=results.invitelink.guild.name, description=results.advertisement, color=0x2F3136) em.set_author(name=ctx.author, icon_url=ctx.author.avatar_url) em.set_thumbnail(url=results.invitelink.guild.icon_url) await partners.send(embed=em)
额外处理:修正第三方库的message.edit调用
如果上面的修改后仍出现TypeError,需要手动调整discord.ext.forms库的代码:
- 找到路径:
C:\Users\MCPEG\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\forms\reactions.py - 定位到第100行左右的
return await message.edit("Timeout!") - 修改为:
return await message.edit(content="Timeout!")
修复逻辑说明
- 传入正确的
client实例给ReactConfirm,确保它能调用wait_for方法监听反应事件 - 修正
message.edit的调用格式,符合Discord.py的API规范,避免参数不匹配的错误
内容的提问来源于stack exchange,提问作者LopeKinz
相关产品推荐
相关产品推荐

