Reputation: 15
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)
Upvotes: 0
Views: 261
Reputation: 2346
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}")
Upvotes: 1