#python #discord.py
Вопрос:
Итак, я создаю команду запрета, это код, первые 3 оператора if работают нормально, но когда дело доходит до проверки роли участников, а затем фактического запрета их, это не сработает.
async def ban (ctx, member:discord.User=None, *, reason=None):
channel = ctx.channel
if member == None or member == ctx.message.author:
embed = discord.Embed(title="Ban", description=f"Ban a member from the discord.", colour=discord.Colour.purple())
await ctx.send(embed=embed)
return
if ctx.author.guild_permissions.ban_members == False:
embed4=discord.Embed(color=discord.Colour.purple(),
timestamp=datetime.datetime.utcnow(), title="Missing Permissions!", description="You don't have the required permissions to use this command!")
await ctx.send(embed=embed4)
return
if reason == None:
reason = "being a jerk!"
print("b")
if member.top_role >= ctx.author.top_role:
print("a")
embed3=discord.Embed(color=discord.Colour.purple(),
title="Role", description="This user is a higher or the same role as you.")
await channel.send(embed=embed3)
return
else:
await ctx.guild.ban(member, reason=reason)
embed = discord.Embed(title="Ban", description=f" {member.mention} was banned by {ctx.author.mention}.",
colour=discord.Colour.purple())
await ctx.send(embed=embed)
message = f"You have been banned from {ctx.guild.name} for {reason}"
await member.send(message)
Ответ №1:
Причина: вы получаете разногласие.Пользовательский объект вместо разлада.Участник. У первого нет атрибута «top_role», поскольку он просто ссылается на самого пользователя, вам действительно нужен последний, поскольку он ссылается на пользователя как на члена сервера и имеет атрибут, который вы ищете. Вы можете взглянуть на документацию для каждого из них.
Исправление: просто измените определение на быть discord.Member
.
Правильный код:
async def ban (ctx, member:discord.Member=None, *, reason=None):
channel = ctx.channel
if member == None or member == ctx.message.author:
embed = discord.Embed(title="Ban", description=f"Ban a member from the discord.", colour=discord.Colour.purple())
await ctx.send(embed=embed)
return
if ctx.author.guild_permissions.ban_members == False:
embed4=discord.Embed(color=discord.Colour.purple(),
timestamp=datetime.datetime.utcnow(), title="Missing Permissions!", description="You don't have the required permissions to use this command!")
await ctx.send(embed=embed4)
return
if reason == None:
reason = "being a jerk!"
print("b")
if member.top_role >= ctx.author.top_role:
print("a")
embed3=discord.Embed(color=discord.Colour.purple(),
title="Role", description="This user is a higher or the same role as you.")
await channel.send(embed=embed3)
return
else:
await ctx.guild.ban(member, reason=reason)
embed = discord.Embed(title="Ban", description=f" {member.mention} was banned by {ctx.author.mention}.",
colour=discord.Colour.purple())
await ctx.send(embed=embed)
message = f"You have been banned from {ctx.guild.name} for {reason}"
await member.send(message)