Discord机器人启动报错:TypeError: db.table is not a constructor
解决Discord机器人中
TypeError: db.table is not a constructor错误 问题原因
你使用的是quick.db v9+版本,该版本对API进行了重构,与旧版(v8及以下)的使用方式完全不同:db.table()不再是构造函数,不需要用new关键字调用。
解决方案
1. 修正表实例的创建代码
直接去掉new关键字,新版中table()是QuickDB实例的方法,调用后会直接返回对应表的操作对象:
原错误代码:
const table = new db.table('Prefix'); const logembed = new db.table("embedlog");
修改后:
const table = db.table('Prefix'); const logembed = db.table("embedlog");
2. 新版quick.db表操作示例
修改后可正常使用表对象进行数据读写,比如:
// 给指定服务器设置前缀 await table.set('guild_123456', '!'); // 获取指定服务器的前缀 const prefix = await table.get('guild_123456');
修改后的完整代码片段
const { Client, Intents, guild, Collection } = require('discord.js'); const Discord = require("discord.js") const config = require('./config') const { readdirSync } = require("fs") const { QuickDB } = require("quick.db"); const db = new QuickDB(); // 修正这两行,去掉new关键字 const table = db.table('Prefix'); const logembed = db.table("embedlog") ms = require("ms") const color = config.app.color const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MEMBERS, Intents.FLAGS.GUILD_BANS, Intents.FLAGS.GUILD_EMOJIS_AND_STICKERS, Intents.FLAGS.GUILD_INTEGRATIONS, Intents.FLAGS.GUILD_WEBHOOKS, Intents.FLAGS.GUILD_INVITES, Intents.FLAGS.GUILD_VOICE_STATES, Intents.FLAGS.GUILD_PRESENCES, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS, Intents.FLAGS.GUILD_MESSAGE_TYPING, Intents.FLAGS.DIRECT_MESSAGES, Intents.FLAGS.DIRECT_MESSAGE_REACTIONS, Intents.FLAGS.DIRECT_MESSAGE_TYPING], restTimeOffset: 0, partials: ["USER", "CHANNEL", "GUILD_MEMBER", "MESSAGE", "REACTION"] }); client.login(config.app.token); client.commands = new Collection(); const { GiveawaysManager } = require('discord-giveaways'); client.giveawaysManager = new GiveawaysManager(client, { storage: "./database.json", updateCountdownEvery: 3000, default: { botsCanWin: false, embedColor: "#FF0000", reaction: "🎉" } });
内容的提问来源于stack exchange,提问作者Yoda 's
相关产品推荐
相关产品推荐

