@yotonick

Как решить? Проблема в коде?

ЧТО ТАКОЕ
import discord
import random
from discord.ext import commands
from config import settings

import sqlite3


bot = commands.Bot(command_prefix = settings['prefix']) # Так как мы указали префикс в settings, обращаемся к словарю с ключом prefix.

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


@bot.event
async def on_ready():
  cursor.execute("""CREATE TABLE IF NOT EXISTS users (
      name TEXT,
      id INT,
      cash BIGINT,
      rep INT,
      lvl INT
    )""")

  for guild in bot.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')


@bot.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

@bot.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]}**"""
      ))  


@bot.command() # Не передаём аргумент pass_context, так как он был нужен в старых версиях.
async def привет(ctx): # Создаём функцию и передаём аргумент ctx.
  author = ctx.message.author # Объявляем переменную author и записываем туда информацию об авторе.

  await ctx.send(f'Привет, {author.mention}!') # Выводим сообщение с упоминанием автора, обращаясь к переменной author.

@bot.command()
async def randoms(ctx, arg): 
    try:  
        a = random.randint(0, int(arg))
    except:
        await ctx.send(f'Ошибка')  
        return
    await ctx.send(f'Ваше случайное число: {a}')


@bot.command()
async def помощь(ctx):  
    embed = discord.Embed(color=0xff9900, title='Меню помощи')  
    embed.add_field(name='Помощь:', value='**Бот находится на стадии разработки.**', inline=True)
    embed.add_field(name='Разработчики:', value='**Моим разработчиком является - Yotonick#8053. **', inline=False)    
    await ctx.send(embed=embed) 

bot.run(settings['token']) # Обращаемся к словарю settings с ключом token, для получения токена

ОШИБКИ ---
Bot connected
Ignoring exception in command balance:
Traceback (most recent call last):
  File "C:\Users\Владислав\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "D:\OneDrive\Рабочий стол\discord bot\bot.py", line 48, in balance
    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\Владислав\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "C:\Users\Владислав\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:\Users\Владислав\AppData\Local\Programs\Python\Python310\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
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 1
@Ykpauneu
Используйте aiosqlite или другую асинхронную библиотеку.
Не надо делать:
cursor.execute("SELECT * FROM table_name WHERE value = {}".format('peepeepoopoo'))

Нужно писать:
cursor.execute("SELECT * FROM table_name WHERE value = ?", ('peepeepoopoo',))


Сама же проблема в том, что бд возвращает None
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект