首页 > 解决方案 > 用括号调用函数不返回任何内容

问题描述

当我运行我的代码时,它应该打印发件人姓名,“采用”,然后是第一个提到的用户

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...

虽然当我尝试在不带括号的情况下调用函数时,我得到了机器人的响应,尽管它发送的是实际函数而不是字符串。

对此有什么帮助吗?

标签: javascriptnode.jsdiscorddiscord.js

解决方案


当函数看起来需要一个消息对象时,您将 user.id 传递给该函数。

改为:

message.channel.send(adoptaUser(message));

然后改变这个:

(user.username)

对此

message.author.username

您还需要将 return 关键字添加到您的 admissionaUser 函数。

“调用”不带括号的函数不是函数调用,它是对函数对象的引用,因此它确实会返回对象的内容。


推荐阅读