当机器人托管在 heroku 上时如何制作 discord.js 图像搜索命令

Posted

技术标签:

【中文标题】当机器人托管在 heroku 上时如何制作 discord.js 图像搜索命令【英文标题】:How to make a discord.js image search command when the bot is hosted on heroku 【发布时间】:2021-08-10 06:39:16 【问题描述】:

我的 Discord.js 机器人中有一个命令应该从 dogpile 中获取图片并发布,但自从我开始在 Heroku 上托管我的机器人(我免费使用它)它就完全停止工作了,我没有收到任何错误,这是代码:

var cheerio = require("cheerio");
var request = require("request");
const Discord = require('discord.js');


module.exports = 
    name: 'image',
    description: 'sends an image based on your search query',
    execute(message, args)
        
        image(message, args);

        function image(message, parts) 

            var search = parts.slice(0).join(" ");

            var options = 
                url: "http://results.dogpile.com/serp?qc=images&q=" + search,
                method: "GET",
                headers: 
                    "Accept": "text/html",
                    "User-Agent": "Chrome"
                
            ;


            request(options, function(error, response, responseBody) 
                if (error) 
                    return;
                
                
                $ = cheerio.load(responseBody);

                var links = $(".image a.link");

                var urls = new Array(links.length).fill(0).map((v, i) => links.eq(i).attr("href"));

                console.log(urls);
                if(!urls.length) 
                    return;
                

                const embed = new Discord.MessageEmbed()
                .setTitle("Image of a(n) " + search)
                .setImage(urls[Math.floor(Math.random() * urls.length)])
                .setFooter('Searched by ' + message.author.username)
                .setColor("#43B581");
                message.channel.send(embed)
            )
        
    

这也可能有帮助,但我不确定:Heroku Dyno Information

【问题讨论】:

一定有什么东西会导致你的机器人崩溃,然后尝试将你的代码包装在try...catch(e)... 中,然后如果没有发现错误。如果过度使用或导致 dyno 停止的原因,请查看 dyno 日志 我没有收到任何错误,但我注意到它记录了一个空白数组,通常它会充满图像链接 添加更多调试日志并添加 Heroku 日志。您可能会看到一些您认为不相关但实际上相关的内容。 【参考方案1】:

可能是因为您从 repl.it 转移到 Heroku,因为 repl.it 会自动安装任何缺少的模块,而 Heroku 不会,因此请确保您已安装 Cheerio 模块。

【讨论】:

以上是关于当机器人托管在 heroku 上时如何制作 discord.js 图像搜索命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在heroku中托管音乐机器人?

如何在heroku中托管一个不和谐的机器人(错误)

如何在 Heroku 上安装 discord.py-rewrite 依赖项以进行 Discord 机器人托管?

在 Heroku 中使用静态 IP 来托管 Discord 机器人

通过 Heroku 托管 Discord Bot,在尝试以前的建议后重复 EADDRINUSE 错误

即使我安装了 ffmpeg,Heroku 也不播放音乐