Schanglasses
Schanglasses

Reputation: 17

discord.py member.edit(nick=nickname) not working

I'm making a Discord bot using discord.ext. I want to change the users nickname on the command nick. For that I wrote following code:

from discord.ext import commands
import discord

# set prefix as "w!"
bot = commands.Bot(command_prefix="w!")

# do stuff when certain error occurs
@bot.event
async def on_command_error(ctx, error):
    if isinstance(error, commands.BotMissingPermissions):
        await ctx.send("Error: Bot missing permissions.")
    if isinstance(error, commands.CommandNotFound):
        await ctx.send("Error: The command was not found")
    if isinstance(error, commands.MissingPermissions):
        await ctx.send("Error: You don't have permission to do that.")

@bot.command()
# check if the user has the permission to change their name
@commands.has_permissions(change_nickname=True)
async def nick(ctx, member: discord.Member, *, nickname):
    await member.edit(nick=nickname)
    await ctx.send(f"Nickname was changed to {member.mention}.")

# reset the nickname if no new name was given
@nick.error
async def nick_error(ctx, error):
    if isinstance(error, commands.MissingRequiredArgument):
        member = ctx.author
        await member.edit(nick=None)
        await ctx.send(f"Reset nickname to {member.mention}.")


bot.run("TOKEN")

When I enter w!nick test name in Discord it doesn't respond to the message and doesn't change my nickname. But when I just enter w!nick it resets my nickname.

Upvotes: 0

Views: 2313

Answers (2)

Schanglasses
Schanglasses

Reputation: 17

Thanks to @Mr_Spaar for helping. The solution:

@bot.command()
@commands.has_permissions(change_nickname=True)
async def nick(ctx, *, nickname):
    member = ctx.author
    await member.edit(nick=nickname)
    await ctx.send(f"Nickname was changed to {member.mention}.")

Upvotes: 1

coolman23465
coolman23465

Reputation: 13

Does this help?

client.command(pass_context=True)
@commands.has_permissions(change_nickname=True)
async def hnick(ctx, member: discord.Member, nick):
    await member.edit(nick=nick)
    await ctx.send(f'Nickname was changed for {member.mention} ')

Upvotes: 0

Related Questions