javascript - 尝试向提及的用户发送 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)
我怎样才能解决这个问题?
解决方案
问题出在这三行:
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.author
、message.guild
、message.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(' '))
另外,作为对这个已被编辑的问题的答复:
对于那些反对我的评论的人,你至少能告诉我这个问题有什么问题吗?这是我第一次使用该网站。
您的帖子存在一些问题(所有这些问题都已被另一位用户编辑)。
您通过第三方服务提供了代码。如果您直接在问题中粘贴一小段相关代码,人们通常会更容易回答您的问题。我们不必通过冗长的脚本来查找实际问题所在,而且我们可以在不打开另一个标签或登录网站的情况下访问它
您没有包含您的错误,这使我们很难诊断问题。
您没有表现出任何努力自己解决问题。在询问我们之前,您没有展示您的任何研究,您尝试解决问题的任何替代方法。访问此页面以了解为什么不受欢迎
有关详细信息,请参阅如何提问
推荐阅读
- assembly - 所有英特尔 CPU 芯片组设备接口上的英特尔 ME 影子完全访问操作系统
- c - 输入所有数据后立即出现错误。
- android - 如何以编程方式将某些图像设置为从图库中不可见?
- vue.js - 如何为 Vuex 模块声明索引状态?
- vue.js - Leaflet+Vue+Vuetify / Leaflet map 隐藏 vuetify 弹出对话框
- sql-server - 从另一个存储过程调用总是在 SQL Server 中返回数据转换错误
- python - 是否有允许在列中查找两个字符串的 python 函数?
- php - 奇怪的 Elasticsearch 和 Curl 问题。curl 和 wget 可以连接到 elasticsearch 但收不到数据
- c# - ApplicationRoleManager - 没有任何类型参数
- python - 循环一个范围,然后根据我当前的条件以不同的方式分配值