尝试将DM发送给提到的用户时发生TypeError

时间:2020-09-08 18:16:51

标签: javascript node.js discord discord.js

我试图在discord.js中创建一个提醒命令,该命令带有两个参数:消息和应提醒的提到的用户。但是,这给了我一个错误。

这是我的代码:

client.on('message', (message) => {
 const { content, guild, channel, author } = message;
 if (!guild) return;
 if (author.bot) return;

 const args = content
  .slice(process.env.PREFIX.length)
  .trim()
  .split(/ +/g);
 const cmd = args.shift().toLowerCase();

 if (cmd == 'remind') {
  const remindeduser = message.mentions.users.first().id;
  const msg = message.toString();
  remindeduser.send(msg.slice(8));
 }
});

我收到此错误:

/home/runner/ServerParty/index.js:82
      remindeduser.send(msg.slice(8));
                   ^

TypeError: remindeduser.send is not a function
    at Client.<anonymous> (/home/runner/ServerParty/index.js:82:20)
    at Client.emit (events.js:315:20)
    at Client.EventEmitter.emit (domain.js:483:12)
    at MessageCreateAction.handle (/home/runner/ServerParty/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (/home/runner/ServerParty/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/home/runner/ServerParty/node_modules/discord.js/src/client/websocket/WebSocketManager.js:384:31)
    at WebSocketShard.onPacket (/home/runner/ServerParty/node_modules/discord.js/src/client/websocket/WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (/home/runner/ServerParty/node_modules/discord.js/src/client/websocket/WebSocketShard.js:301:10)
    at WebSocket.onMessage (/home/runner/ServerParty/node_modules/ws/lib/event-target.js:125:16)

我该如何解决?

1 个答案:

答案 0 :(得分:0)

问题出在以下三行:

const remindeduser = message.mentions.users.first().id;
const msg = message.toString();
remindeduser.send(msg.slice(8));

首先,您无法在User Snowflake (ID)上调用User.send()函数

// change:
message.mentions.users.first().id;

// to:
message.mentions.users.first();

此外,要处理可能的错误,请添加以下行:

const remindeduser = message.mentions.users.first();
if (!remindeduser)
 return message.channel.send('Please mention a user to remind');
const msg = message.toString();
remindeduser
 .send(msg.slice(8))
 .catch(() => message.channel.send('Cannot DM this user'));

第二,message.toString()不是函数。 message参数返回一个object,其中包含消息的所有数据。例如,message.authormessage.guildmessage.id等。

要获取消息中的实际文本,请使用message.content,您已经将其定义为content

const msg = content.toString();
remindeduser.send(msg.slice(8));

此外,该行实际上没有任何用处。您已经有了args变量。

// replace:
const msg = content.toString();
remindeduser.send(msg.slice(8))

// with:
remindeduser.send(args.join(' '))

此外,作为对此问题的答复,此问题已被删除:

对于那些反对我的评论的人,您至少可以告诉我这个问题是怎么回事吗?这是我第一次使用该网站。

您的帖子有一些问题(此后所有问题都已被其他用户删除)。

  • 您通过第三方服务提供了代码。如果您直接在问题中粘贴一小段相关代码,通常可以使人们更轻松地回答您的问题。我们不必搜寻冗长的脚本来查找实际的问题,并且无需打开另一个标签或登录网站即可访问所有内容

  • 您没有输入错误,这使我们难以诊断问题。

  • 您没有做出任何努力来自行解决问题。在询问我们之前,您没有显示任何研究结果,也没有尝试解决此问题的其他方法。访问this page以了解为何对此不满意

有关更多信息,请参见How to Ask