Не удается выдать варн
Пытаюсь сделать команду !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-строками ;)