请帮助我。这是我下面关于 Discord.js 聊天机器人的代码
const fetch = require("node-fetch");
const {ChannelType} = require("discord.js");
client.on('messageCreate', async (message) => {
const chatbots = require("./All-Commands-Schemas/ChatbotSchema")
chatbots.findOne({ guild: message.guild.id }, async (err, data) => {
if (!data) return;
if (err) throw err
const channell = data.channel;
if (message.author.bot || message.channel.type === ChannelType.DM) return;
if (message.channel.id === channell) {
message.channel.sendTyping();
await fetch(`http://api.brainshop.ai/get?bid=164279&key=rhBjCAZC83ztKzYO&uid=${message.author.id}&msg=${message.content}`)
.then(cnt => cnt.json())
.then(data => {
message.channel.send(data.cnt);
})
.catch(() => {
message.channel.send("Couldn't fetch response!");
})
}
})
})
聊天机器人架构
const mongoose = require("mongoose");
const chatbots = new mongoose.Schema({
guild: String,
channel: String,
name: String
});
module.exports = mongoose.model("chatbots", chatbots);
问题是聊天机器人不会回复或在控制台日志中显示错误。我已经尝试了一切。
“节点获取”:“^3.3.0”, "discord.js": "^14.6.0", “猫鼬”:“^6.7.0”
替换:
const channell = data.channel;
与:
const channell = client.channels.cache.get(data.channel);
错误是不能直接使用
const channell = data.channel
要动态获取频道,您必须使用
从缓存中获取它channels.cache.get()
所以,你应该更换
const channell = data.channel
与
const channell = client.channels.cache.get(data.channel)
更换这个
.then(data => {
message.channel.send(data.cnt);
})
有了这个
.then(Data => {
message.channel.send(Data.cnt);
})
因为您同时从 mongo 和 API 获取数据。因此,两个参数不能相同。
至于渠道,一切都很好。因为您正在比较 Id,所以不需要缓存获取通道。