首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你如何让一个不和谐的机器人重新发送你刚刚发送的discord.js图像

你如何让一个不和谐的机器人重新发送你刚刚发送的discord.js图像
EN

Stack Overflow用户
提问于 2021-03-03 09:42:43
回答 2查看 77关注 0票数 0

我正在制作一个机器人,它有一个被称为“不和谐最有趣的模因”或简称DFM的功能。这个功能的要点是,人们可以使用命令"DFM.submit 'IMAGEFILE'“提交#memes中的表情包,然后如果人们执行命令"DFM”,它将发送一些当天/每周投票率最高的表情包,但我遇到的问题是机器人没有发送图像,而是给了我一个错误消息。

编辑:我忘记了错误信息"(node:3532) UnhandledPromiseRejectionWarning: DiscordAPIError: Cannot send an empty message“

代码语言:javascript
复制
const Discord = require('discord.js');
const bot = new Discord.Client();
var meme
const DFM = ['some meme link.png', 'another meme link.png']
var randomDFM = DFM[Math.floor(Math.random() * DFM.length)];
            if(message.content.startsWith("DFM.submit")){
                let meme = message.content.split(" ");
                meme.shift();
                meme = meme.join(" ");
                message.channel.send(meme)
                message.channel.send('Your post was submitted to "Discords Funniest Memes"')
                DFM.unshift(meme)
            }
            if(message.content === "DFM"){
                message.channel.send(randomDFM)
                randomDFM = DFM[Math.floor(Math.random() * DFM.length)];
        }
bot.login('no token for you')
EN

回答 2

Stack Overflow用户

发布于 2021-03-03 11:10:27

在调用send()时,您的meme似乎是空的。

当您没有正确地捕获由promise抛出(拒绝)的错误时,就会发生UnhandledPromiseRejectionWarning。除非您对promise执行await或调用.then(),否则剩余的代码将继续执行,而不等待send()方法的结果。如果在没有等待的情况下,send()在后台运行时出现错误,那么就会得到UnhandledPromiseRejectionWarning

discord.js的文档看,message.channel.send返回了一个承诺。看看at the docs以及他们是如何使用then()catch()的。

你可能想要做的事情是这样的。这是未经测试的,但应该会给您一个想法。

代码语言:javascript
复制
message.channel.send(meme)
    .then(() => {
        return message.channel.send('Your post was submitted to ...');
    })
    .catch(error => {
        // handle your error here
        console.error(error);
    });
票数 0
EN

Stack Overflow用户

发布于 2021-03-04 12:16:22

为了将图像发送到通道,您需要重新格式化message.channel.send命令。

它应该看起来像这样:

代码语言:javascript
复制
if(message.content === "DFM"){
    // randomDFM should contain the url to the file you are trying to send
    message.channel.send("Your Bot's Message", {files: [randomDFM]})
    randomDFM = DFM[Math.floor(Math.random() * DFM.length)]
}

message.channel.send也会返回一个promise,所以你需要确保你也在处理错误。

你会是这样的:

代码语言:javascript
复制
if(message.content === "DFM"){
    // randomDFM should contain the url to the file you are trying to send
    message.channel.send("Your Bot's Message", {files: [randomDFM]})
    .then(() => {
        randomDFM = DFM[Math.floor(Math.random() * DFM.length)]
    })
    .catch((err) => {
        console.log(err);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66449557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档