编写我的第一个机器人。我正在尝试制作一个可以通过命令更改用户名和成员角色的机器人。
例如:!setnick [member] [newnick]; !giverole [成员] [角色]
我的角色命令很好用,但是我对更改昵称文档here感到困惑
@bot.command(pass_context=True)
async def setnick(ctx, nickname):
await change_nickname(server.get_member, nickname)
await ctx.send(f"User's nickname has been changed.")
机器人运行,但是当我输入命令不一致时,它将返回此错误:
Ignoring exception in command setnick:
Traceback (most recent call last):
File "FILEPATH", line 79, in wrapped
ret = await coro(*args, **kwargs)
File "FILEPATH", line 23, in setnick
await change_nickname(server.get_member, nickname)
NameError: name 'change_nickname' is not defined
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "FILEPATH", line 863, in invoke
await ctx.command.invoke(ctx)
File "FILEPATH", line 728, in invoke
await injected(*ctx.args, **ctx.kwargs)
File "FILEPATH", line 88, in wrapped
raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: NameError: name 'change_nickname' is not defined
谢谢!
答案 0 :(得分:2)
change_nickname
是从类调用的函数,可以参考文档,您会注意到该函数在名为Client的类下。
这意味着您不能无所事事地调用change_nickname
。
例如,它类似于您的
send(string)
方法。您不能随便调用它,而是需要使用文本通道对象来调用它。
因此,您之所以选择了ctx.send()
而不是send()
的原因。
您可能在登录机器人yourObjectName = new Client()
时创建了一个客户端对象。找到它并用它来调用change_nickname()
,就像这样:
await yourObjectName.change_nickname(server.get_member, nickname)