discord.py + PostgreSQL | 'NoneType' object is not iterable
Создал команду для бота в дискорде, которая показывает магазин ролей. До этого роли были добавлены в магазин (в нашу базу данных) и проблем не возникло. Собственно, проблема возникла при выводе этих ролей из базы данных при использовании команды shop.
@client.event
async def on_ready():
cur.execute("""CREATE TABLE IF NOT EXISTS shop(
role_id BIGINT,
id BIGINT NOT NULL,
cost BIGINT
)""") # Создаем базу данных магазина
# Shop | Магазин
@client.command(aliases = ['shop', 'магазин'])
async def __shop(ctx):
embed = discord.Embed(title = 'Магазин ролей')
query = cur.execute(f"SELECT role_id, cost FROM shop WHERE id = {ctx.guild.id}")
for row in query: # Ошибка указывает на эту строчку (149), скорее всего что-то не так строчкой выше
if ctx.guild.get_role(row[0]) != None:
embed.add_field(
name = f"Стоимость **{row[1]}** :small_red_triangle_down:",
value = f"Роль {ctx.guild.get_role(row[0]).mention}",
inline = False
)
else:
pass
await ctx.send(embed = embed)
File "C:\Users\Михаил\Desktop\боты\Хидэко\bot.py", line 149, in __shop
for row in query:
TypeError: 'NoneType' object is not iterable
Вот команда, которая заносит данные вы базу данных
# Add Shop | Добавить в Магазин
@client.command(aliases = ['addshop', 'add-shop', 'добавитьмагазин'])
@has_permissions(administrator = True)
async def __add_shop(ctx, role: discord.Role = None, cost: int = None):
if role is None:
await ctx.send(f'**{ctx.author}**, не указана добавляемая роль | d!addshop role cost')
else:
if cost is None:
await ctx.send(f'**{ctx.author}**, не указана стоимость роли | d!addshop role cost')
elif cost <0:
await ctx.send(f'**{ctx.author}**, стоимость роли не может быть отрицательной')
else:
cur.execute("INSERT INTO shop VALUES ({}, {}, {})".format(role.id, ctx.guild.id, cost)) # Добавить в базу данных айди роли, айди сервера и стоимость
con.commit()
await ctx.message.add_reaction('✅') # Добавление реакции