"This interaction failed" : discord.py 按钮



所以目前我试图编程一个计算器,但我遇到了一个障碍。嗯,我看了一个教程由glowstick如何使计算器不和谐的机器人,但似乎他的代码不再工作了。所以,谁能建议我对代码做出改变,使机器人工作?提前感谢。下面是代码:

import discord
import os
from discord.ext import commands, tasks
from online import keep_alive
from discord_slash import SlashCommand
from itertools import cycle
from discord_components import *
import datetime
client = commands.Bot(command_prefix="!")
slash = SlashCommand(client, sync_commands=True)
status = cycle([
" Unanswered Question of Life", " Self - Referential Paradox",
" Near-infinite density?", " Dark matter ?",
" Measurement of the speed of light in one straight line",
" Schrodinger's cat ???",
"The light side of Discord is the path of many unnatural abilities"
])

@client.event
async def on_ready():
print("I have logged in as {0.user}".format(client))
status_swap.start()
DiscordComponents(client)

buttons = [[
Button(style=ButtonStyle.grey, label='1'),
Button(style=ButtonStyle.grey, label='2'),
Button(style=ButtonStyle.grey, label='3'),
Button(style=ButtonStyle.blue, label='+'),
Button(style=ButtonStyle.red, label='Clear')
],
[
Button(style=ButtonStyle.grey, label='4'),
Button(style=ButtonStyle.grey, label='5'),
Button(style=ButtonStyle.grey, label='6'),
Button(style=ButtonStyle.blue, label='-'),
Button(style=ButtonStyle.red, label='Exit')
],
[
Button(style=ButtonStyle.grey, label='7'),
Button(style=ButtonStyle.grey, label='8'),
Button(style=ButtonStyle.grey, label='9'),
Button(style=ButtonStyle.blue, label='×'),
Button(style=ButtonStyle.red, label='←')
],
[
Button(style=ButtonStyle.grey, label='00'),
Button(style=ButtonStyle.grey, label='0'),
Button(style=ButtonStyle.grey, label='.'),
Button(style=ButtonStyle.blue, label='÷'),
Button(style=ButtonStyle.red, label='=')
]]

def calculator(exp):
o = exp.replace('×', '*')
o = o.replace('÷', '/')
result = " "
try:
result = str(eval(o))
except:
result = "An error occurs"
return result

@client.command()
async def operator(ctx):
m = await ctx.send(content="Loading calculator")
expression = "None"
delta = datetime.datetime.utcnow() + datetime.timedelta(minutes = 5)
e = discord.Embed(title="Basic Operation Calculator",description=expression)
await m.edit(components=buttons, embed=e)
while True :
res = await client.wait_for("button click")
while m.created_at < delta :
if res.author.id == int(res.message.embeds[0].title.split("|")[1]) and res.message.embeds[0].timestamp < delta:
expression = res.message.embeds[0].description
if expression == "None" or expression == 'An error occurs':
expression = ''
elif res.component.label == 'Exit':
await res.respond(content='Calculator Closed. Thanks for using Basic Operation Calculator.',type=7)
break
elif res.component.label == "←":
expression = expression[:-1]
elif res.component.label == 'Clear':
expression = None
elif res.component.label == '=':
expression += calculator(expression)
else:
expression = res.component.label
f = discord.Embed(title='Basic Operation Calculator',description=expression)
await res.respond(content='', embed = f, component=buttons, type=7)
@ tasks.loop(minutes=5)
async def status_swap():
await client.change_presence(activity=discord.Game(next(status)))

keep_alive()
client.run(os.getenv('MATH_VAR'))

这段代码看起来像是取自https://www.youtube.com/watch?v=3BGcgSm9sv0碰巧我也用过。

你的问题源于你的嵌入标题,因为它是基于你的标题有一个'|'后面跟着用户的ID。尝试将嵌入标题从"Basic Operation Calculator"更改为f"{ctx.message.author}'s calculator|{ctx.message.author.id}",并告诉我是否有效。我稍微修改了一下我使用的代码,所以这可能是错误的,我要用内存了。如果这样做的工作,也尝试f"Basic Operation Calculator|{ctx.message.author.id}",如果你想保持你的标题名称。

这是不需要的,但如果您还想在'|'后面添加一段文本,则需要将split语句更改为if res.author.id == int(res.message.embeds[0].title.split("|")[1]) and res.message.embeds[0].timestamp < delta:

到'|'和后面的任何文本(不是ID)。如果我想添加"ID: "之后,分割语句将是"| ID: "。抱歉,如果这听起来令人困惑,这段代码的工作方式是非常具体的,我对Stack Overflow非常陌生。如果你遇到任何错误或有任何问题,请告诉我。如果没有其他的工作,我很高兴给你发送我目前的代码,我正在使用,因为它只是稍微修改。下次你发问题的时候,尽量把你的问题写得具体一点。

最新更新