我最近尝试从github(https://github.com/mew/discord-Hypixel-bridge)运行一个项目,该项目使用node.js,并将discord服务器通道链接到我试图使用它的minecraft服务器上的公会通道。它基本上应该做的是检测当一个消息在不和谐通道中发送,发送它在与我链接的bot帐户的公会聊天和接收消息的人在公会聊天类型,并发送他们到不和谐服务器使用我的bot在其中。将消息从discord发送到guild chat是没有问题的,但是当任何人在guild chat中键入任何内容,同时试图将该信息发送到我的discord服务器时,它会崩溃,并在命令提示符中留下一些错误:
C:\Users\betab\Pictures\Epicness\index.js:52
if (v[2].includes(name + ":") || v[3].includes(name + ":")) return;
^
TypeError: Cannot read property 'includes' of undefined
at Bot.<anonymous> (C:\Users\betab\Pictures\Epicness\index.js:52:18)
at Bot.emit (events.js:315:20)
at Client.<anonymous> (C:\Users\betab\Pictures\Epicness\node_modules\mineflayer\lib\plugins\chat.js:79:9)
at Client.emit (events.js:315:20)
at FullPacketParser.<anonymous> (C:\Users\betab\Pictures\Epicness\node_modules\minecraft-protocol\src\client.js:89:12)
at FullPacketParser.emit (events.js:315:20)
at addChunk (C:\Users\betab\Pictures\Epicness\node_modules\readable-stream\lib\_stream_readable.js:298:12)
at readableAddChunk (C:\Users\betab\Pictures\Epicness\node_modules\readable-stream\lib\_stream_readable.js:280:11)
at FullPacketParser.Readable.push (C:\Users\betab\Pictures\Epicness\node_modules\readable-stream\lib\_stream_readable.js:241:10)
at FullPacketParser.Transform.push (C:\Users\betab\Pictures\Epicness\node_modules\readable-stream\lib\_stream_transform.js:139:32)
我真的不知道为什么会发生这种情况,因为我不是编码这个的人,所以感谢帮助!因为我不确定为什么会发生这种情况,但是我已经包含了index.js文件和config.json文件的一个示例!我不知道什么是要在这里和我没有太多的知识,只是想能够运行这个!谢谢!<3
首先,您正在使用的项目是一个正在进行的工作(根据其在github上的自述文件),因此不能保证工作。尝试使用它不是一个好主意,特别是如果您对javascript或discord.js的知识有限,因为它可能包含大量错误,并且可能根本无法工作。
问题所在
至于你得到的错误,请允许我解释一下。下面是发生错误的代码行:
let v = msg.split(" ", 2);
if (v[2].includes(name + ":") || v[3].includes(name + ":")) return;
msg.split(“”)
根据空格拆分字符串,并在空格(句子的单词)之间创建一个数组。因此,本质上,如果要split()
句子“hello my friend”
,您将得到数组结果:[“hello”,“my”,“friend”]
。
但是,您正在使用的代码执行msg.split(“”,2)
。这段代码中的第二个参数(number)指示拆分字符串的次数。因为指定的数字是2,所以它只会拆分字符串两次。这可能会导致一个常见的错误观念,您正在使用的项目的作者也是这个错误观念的牺牲品。
下面是使用.split(“”,2)
对前面的示例句“hello my friend”
所做的操作:[“hello”,“my”]
。我猜项目的作者实际上想让代码做一些类似[“Hello”,“My Friend”]
的事情,但是他们没有意识到.split()
并不是这样工作的,因此成为了常见误解的牺牲品。
那么为什么这会导致错误呢?因为if
语句尝试在v[2]
上使用.include()
,其中v
是拆分的数组结果。所以让我们假设v
是上面示例的精确结果([“hello”,“my”]
)。数组具有用于访问其内部数据的索引,索引从零开始。因此在我们的示例中,v[0]
是“hello”,v[1]
是“my”。但是项目的代码正在尝试获取v[2]
,这将是数组中的第三个元素。但是,如前所述,.split(“”,2)
的数组输出将只包含两个元素;v
中没有第三个元素。因此,v[2]
是未定义的
,这就是发生错误的原因。
假设我正确理解了作者的意图,这里有一种方法可以修复这个特定的错误:
let v = [msg.split(" ")[0], msg.split(" ").slice(1).join(" ")];
if (v.length < 2 || v[1].includes(name + ":")) return;
现在我们做了一些不同的事情,而不是做以前错误的分裂。我们在创建自己的阵列。对于第一个元素:我们插入消息实际拆分的第一个元素。对于第二个元素:我们对消息进行拆分,获取除第一个元素之外的每个元素(使用.slice(1)
,它对以索引1开头、结尾的数组进行“拆分”),并使用空格对原始拆分的这些元素进行解拆/连接;从本质上讲,我们在第一个空格之后获取消息中的所有内容。这允许我们在消息的第一部分之后的所有部分中检查name+“:”
,以确保名称位于消息的正确部分。
现在还有其他的方法可以实现,例如使用.replace()
将msg
中的第一个空格替换为某个字符序列,然后将输出拆分为这些字符序列。这只是一种方法。
我还更改了if
语句,以确保数组实际上至少包含两个元素。这是因为,如果消息为空或根本没有发送消息,则数组只有少于两个元素(一个或更少),并且在这两种情况下您都不希望代码执行。至于你为什么不想这样做:如果一个用户在mc中发送了一个空消息,你真的想不和谐地发送这个空消息吗?不管怎么做都是不可能的,这会导致discord.js中的错误。
备注
虽然这些修复应该可以解决您正在经历的问题,但我怀疑这将使该项目工作。我既没有测试过这个项目,也没有测试过我的固定版本,但是我非常肯定它会有更多的错误,因为代码看起来很不完整。而且鉴于作者是上述常见错误观念的牺牲品,他们可能在代码中犯了更多简单的逻辑错误,使其无法正常运行。
另外,为了将来在询问有关StackOverflow的问题时提供参考,请在您的问题中直接通过代码块提供相关代码,如本答案中的代码块。您的问题只包含单行代码,而不包含代码的所有相关部分(您应该包含您提供的行上面和下面的一些行)。在这里提问时,您不应该单独附加到外部源(如Github)的链接,这也是回答者的一大不便。
(新手在编码,我只是按照教程,并尝试理解和学习的同时)我最近想编码我自己的不和谐机器人,但我有一个问题的事件处理程序部分,所以我尝试了另一种方法,但现在我有另一个问题。 它没有用“砰”来回应“砰!砰”,而是说: 客户命令。获取('ping')。执行(消息,args)^ TypeError:无法读取未定义的属性“get” 反对。执行(…/events/message.js:18:23) 在客户端。
无论我做了什么,我总是得到未定义的错误。当我,有值时,我确实有值,但我的浏览器控制台一直在提示它,我尝试了不同的方法,比如先设置一个空字符串,移动另一个函数中的for-loop并将其设置为等待,但一切都不起作用。 错误类型错误:无法读取EmployeeEditComponent.Push../src/app/pages/employee/Employee-Edit/Employee-Edit/Em
help命令有一个错误,错误是 是代码我不知道出了什么问题。
如果函数在组件中,那么一切都很好。如果我把它单独取出并导出到一个组件中,那么我会得到一个错误TypeError:不能读取未定义的属性(读取'reduce')
问题内容: 我试图在ajax回调从REST api接收数据后设置组件的setState。这是我的组件构造函数代码 然后,我有一个如下所示的方法。 现在,这是我执行getAJAX请求的getPosts函数。 我想设置状态,但出现以下错误。 不太清楚是什么原因造成的。如果有人指出我正确的方向,那将真的很有帮助。提前致谢。 问题答案: 还绑定回调函数,以便回调内部指向React Component的上下
我试图使用node.js express web服务器中的@tensorflow/tfjs-node模块。但是,我得到了下面的错误。我不明白为什么我会出现这个错误。我刚刚在node.js服务器中添加了1行代码。我使用“npm install@tensorflow/tfjs-node”完成的安装。可能的问题是什么? null 先谢谢你, var nonMaxSuppressionV3Impl=tf.