Javascript 广播所有命令不自动删除广播-Discord.js-Commando

Javascript 广播所有命令不自动删除广播-Discord.js-Commando,javascript,discord.js,commando,Javascript,Discord.js,Commando,所以我试图让我的广播命令在设定的时间后自动删除广播。我为其构建EBS bot的人希望它在30分钟后自动删除 我们按照他的要求将其发送到所有文本频道,但尝试使其自动删除会触发以下错误: (节点:23)未处理的PromisejectionWarning:TypeError[无效类型]:提供的选项不是对象。 以下是我的broadcast.js文件: broadcast.js const Commando = require('discord.js-commando'); const prefix =

所以我试图让我的广播命令在设定的时间后自动删除广播。我为其构建EBS bot的人希望它在30分钟后自动删除

我们按照他的要求将其发送到所有文本频道,但尝试使其自动删除会触发以下错误:

(节点:23)未处理的PromisejectionWarning:TypeError[无效类型]:提供的选项不是对象。
以下是我的
broadcast.js
文件:

broadcast.js

const Commando = require('discord.js-commando');
const prefix = (process.env.BOT_PREFIX);
require('dotenv').config();


module.exports = class BroadcastCommand extends Commando.Command {
  constructor(client) {
    super(client, {
      name: 'broadcast',
      aliases: [
        'ebcast',
        'bcast',
        'bc',
        'ebc'
      ],
      group: 'ebs',
      memberName: 'broadcast',
      userPermissions: [
        'MANAGE_MESSAGES',
        'MANAGE_CHANNELS'
      ],
      description: 'Send an Emergency Broadcast to all text channels in the guild',
      examples: [
        `Usage: ${prefix}bc <message.content>`,
        `Details: '<>' flags indicate a required field. '[]' flags indicates an optional field.`,
        `Note: Do not include the '<>' or '[]' flags in the command.`
      ],
      args: [
        {
          key: 'text',
          prompt: 'What would you like the bot to announce?',
          type: 'string',
        },
      ],
    })
  };

  run(msg, { text }) {
    msg.guild.channels.cache
      .filter(channel => channel.type === 'text')
      .forEach((textChannel) => {
        textChannel.send(text, { tts: true }).then(sentMessage => {
          sentMessage.delete({ timeout: 108000000 }).catch(console.error);
        });
      })
  };
};
const Commando=require('discord.js Commando');
常量前缀=(process.env.BOT_前缀);
require('dotenv').config();
module.exports=类广播命令扩展Commando.Command{
建造商(客户){
超级(客户、{
名称:'广播',
别名:[
“电子广播”,
“bcast”,
“bc”,
“ebc”
],
组:“ebs”,
memberName:'广播',
用户权限:[
“管理_邮件”,
“管理频道”
],
描述:'向公会的所有文本频道发送紧急广播',
示例:[
`用法:${prefix}bc`,
`详细信息:“标志表示必填字段。”[]”标志表示可选字段。`,
`注意:不要在命令中包含“”或“[]”标志`
],
args:[
{
关键字:“文本”,
提示:“您希望机器人宣布什么?”,
键入:“字符串”,
},
],
})
};
运行(消息,{text}){
msg.guild.channels.cache
.filter(channel=>channel.type=='text')
.forEach((文本频道)=>{
发送(text,{tts:true})。然后(sentMessage=>{
sentMessage.delete(108000000).cache(console.error);
});
})
}
};
我们想知道如何设置为30分钟后自动删除邮件

我用这篇文章中的一个例子来说明自动删除的代码,它显然不适合我:

帮助我将其发送到所有频道的帖子来自:

我假设
sentMessage
标志出错,但我可能错了

任何帮助都将不胜感激

该机器人内置于
discord.js commando
,并使用
node.js^12.16.4
discord.js^12.0.1
。它从
discord.js Commando的
discordjs/Commando
主分支运行

---编辑---

感谢转到
T.Dirk
获得解决此问题的答案

如果有人想将固定代码用于任何事情,请参见:

broadcast.js

const Commando = require('discord.js-commando');
const prefix = (process.env.BOT_PREFIX);
require('dotenv').config();


module.exports = class BroadcastCommand extends Commando.Command {
  constructor(client) {
    super(client, {
      name: 'broadcast',
      aliases: [
        'ebcast',
        'bcast',
        'bc',
        'ebc'
      ],
      group: 'ebs',
      memberName: 'broadcast',
      userPermissions: [
        'MANAGE_MESSAGES',
        'MANAGE_CHANNELS'
      ],
      description: 'Send an Emergency Broadcast to all text channels in the guild',
      examples: [
        `Usage: ${prefix}bc <message.content>`,
        `Details: '<>' flags indicate a required field. '[]' flags indicates an optional field.`,
        `Note: Do not include the '<>' or '[]' flags in the command.`
      ],
      args: [
        {
          key: 'text',
          prompt: 'What would you like the bot to announce?',
          type: 'string',
        },
      ],
    })
  };

  run(msg, { text }) {
    msg.guild.channels.cache
      .filter(channel => channel.type === 'text')
      .forEach((textChannel) => {
        textChannel.send(text, { tts: true }).then(sentMessage => {
          sentMessage.delete({ timeout: 108000000 }).catch(console.error);
        });
      })
  };
};
const Commando=require('discord.js Commando');
常量前缀=(process.env.BOT_前缀);
require('dotenv').config();
module.exports=类广播命令扩展Commando.Command{
建造商(客户){
超级(客户、{
名称:'广播',
别名:[
“电子广播”,
“bcast”,
“bc”,
“ebc”
],
组:“ebs”,
memberName:'广播',
用户权限:[
“管理_邮件”,
“管理频道”
],
描述:'向公会的所有文本频道发送紧急广播',
示例:[
`用法:${prefix}bc`,
`详细信息:“标志表示必填字段。”[]”标志表示可选字段。`,
`注意:不要在命令中包含“”或“[]”标志`
],
args:[
{
关键字:“文本”,
提示:“您希望机器人宣布什么?”,
键入:“字符串”,
},
],
})
};
运行(消息,{text}){
msg.guild.channels.cache
.filter(channel=>channel.type=='text')
.forEach((文本频道)=>{
发送(text,{tts:true})。然后(sentMessage=>{
delete({timeout:108000000}).catch(console.error);
});
})
};
};

您找到并使用的自动删除代码基于Discord JS v11。在此版本中,函数只需要一个数字作为参数来设置删除超时

由于您使用的是Discord JS v12,因此代码略有更改。它采用的不是一个数字作为参数,而是一个选项对象。此选项对象可以有两个属性<代码>超时
原因
。因此,要解决问题,只需更改
.delete
参数,如下所示:

//请注意,在您的代码中,删除后有.cache
//但我猜你的意思是,接二连三的错误
delete({timeout:108000000}).catch(console.error);

正常-无错误。我认为这是有效的。将在大约10分钟内删除该邮件。