我有一个已经有一些功能的 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 的新手,我需要一些关于什么是做什么的解释。
答案 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