I’m trying to set up a verification command that gives a role upon its use, but I want to set it so the user can only use the command if they don’t already have the role. This is my code:
@client.command() async def verify(ctx): if str(ctx.guild.id) in verify_roles: guild = ctx.message.author.guild rolegiven = ctx.message.author.guild.get_role(verify_roles.get(str(guild.id))) await ctx.message.author.add_roles(rolegiven)
Advertisement
Answer
One thing you could do is to retrieve rolegiven
at the very beginning of your code. You can then check if the ctx.author
has this role via member.roles
. Here is a simplified version of the explained.
@client.command() async def verify(ctx): await ctx.message.delete() # deletes the message the author sent if str(ctx.guild.id) in verify_roles: verify_role = ctx.guild.get_role(verify_roles.get(str(guild.id))) # check if the role is not in the author's current roles if verify_role not in ctx.author.roles: await ctx.author.add_roles(verify_role) await ctx.send("You have been verified!") else: await ctx.send(f"You already have {verify_role.name}")