v7.1.1版本调用db.startsWith报错TypeError,请求排查代码问题
解决
TypeError: db.startsWith is not a function 问题 你遇到的这个报错原因很明确:你用的数据库库(大概率是 quick.db)在7.1.1版本里已经移除了 startsWith 这个方法,这个版本的API做了调整,废弃了这类前缀查询的快捷方法,得换个写法实现相同功能。
给你改好的代码片段,直接替换原来的部分就行:
if(args[0] == 'car') { // 先获取所有数据,再过滤出以 car_${服务器ID} 开头的条目,最后按data字段排序 let cars = db.all() .filter(entry => entry.ID.startsWith(`car_${message.guild.id}`)) .sort((a, b) => a.data - b.data); let content = ""; // 注意:如果你的discord.js版本是v12及以上,client.users.get已被废弃,得用异步的fetch方法 for (let i = 0; i < cars.length; i++) { try { const user = await client.users.fetch(cars[i].ID.split('_')[2]); content += `${i+1}. ${user.username} ~ ${cars[i].data}\n`; } catch (err) { // 处理用户不存在的情况,避免报错中断程序 content += `${i+1}. 未知用户 ~ ${cars[i].data}\n`; } } // 记得把整理好的内容发送出去,比如: message.channel.send(content || "暂无车辆数据"); }
额外提醒两个关键细节:
- 因为用了
await,你需要把这个命令的处理函数改成异步的,比如原来的(message, args) => { ... }要改成async (message, args) => { ... }。 - 如果你的数据库不是quick.db,原理也一样——先找当前版本里批量获取数据的方法,再自己做前缀过滤和排序即可。
内容的提问来源于stack exchange,提问作者Jhay
相关产品推荐
相关产品推荐

