Discord.js删除功能

时间:2020-04-23 20:19:36

标签: javascript discord.js

我的问题是,尝试删除Discord中的消息时收到错误消息。

client.on('message', msg => {

    if(msg.content.startsWith(".del ")) {

      msg.delete(1000); //Supposed to delete message

    }
});

我收到此错误:

C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ structures \ Message.js:501 如果(typeof options!=='object')抛出新的TypeError('INVALID_TYPE','options','object',true); ^

TypeError [INVALID_TYPE]:提供的选项不是对象。 在Message.delete(C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ structures \ Message.js:501:44) 在客户处。 (C:\ Users --- \ Desktop \ Test \ index.js:51:17) 在Client.emit(events.js:310:20) 在MessageCreateAction.handle(C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ client \ actions \ MessageCreate.js:31:14) 在Object.module.exports [作为MESSAGE_CREATE](C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ client \ websocket \ handlers \ MESSAGE_CREATE.js:4:32) 在WebSocketManager.handlePacket(C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketManager.js:386:31) 在WebSocketShard.onPacket上(C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard.js:436:22) 在WebSocketShard.onMessage(C:\ Users --- \ Desktop \ Test \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard.js:293:10) 在WebSocket.onMessage(C:\ Users --- \ Desktop \ Test \ node_modules \ ws \ lib \ event-target.js:120:16) 在WebSocket.emit(events.js:310:20){ }

我也尝试过message.delete(1000),但是它收到一条错误消息,告诉我消息未定义。

当我删除尝试删除邮件的代码时,该程序将运行。

9 个答案:

答案 0 :(得分:3)

如错误消息所述,您无需将任何内容或对象传递给delete方法。

您可以查询in the documentation。您想要做的就是这样:

client.on('message', msg => {
  if(msg.content.startsWith(".del ")) {

    msg.delete({timeout: 1000}); //Supposed to delete message

  }
});

答案 1 :(得分:2)

通过将 msg.delete(3000) 删除为 msg.delete({ timeout: 3000 }) 来更改您的代码,这应该可以修复错误,因为它在 discord.js v12 中已更改。

您可以比较文档 - https://www.npmjs.com/package/discord.js-v11
您可以比较文档 - https://discord.js.org/#/

答案 2 :(得分:1)

如果您想在延迟后删除消息:

setTimeout(function() {
  msg.delete();
}, 1000) // Time in miliseconds, 1s = 1000ms

如果你想删除它,请使用:

msg.delete();

简单代码(1秒后删除命令消息):

client.on('message', msg => {
    if(msg.content.startsWith(".del ")) {
      setTimeout(function() {
          msg.delete();
      }, 1000)
    }
});

错误 message is not defined 向您显示,因为您在 client.on('message', msg.. 处定义了 msg

答案 3 :(得分:1)

注意: delete() 方法/函数的超时参数将在 v13 djs 中被弃用(文档中未提及)。因此您可以使用 {{1 }} 函数用于延迟。

setTimeout()

答案 4 :(得分:1)

有两种方法可以做到

  1. SetTimeout 方法

    <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
      <Button style={{ width: 30, height: 30 }} />
      <Text>MODES</Text>
      <View style={{ width: 30 }} />
    </View>
    
  2. 您可以在命令的参数中添加超时

    只是代替

    setTimeout(() => { msg.delete() }, 1000 // <- change this according to your requirement in miliseconds)

    msg.delete(3000);

  3. 要进行批量删除,您可以这样做

    msg.delete({ timeout: 1000});

    这可以帮助您删除多达 100 条消息。

您可以在此处比较文档 - Discord.js v11Discord.js v12

答案 5 :(得分:0)

如果您希望延迟删除邮件:

setTimeout(function(){
  msg.delete()
}, 1000) // this is the number of miliseconds for the delay

如果您想立即将其删除,

msg.delete()

答案 6 :(得分:0)

您几乎正确的,我可以看到您使用v12,因此功能已更改,因此要纠正错误的第一件事是将msg.delete(3000)更改为msg.delete({ timeout: 3000 }),这应该可以解决您看到的错误v11不会使用要求您这样做,但是v12仍然会这样做,我认为我已经在这里解决了这个问题,请将此标记为已回答。如果您将Discord.JS机器人公开,然后将配置添加到该机器人中并制作命令文件,那么我有个建议,这样您就不必制作一个大的凌乱文件并使用诸如if(!message.content.includes("**prefixhere**") return;这样的前缀语句,而忽略所有没有前缀的消息,然后您需要将消息拆分为 ["prefix", "cmd", "args"],应该可以正常工作。感谢您让我帮助您。

答案 7 :(得分:0)

如果您尝试添加延迟,之前的回复提供了许多示例。如果您尝试删除一定数量的邮件,则需要使用 message.channel.bulkDelete(varName)。删除大量消息的方法是批量删除,我也会提到,一次只能删除1-100条消息。

答案 8 :(得分:0)

使用它在超时(以毫秒为单位)中删除消息:

msg.delete({ timeout: 1000});

或者通过这个立即删除:

msg.delete();