首页 > 解决方案 > 尝试向提及的用户发送 DM 时出现 TypeError

问题描述

我正在尝试在 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)

我怎样才能解决这个问题?

标签: javascriptnode.jsdiscorddiscord.js

解决方案


问题出在这三行:

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

首先,您不能User.send()在 a 上调​​用该函数User Snowflake (ID)

// 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您已经定义为 just 的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(' '))

另外,作为对这个已被编辑的问题的答复:

对于那些反对我的评论的人,你至少能告诉我这个问题有什么问题吗?这是我第一次使用该网站。

您的帖子存在一些问题(所有这些问题都已被另一位用户编辑)。

  • 您通过第三方服务提供了代码。如果您直接在问题中粘贴一小段相关代码,人们通常会更容易回答您的问题。我们不必通过冗长的脚本来查找实际问题所在,而且我们可以在不打开另一个标签或登录网站的情况下访问它

  • 您没有包含您的错误,这使我们很难诊断问题。

  • 您没有表现出任何努力自己解决问题。在询问我们之前,您没有展示您的任何研究,您尝试解决问题的任何替代方法。访问此页面以了解为什么不受欢迎

有关详细信息,请参阅如何提问


推荐阅读