@persiks

Почему выдает ошибку при вводе команды?

Попробывал сделать баланс пользователя но почему то выдает ошибку. Не могу понять что не так
ошибка:
Ignoring exception in command balance:
Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "c:/Users/user/Desktop/bot/1.py", line 56, in balance
    await ctx.send(embed =  discord.Embed(description = f"""Баланс **{ctx.author}** состовляет **{cursor.execute("SELECT cash FROM users WHERE id ={}".format(ctx.author.id)).fetchone()[0]}**"""
TypeError: 'NoneType' object is not subscriptable

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

Traceback (most recent call last):
  File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: 'NoneType' object is not subscriptable

код:
client = commands.Bot(command_prefix = 'p!', intents = discord.Intents.all()) 
client.remove_command('help')

connection  = sqlite3.connect('discord.db')
cursor  = connection.cursor()

@client.event 
async def on_ready():
    cursor.execute("""CREATE TABLE IF NOT EXISTS  users(name TEXT , id INT , cash BIGINT , rep INT,lvl INT)""")
    connection.commit()
    for guild in client.guilds:
        for member in guild.members:
            if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone is None:
                cursor.execute(f"INSERT INTO users VALUES('{member}',{member.id},0 , 0 , 1)")


            else:
                pass

    connection.commit()
    print("bot connected")
@client.event
async def on_member_join(member):

    if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone is None:
        cursor.execute(f"INSERT INTO users VALUES('{member}',{member.id}, 0, 0, 1)")
        connection.commit()

    else:
        pass


@client.command()
async def balance(ctx ,member: discord.Member = None):  
    if member is None:
        await ctx.send(embed =  discord.Embed(description = f"""Баланс **{ctx.author}** состовляет **{cursor.execute("SELECT cash FROM users WHERE id ={}".format(ctx.author.id)).fetchone()[0]}**"""
        ))
    else:
        await ctx.send(embed =  discord.Embed(description = f"""Баланс **{member}** состовляет **{cursor.execute("SELECT cash FROM users WHERE id ={}".format(member.id)).fetchone()[0]}**"""
        ))

В дискорде нужные галочки поставил
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
@PavelMos
await ctx.send(embed =  discord.Embed(description = f"""Баланс **{ctx.author}** состовляет **{cursor.execute("SELECT cash FROM users WHERE id ={}".format(ctx.author.id)).fetchone()[0]}**"""
TypeError: 'NoneType' object is not subscriptable


Вероятно пытаешься взять элемент из возвращаемого резульатат fetchone, а результат пустой None.
Если так, что надо делать проверку и обработку условия, что делать дальше.
Читай подробнее про работу с SQL на питоне и про то, что функции возвращают
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@da_da_ya_neudachnik
Просто muradixxx :3
Скорее всего, данного пользователя нет в Базе Данных. Поэтому, выводит данную ошибку, попробуйте сделать так:
balance = cursor.execute("SELECT cash FROM users WHERE id={}".format(ctx.author.id)).fetchone()
member = ctx.author.id if member==None else member.id
if balance[0] is None:
  await ctx.send("Пользователя не существует в Базе данных.")
else:
  # код, если пользователь существует


Если ошибка не пропадет - отпишите в комментарии, попробуем разобраться.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы