(discord.py ) бот не имеет ошибки атрибута при попытке вызвать пользовательскую функцию

#python #discord.py

#python #discord.py

Вопрос:

Я хочу добавить систему экономии к моему боту discord, написанному на python. Я следовал этому руководству на YouTube и внедрил его в свой код. Вот как это выглядит:

 from discord.ext import commands

import json
import os

class Eco(commands.Cog):
  def __init__(self, client):
    self.client = client

  #function to get bank data
  async def getbankdata(self):

    with open("bank.json", "r") as f:
      users = json.load(f)

    return users
  
  #function to open a new account for a user if they don't have one
  async def open_account(self, user):

    users = await self.client.getbankdata(self)

    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("bank.json", "w") as f:
      json.dump(users, f)
      
    return True

  #check balance command
  @commands.command()
  async def bal(self, ctx):

    user = ctx.author
    await self.open_account(user)
    users = await self.getbankdata()

    walletamt = users[str(user.id)]["wallet"]
    bankamt = users[str(user.id)]["bank"]

    await ctx.send(f'Wallet: {walletamt}, Bank: {bankamt}')

def setup(client):
  client.add_cog(Eco(client))
 

В учебном пособии весь код был написан в main.py файл, где здесь я записал весь код в файл cog, поэтому мне пришлось немного подправить функции. Когда я пытаюсь запустить bal команду, я получаю сообщение об ошибке 'Bot' object has no attribute 'getbankdata' . Кажется, я не могу найти источник ошибки. Кто-нибудь может мне помочь? Я также был бы признателен за любые другие исправления в моем коде, которые могут вызвать ошибку.

Ответ №1:

Ошибка в open_account методе. Это не self.client.getbankdata так, это self.getbankdata

 async def open_account(self, user):
    users = self.getbankdata()
    # ...
 

Комментарии:

1. я исправил код, и теперь он работает… когда я пробовал это раньше, он сказал, что getbankdata не определено. Спасибо.

2. Не беспокойтесь, не забудьте принять ответ, если это помогло

3. Это не определено, так как ваша команда баланса находится после функции открытия счета, попробуйте указать ее в getbankdata и open_account