javascript - 用括号调用函数不返回任何内容
问题描述
当我运行我的代码时,它应该打印发件人姓名,“采用”,然后是第一个提到的用户
const { Client } = require('discord.js', 'async', 'discord-message-handler');
const bot = new Client();
const cfg = require('./config.json');
function adoptaUser() {
var finalString = '';
finalString += '**' + (user.username) + 'adopted' + (message.mentions.member.first) + '**' + ':heart:';
}
//Skips to command here!!
if(message.content.includes('hws:adopt')) {
message.channel.send(adoptaUser(message.author.id));
}
});
});
bot.login(cfg.token);
//I only included the code which the function uses!!
虽然没有可见的语法错误,但我仍然收到此错误:
Bot Ready on 2 servers
C:\Users\REMOVED\Desktop\Bot2\app.js:16
finalString += '**' + (user.username) + 'has adopted' + (message.mentions.member.first) + '**' + ':heart:';
^
ReferenceError: user is not defined
at adoptaUser (C:\Users\Moneq\Desktop\AutoRole\app.js:16:28)
at Client.bot.on.message (C:\Users\Moneq\Desktop\AutoRole\app.js:38:30)
at emitOne (events.js:116:13)
at Client.emit (events.js:211:7)
at MessageCreateHandler.handle (C:\Users\Moneq\Desktop\AutoRole\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
at WebSocketPacketManager.handle (C:\Users\Moneq\Desktop\AutoRole\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
at WebSocketConnection.onPacket (C:\Users\Moneq\Desktop\AutoRole\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
at WebSocketConnection.onMessage (C:\Users\Moneq\Desktop\AutoRole\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
at WebSocket.onMessage (C:\Users\Moneq\Desktop\AutoRole\node_modules\ws\lib\event-target.js:120:16)
at emitOne (events.js:116:13)
[nodemon] app crashed - waiting for file changes before starting...
虽然当我尝试在不带括号的情况下调用函数时,我得到了机器人的响应,尽管它发送的是实际函数而不是字符串。
对此有什么帮助吗?
解决方案
当函数看起来需要一个消息对象时,您将 user.id 传递给该函数。
改为:
message.channel.send(adoptaUser(message));
然后改变这个:
(user.username)
对此
message.author.username
您还需要将 return 关键字添加到您的 admissionaUser 函数。
“调用”不带括号的函数不是函数调用,它是对函数对象的引用,因此它确实会返回对象的内容。