Discord.js 聊天机器人

问题描述 投票:0回答:3

请帮助我。这是我下面关于 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”

mongoose discord.js
3个回答
0
投票

替换:

const channell = data.channel;

与:

const channell = client.channels.cache.get(data.channel);

0
投票

错误是不能直接使用

const channell = data.channel

要动态获取频道,您必须使用

从缓存中获取它
channels.cache.get()

所以,你应该更换

const channell = data.channel

const channell = client.channels.cache.get(data.channel)

0
投票

更换这个

 .then(data => {
                message.channel.send(data.cnt);
            })

有了这个

  .then(Data => {
 message.channel.send(Data.cnt);
}) 

因为您同时从 mongo 和 API 获取数据。因此,两个参数不能相同。

至于渠道,一切都很好。因为您正在比较 Id,所以不需要缓存获取通道。

© www.soinside.com 2019 - 2024. All rights reserved.