对象没有属性“to_components”

问题描述 投票:0回答:1

我正在尝试用Python为我的Discord Bot制作一个二十一点命令,我正在编写小代码并一点一点地测试和改进,见下文:

import discord
from discord.ext import commands
from discord import app_commands
import random, json, datetime
class bj(discord.ui.Button):
   def __init__(self, game ,gamesum, player_cards):
     super().__init__()
     self.value = None
     @discord.ui.button (label="Hit", style=discord.ButtonStyle.blurple)
     async def confirm(self, button: discord.ui.Button, interaction: discord. Interaction):
       self.value = True
       self.stop()
       value_1=["A", 1,2,3,4,5,6,7,8,9,10,"J","Q","K",]
       nype_1=["♦️","♠️","♥️","♣️"]
       card_value_3 = random.randint(0, len(value_1) - 1)
       nype_card_3 = random.randint(0, len(nype_1) - 1)
       card_3 = f"{card_value_3[card_value_3]} {card_value_3[nype_card_3]}"
       await match.edit()
       match.edit_field(name='Your hand', value=f"{player_cards} {card_value_3}{nype_card_3}")
       if type(card_value_3)==str:
         if value_card_3=="A":
           value_letter_3=11
         else:
           value_letter_3=10
       else:
         value_letter_3=value_card_3
class client(discord.Client):
     def __init__(self):
         super().__init__(intents=discord.Intents.default())
         self.synced = False
     async def setup_hook(self) -> None:
       self.add_view(DropdownView())
     async def on_ready(self):
       await aclient.change_presence(activity = discord.Streaming(name = "/news", url = "https://www.youtube.com/watch?v=dQw4w9WgXcQ"))
       await self.wait_until_ready()
       if not self.synced:
           await tree.sync()
           self.synced = True
       print(f"We entered as {self.user}!")
       print(f"That has the ID {self.user.id}")
client = client()
tree = app_commands.CommandTree(aclient)
@tree.command(name='blackjack', description='Play a game of blackjack')
async def blackjack(interaction: discord.Interaction, amount:int):
   await open_account(interaction.user)
   money = await add_money(interaction.user)
   if amount>money[0]:
     await interaction.response.send_message(f"You don't have all this amount {interaction.user.mention}.")
   else:
     if quantity<0:
       await interaction.response.send_message(f"You must enter a positive value")
     else:
       value_1=["A",2,3,4,5,6,7,8,9,10,'J','Q',"K"]
       nype_1=["♦️","♠️","♥️","♣️"]      
       value_card_a = random.randint(0, len(value_1) - 1)
       nype_card_a = random.randint(0, len(nype_1) - 1)
       letter_a = f"{value_1[value_card_a]}{nype_1[nype_letter_a]}"
       b_card_value = random.randint(0, len(1_value) - 1)
       nype_card_b = random.randint(0, len(nype_1) - 1)
       letter_b = f"{value_1[value_card_b]}{nype_1[nype_letter_a]}"
       player_cards = f"{card_a} {card_b}"
       if type(value_card_a)==str:
         if value_card_a=="A":
           value_letter_a=11
         else:
           value_letter_a=10
       else:
         value_card_a=value_card_a
       if type(value_card_b)==str:
         if value_card_b=="A":
           value_letter_b=11
         else:
           value_letter_b=10
       else:
         value_card_b=value_card_b
       sum_of_game=value_card_a+value_card_b
       await add_money(interaction.user, -1*amount)
       if sum_of_game==21:
         result='Blackjack'
         titulo_resultado=f'You won ~~K~~ {1.5*amount}'
       else:
         result=sum_of_game
         titulo_resultado=f'You invested ~~K~~ {amount} in this blackjack'
       departure=discord.Embed(
         description=f'{result_title}',
         colour=discord.Color.random()
       )
       match.add_field(name='Your hand', value=f"{player_cards}\n{result}")
       if result=='Blackjack':
         await add_money(interaction.user, 1.5*amount)
       await interaction.response.send_message(embed=game, view=bj(game ,gamesum, player_cards))  
async def open_account(user):
   users = await bank_data()
   if str(user.id) in users:
     return False
   else:
     users[str(user.id)] = {}
     users[str(user.id)]['wallet'] = 0
     users[str(user.id)]['bank']= 0
   with open("money.json", "w") as f:
     json.dump(users, f)
   return true
async def bank_data():
   with open("money.json", "r") as f:
     users = json.load(f)
   return users
async def add_money(user, change=0, mode = "wallet"):
   users = await bank_data()
   users[str(user.id)][mode] +=change
   with open("money.json", "w") as f:
     json.dump(users, f)
   money = [users[str(user.id)]["wallet"], users[str(user.id)]["bank"]]
   return money
aclient.run(Token)

但是在

await interaction.response.send_message(embed=match, view=bj(match ,game_sum, player_cards))
中报告错误

2023-02-06 19:14:31 ERROR    discord.app_commands.tree Ignoring exception in command 'blackjack'
Traceback (most recent call last):
  File "/home/runner/Kllin/venv/lib/python3.10/site-packages/discord/app_commands/commands.py", line 862, in _do_call
    return await self._callback(interaction, **params)  # type: ignore
  File "main.py", line 1155, in blackjack
    await interaction.response.send_message(embed=partida, view=bj(partida ,soma_de_jogo, cartas_jogador))
  File "/home/runner/Kllin/venv/lib/python3.10/site-packages/discord/interactions.py", line 754, in send_message
    params = interaction_message_response_params(
  File "/home/runner/Kllin/venv/lib/python3.10/site-packages/discord/webhook/async_.py", line 577, in interaction_message_response_params
    data['components'] = view.to_components()
AttributeError: 'bj' object has no attribute 'to_components'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/runner/Kllin/venv/lib/python3.10/site-packages/discord/app_commands/tree.py", line 1242, in _call
    await command._invoke_with_namespace(interaction, namespace)
  File "/home/runner/Kllin/venv/lib/python3.10/site-packages/discord/app_commands/commands.py", line 887, in _invoke_with_namespace
    return await self._do_call(interaction, transformed_values)
  File "/home/runner/Kllin/venv/lib/python3.10/site-packages/discord/app_commands/commands.py", line 880, in _do_call
    raise CommandInvokeError(self, e) from e
discord.app_commands.errors.CommandInvokeError: Command 'blackjack' raised an exception: AttributeError: 'bj' object has no attribute 'to_components'

我试图解释这个错误,因为我最近开始编程,它没有多大帮助,我在ChatGPT中询问,它也没有多大帮助(错误甚至没有改变),所以人工智能本身建议我来这里问,我希望它能帮助我(哦,很抱歉没有把所有的东西都组织起来并很好地分开,他们说有很多代码和很少的信息)。

discord discord.py blackjack discord-buttons
1个回答
0
投票

在您看来,按钮的回调应该按以下顺序包含参数:

async def confirm(self, interaction:discord.Interaction, button:discord.ui.Button):
    ... # other code here

请告诉我这是否解决了错误。

© www.soinside.com 2019 - 2024. All rights reserved.