I am having trouble assigning a role to a user when they type in a command
Code:
@client.command()
async def BMOrole(ctx, member: discord.Member = None):
role = discord.utils.get(ctx.guild.roles, name='BMO')
await member.add_roles(role)
await ctx.send('Role given!')
When the user types “!BMOrole”, I want to give them a role called, “BMO” and also display a message.
The error I’m receiving is:
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/bot.py", line 939, in invoke
await ctx.command.invoke(ctx)
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/ext/commands/core.py", line 863, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "/opt/virtualenvs/python3/lib/python3.8/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: AttributeError: 'NoneType' object has no attribute 'add_roles'
Advertisement
Answer
you forget set a default user:
@client.command()
async def BMOrole(ctx, member: discord.Member = None):
if member is None:
member = ctx.author
role = discord.utils.get(ctx.guild.roles, name='BMO')
await member.add_roles(role)
await ctx.send('Role given!')