Discord.js 如何进行更改昵称命令

时间:2021-05-10 15:35:49

标签: javascript node.js discord.js

我有一个已经有一些功能的 discord.js 机器人。但我想添加一个命令来更改用户的昵称。

======== Exception caught by widgets library =======================================================
The following assertion was thrown building Provider<(dynamic, dynamic) => MaterialApp>(value: Closure: (dynamic, dynamic) => MaterialApp, dirty):
Provider<(dynamic, dynamic) => MaterialApp> used outside of MultiProvider must specify a child
'package:provider/src/inherited_provider.dart':
Failed assertion: line 156 pos 7: 'builder != null || child != null'

The relevant error-causing widget was: 
  Provider<(dynamic, dynamic) => MaterialApp> file:///D:/MyProjects-active/distance-meter/lib/main.dart:18:14
When the exception was thrown, this was the stack: 
#2      InheritedProvider.buildWithChild (package:provider/src/inherited_provider.dart:156:7)
#3      SingleChildStatelessWidget.build (package:nested/nested.dart:259:41)
#4      StatelessElement.build (package:flutter/src/widgets/framework.dart:4569:28)
#5      SingleChildStatelessElement.build (package:nested/nested.dart:279:18)
#6      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4495:15)
...
====================================================================================================

这就是我添加新命令的方式。有人可以帮我设计这个功能吗? 另外,我是 discord.js 和 node.js 的新手,我需要一些关于什么是做什么的解释。

3 个答案:

答案 0 :(得分:2)

首先,您必须确定哪个成员的昵称将被更改。我将在这个例子中使用提及。

我们抓取提到的成员的集合并抓取第一个元素。

const memberToEdit = message.mentions.members.first();

接下来我们需要知道新昵称是什么。对于本示例,我将使用 String#replace() 删除 [prefix]changenick 并只留下将作为新昵称的文本。这是假设您使用设置 [prefix][command name]

编辑:我忘了将提及作为消息内容的一部分,使用 String#split()Array#join() 删除提及。 .pop() 将返回新昵称,.trim() 将删除不必要的空格。

const newNickname = message.content.replace(`${prefix}changenick`, '').split(' ').pop().trim();

接下来,我们在提到的成员对象上调用 setNickname(),传入 newNickname

memberToEdit.setNickname(newNickname);

您的最终代码将如下所示。

if (command === "changenick") {
   const memberToEdit = message.mentions.members.first();
   const newNickname = message.content.replace(`${prefix}changenick`, '').split(' ').pop().trim();
   memberToEdit.setNickname(newNickname);
}

答案 1 :(得分:1)

如果您的机器人收到的消息名为 rMessage,您可以通过 GuildMember 获取作者的 rMessage.member

GuildMember 有一个方法 setNickname(nick)。因此,您可以执行 rMessage.member.setNickname(nick, [reason]),其中 nick 是他们输入的文本,而 reason 是可选的(用于将其放入服务器的审核日志中)。

答案 2 :(得分:-1)

已经有一个命令可以在服务器上更改您的昵称;只需使用 /nick the name you want