NodeJS WebStorm中未解析的方法(discord.js,代码有效)

r6hnlfcb  于 2023-01-30  发布在  Node.js
关注(0)|答案(3)|浏览(210)

我正在思考这个问题。自动完成也不起作用。
有点开始与此,将是容易得多,如果它只是工作(工作以外的承诺)。
代码运行也没有任何问题。delete方法也被识别,但不在那部分。
我在一个更大的项目中也有这个问题,这让我很困惑。
试着在网上找了几个小时的东西,但是找不到任何能帮助我的东西。希望我在某个时候没有失明:P
完整测试来源:

const Discord = require('discord.js');

const client = new Discord.Client();

client.on("message", message => {
    if (message.content === 'test'){
        message.channel.send('something').then(r => r.delete(5000));
    }
});

问题:

h22fl7wq

h22fl7wq1#

如果需要删除命令triget消息,可以使用

const Discord = require('discord.js');

const client = new Discord.Client();
    client.on("message", message => {
        if (message.content === 'test'){
            message.channel.send('something') 
            message.delete(1000)
            .catch(console.error)
        }
    });

如果你使用需要删除响应消息一段时间后你的代码必须工作,但你可以尝试使用回复方法。

client.on("message", message => {
    if (message.content === 'test'){
        message.reply('somethink')
        .then(msg => {
            msg.delete(10000)
        })
        .catch(console.error);
    }
});

可能是discord.js版本有问题?在v.12版本中,您需要使用msg.delete({ timeout: 10000 })

jvlzgdj9

jvlzgdj92#

这只是意味着webstorm无法辨别promise解析后对象将具有哪些功能,这是因为discord.js中的message create action有多个返回类型,因此消息对象可能无法传递给r,例如在消息发送失败的情况下,可能是试图将消息发送到没有适当权限的通道。
如果在尝试调用.delete()之前添加一个检查来确认r与message是同一类型,我相信警告会消失。
您可以通过删除bot在通道中发送消息的权限,然后向同一通道发送“test”来观察此突出显示警告您的潜在错误。

smdnsysy

smdnsysy3#

最近有错误,并找到了解决方案,例如,如果你想要一个文本通道,通过执行get,你可以有一个文本或语音。所以检查通道示例TextChannel(对于我的例子)

let channel = client.guilds.cache.get(process.env.GUILD_ID).channels.cache.get(config.status_channel);

if (channel instanceof TextChannel) {
  await channel.messages.fetch()
}

相关问题