在不和机器人上使用Nextcord编辑一个按钮不止一次



所以,我使用Nextcord来制作一个Discord bot。我有一些按钮,我想编辑样式不止一次。首先,我尝试了interaction.response.edit_message(),它一次工作得很好,但第二次,它给了我这个错误:

nextcord.errors。interactionresponses:这个交互在

之前已经被响应过了我知道我不能使用交互。回应不止一次,所以我知道我必须要有创意。有人建议我使用interaction.edit()或interaction.message.edit()。interaction.message.edit()即使我只执行一次,也会给我这个错误:

Ignoring exception in view <ChoicesView timeout=180.0 children=9> for item <ChoicesBtn style=<ButtonStyle.success: 3> url=None disabled=False label='Party' emoji=None row=0>:
Traceback (most recent call last):
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/ui/view.py", line 371, in _scheduled_task
await item.callback(interaction)
File "main.py", line 45, in callback
await interaction.message.edit(view=self.view)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/message.py", line 1367, in edit
data = await self._state.http.edit_message(self.channel.id, self.id, **payload)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/http.py", line 333, in request
raise NotFound(response, data)
nextcord.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message

如果我使用interaction.edit(),它工作一次,但如果我做两次,我得到一个非常类似的错误。

Ignoring exception in view <ChoicesView timeout=180.0 children=9> for item <ChoicesBtn style=<ButtonStyle.secondary: 2> url=None disabled=False label='Birth' emoji=None row=2>:
Traceback (most recent call last):
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/ui/view.py", line 371, in _scheduled_task
await item.callback(interaction)
File "main.py", line 46, in callback
await interaction.edit(view=self.view)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/interactions.py", line 551, in edit
return await self.message.edit(*args, **kwargs)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/message.py", line 1367, in edit
data = await self._state.http.edit_message(self.channel.id, self.id, **payload)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/http.py", line 333, in request
raise NotFound(response, data)
nextcord.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message

我试图手动更改交互的状态。_responses属性为False,但是我得到了这个错误

Ignoring exception in view <ChoicesView timeout=180.0 children=9> for item <ChoicesBtn style=<ButtonStyle.success: 3> url=None disabled=False label='Party' emoji=None row=0>:
Traceback (most recent call last):
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/ui/view.py", line 371, in _scheduled_task
await item.callback(interaction)
File "main.py", line 47, in callback
await interaction.edit(view=self.view)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/interactions.py", line 549, in edit
return await self.response.edit_message(*args, **kwargs)
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/interactions.py", line 959, in edit_message
await adapter.create_interaction_response(
File "/home/runner/Raids-Master-buttons-labels/venv/lib/python3.8/site-packages/nextcord/webhook/async_.py", line 191, in request
raise HTTPException(response, data)
nextcord.errors.HTTPException: 400 Bad Request (error code: 40060): Interaction has already been acknowledged.

我不知道之后该怎么做,我试着在GitHub上阅读交互定义,但我承认这对我来说太过分了……我没有分享代码,但我所做的只是在一个自定义类上重新定义回调方法基于nextcord。ui。button

我知道这很多,但我已经尽力给你尽可能多的信息了。感谢您抽出时间,如果我对某些事情不够清楚,请告诉我!!

当您将button参数传递给代码时,您可以使用按钮。属性来更改按钮样式。你也可以使用按钮。标签来改变标签上的文本。

变成绿色并显示Hi!当你点击它:

import nextcord
from nextcord.ext import commands

# Define a simple View that gives us a counter button
class HelloButtons(nextcord.ui.View):

@nextcord.ui.button(label="Press me!", style=nextcord.ButtonStyle.red)
async def sayhi(self, button: nextcord.ui.Button, interaction: nextcord.Interaction):
button.style = nextcord.ButtonStyle.green
button.label="Thanks for pressing me!"

await interaction.response.edit_message(view=self)

bot = commands.Bot()

@bot.slash_command()
async def counter(interaction):
await interaction.send("Press the button!", view=HelloButtons())

bot.run("token")

相关内容

最新更新