Не удается выдать варн

Пытаюсь сделать команду !warn, при 3-ех варнах юзера должно банить на сервере, но при вводе команды выдает ошибку. Помогите исправить) Код:

@bot.command()
async def warn(ctx, member: discord.Member, *, reason):
    name = message.guild.name
    channel = bot.get_channel(876507449362898974)
    emb = discord.Embed(color=discord.Colour.from_rgb(225, 225, 0))
    emb.add_field(name="✅ Warned", value='Пользователю {} был выдан варн (1/3)!'.format(member.mention)) 
    emb.add_field(name="Администратор", value = ctx.message.author.mention, inline = False)
    emb2 = discord.Embed(color=discord.Colour.from_rgb(225, 225, 0))
    emb2.add_field(name="✅ Warned", value='Пользователю {} был выдан варн (2/3)!'.format(member.mention))
    emb2.add_field(name="Администратор", value = ctx.message.author.mention, inline = False)
    emb3 = discord.Embed(color=discord.Colour.from_rgb(225, 225, 0))
    emb3.add_field(name="✅ Warned", value='Пользователю {} был выдан варн (3/3)!'.format(member.mention))
    emb3.add_field(name="Администратор", value = ctx.message.author.mention, inline = False)
    base.execute('CREATE TABLE IF NOT EXISTS {}(userid INT, count INT)'.format(name))
    base.commit()
    warning = cur.execute('SELECT * FROM {} WHERE userid == ?'.format(name), (message.author.id,)).fetchone()

    if warning is None:
        cur.execute('INSERT INTO {} VALUES(?, ?)'.format(name), (message.author.id,1))
        base.commit()
        await channel.send(embed = emb)
        
    elif warning[1] == 1:
        cur.execute('UPDATE {} SET count == ? WHERE userid == ?'.format(name), (2,message.author.id))
        base.commit()
        await channel.send(embed = emb2)
        
    elif warning[1] == 2:
        cur.execute('UPDATE {} SET count == ? WHERE userid == ?'.format(name), (3,message.author.id))
        base.commit()
        await channel.send(embed = emb3)
        await member.ban(reason = reason)

Ошибка:

Traceback (most recent call last):
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/discord/ext/commands/core.py", line 85, in wrapped
    ret = await coro(*args, **kwargs)
  File "/storage/emulated/0/botdisc/bot/botrun.py", line 111, in warn
    name = message.guild.name
NameError: name 'message' is not defined

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

Traceback (most recent call last):
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/discord/ext/commands/bot.py", line 939, in invoke
    await ctx.command.invoke(ctx)
  File "/data/data/com.termux/files/usr/lib/python3.9/site-packages/discord/ext/commands/core.py", line 863, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "/data/data/com.termux/files/usr/lib/python3.9/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: NameError: name 'message' is not defined```

Ответы (1 шт):

Автор решения: zrx

Ошибка заключается в том, что name на второй строчке должен быть равен ctx.guild.name, а не message.guild.name.

У Вас небольшая путаница в запросах к БД возникла, поэтому вот пример рабочего кода:

@bot.command()
async def warn(ctx, member:discord.Member, *, reason):
    guild_name = ctx.guild.name
    channel = ctx.guild.get_channel(876507449362898974)

    embed1 = discord.Embed(color=discord.Colour.from_rgb(225, 225, 0))
    embed1.add_field(name="✅ Warned", value=f'Пользователю {member.mention} был выдан варн (1/3)!') 
    embed1.add_field(name="Администратор", value=ctx.author.mention, inline=False)

    embed2 = discord.Embed(color=discord.Colour.from_rgb(225, 225, 0))
    embed2.add_field(name="✅ Warned", value=f'Пользователю {member.mention} был выдан варн (2/3)!')
    embed2.add_field(name="Администратор", value=ctx.author.mention, inline = False)

    embed3 = discord.Embed(color=discord.Colour.from_rgb(225, 225, 0))
    embed3.add_field(name="✅ Warned", value=f'Пользователю {member.mention} был выдан варн (3/3)!')
    embed3.add_field(name="Администратор", value=ctx.author.mention, inline=False)

    base.execute(f'CREATE TABLE IF NOT EXISTS name (userid INT, count INT)')
    base.commit()

    warning = cur.execute(f'SELECT * FROM {name} WHERE userid={member.id}').fetchone()

    if warning is None:
        cur.execute(f'INSERT INTO {name} VALUES ({member.id}, 1)')
        base.commit()
        await channel.send(embed=embed1)
        
    elif warning[1] == 1:
        cur.execute(f'UPDATE {name} SET count=2 WHERE userid={member.id)}')
        base.commit()
        await channel.send(embed=embed2)
        
    elif warning[1] == 2:
        cur.execute(f'UPDATE {name} SET count=3 WHERE userid={member.id}')
        base.commit()
        await channel.send(embed=embed3)
        await member.ban(reason=reason)

P.S. Пользуйтесь f-строками ;)

→ Ссылка