mongodb - Discord.js TypeError:无法读取用户定义中未定义的属性“发送”
问题描述
在下面的代码中,您看到它的作用是连接到 mongodb 数据库,并存储用户 ID,并且工作正常,问题是向该用户 ID 发送消息,这是代码:
const { MongoClient, ReadPreference } = require('mongodb');
const MONGO_URL = 'mongodb://127.0.0.1:27017/';
(async() => {
const mongoClient = await MongoClient.connect(MONGO_URL, {
appname: 'test',
readPreference: ReadPreference.PRIMARY,
useNewUrlParser: true,
});
const db = await mongoClient.db('test');
const changeStream = db.collection('tools').watch([], { 'fullDocument': 'updateLookup' });
changeStream.on('change', (event) => {
tool.findOne({
code: datos,
}, async(err, s) => {
console.log(datos)
const userID2 = s.userID;
if (!s) {
console.log("pin no encontrado")
}
if (userID2 != undefined) {
try {
setTimeout(function() {
console.log("userID2 = " + userID2)
console.log("Event" = event);
console.log("event.updateDescription.updatedFields =" + event.updateDescription.updatedFields)
const user = client.users.cache.get(userID2)
console.log("const user = " + user)
user.send("Resultados del scan: " + "\nEstá el usuario cheat? " + event.updateDescription.updatedFields.cheats + "\nCheats que tiene el usuario: " + event.updateDescription.updatedFields.namecheats)
}), 5000
} catch (e) { console.log("[ERROR]", e) }
} else { return }
});
})
})();
})
这是控制台中的输出:
651312
userID2 = 794601739960844348
{
_id: {
_data: '82600D5062000000012B022C0100296E5A1004D5046A26D5AE482380F594D10FDC475546645F69640064600CA9A0FE28E8160C78C34E0004'
},
operationType: 'update',
clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 1, high_: 1611485282 },
fullDocument: {
_id: 600ca9a0fe28e8160c78c34e,
serverID: '802595009617723412',
userID: '794601739960844348',
__v: 0,
cheats: 'true',
code: '651312'
},
ns: { db: 'test', coll: 'tools' },
documentKey: { _id: 600ca9a0fe28e8160c78c34e },
updateDescription: { updatedFields: { cheats: 'true' }, removedFields: [] }
}
{ cheats: 'true' }
const user = undefined
/home/jonh/bot-tool/src/index.js:101
user.send("Resultados del scan: " + "\nEstá el usuario cheat? " + event.updateDescription.updatedFields.cheats + "\nCheats que tiene el usuario: " + event.updateDescription.updatedFields.namecheats)
^
TypeError: Cannot read property 'send' of undefined
at Timeout._onTimeout (/home/jonh/bot-tool/src/index.js:101:34)
at listOnTimeout (node:internal/timers:556:17)
at processTimers (node:internal/timers:499:7)
npm ERR! code 1
npm ERR! path /home/jonh/bot-tool
npm ERR! command failed
npm ERR! command sh -c node .
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2021-01-24T10_48_02_631Z-debug.log
如您所见,在输出中,它记录了 userID2 = 794601739960844348 并且用户 ID 很好,但由于某种原因,它没有向该用户发送消息。我已经尝试过 fetch() 并且没有用。
解决方案
请改用以下代码:
setTimeout(async function() {
console.log("userID2 = " + userID2)
console.log("Event" = event);
console.log("event.updateDescription.updatedFields =" + event.updateDescription.updatedFields)
const user = await client.users.fetch(userID2)
console.log("const user = " + user)
user.send("Resultados del scan: " + "\nEstá el usuario cheat? " + event.updateDescription.updatedFields.cheats + "\nCheats que tiene el usuario: " + event.updateDescription.updatedFields.namecheats)
}, 5000)
(获取用户并修复设置的超时)
推荐阅读
- typescript - 如何在对象数组中查找具有特定名称的值
- android - 如何使用 ROOM 库在不阻塞 UI 的情况下将数千条记录从本地数据库加载到 recyclerview
- c++ - 获取 std::function 的函数名
- javascript - 反应收集器内部的反应收集器
- python - PermissionError: [WinError 5] 使用 distutils 后访问被拒绝
- python - 无法启动“Python”脚本 + SQL Server 的运行时
- android - (MVVM) RecyclerView 项目应该从什么扩展?
- robotframework - 没有在机器人框架中使用 AppiumLibrary 在移动 Web 中切换到 iframe 的方法
- c++ - OpenCV Mat 将数据移动到自定义结构
- ios - 选择时如何获取 uiCollectionView 原始资产或图像以及如何将其传递回上一个视图控制器并加载到 imageView