discord.js v13机器人集成Firebase数据库出现goOfline方法不存在错误求助
解决方案
核心报错原因:拼写错误
你的报错是因为方法名拼写错误,goOfline少写了一个字母f,正确写法为goOffline。
可优化调整点
- 你已经提前初始化了
database实例,后续无需重复调用firebase.database(),直接复用变量即可,降低冗余 - 无需每次收到消息都手动切换数据库在线/离线状态,Firebase默认会维持稳定连接,频繁切换反而容易导致写入失败,可直接删除
goOnline、goOffline两行代码 - discord.js v13 版本已弃用
message事件,需替换为messageCreate事件,同时要在初始化客户端时声明消息相关权限意图,否则无法正常接收频道消息 - 可新增指定频道校验逻辑,避免同步所有频道的无关消息
修改后完整参考代码
const firebase = require('firebase'); const randomstring = require('randomstring'); const { Client, Intents } = require('discord.js'); // 初始化Discord客户端,v13必须声明对应的权限意图 const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] }); const config = { // 此处填写你的Firebase配置信息 }; firebase.initializeApp(config); const database = firebase.database(); // 替换为v13可用的messageCreate事件 client.on("messageCreate", async message => { // 跳过机器人自身发送的消息 if (message.author === client.user) return; // 新增:仅同步你指定的频道的消息,替换为你要同步的频道ID if (message.channel.id !== '需同步的频道ID') return; try { let ticket = randomstring.generate(7); await database.ref('/Auction4/' + ticket).set({ Message: message.content, User: message.author.username, User_ID: message.author.id }) await client.channels.cache.get('接收通知的频道ID').send(`Thanks, it works!`); } catch (err) { console.log(err); } }); // 启动机器人,替换为你自己的Discord机器人Token client.login('你的机器人Token');
其他注意事项
测试阶段可以先将Firebase实时数据库的读写规则临时开放,确认功能正常后再调整为带权限校验的规则,避免数据被恶意篡改。你安装的firebase@8.10.0版本和当前代码写法兼容,无需更换版本。
内容的提问来源于stack exchange,提问作者Yurii D
相关产品推荐
相关产品推荐

