【问题标题】:How to distract a file from a discord channel and send it to another discord channel?如何从不和谐频道分散文件并将其发送到另一个不和谐频道?
【发布时间】:2020-11-16 01:31:36
【问题描述】:

我已经关注了:

if (message.channel.id === 'CHANNEL ID 1') {
  if (message.attachments.size >= 1 ) {
    client.channels.cache.get('CHANNEL ID 2').send(`${message.author}: TEST SUCCESFULL`);
  }
}

但现在我想要的是文件而不是 "TEST SUCCESFULL",所以它将文件发送到另一个频道。如果可能的话,我想让你在频道 1 中发送一个文件,该文件在频道 1 中被删除(并发送到频道 2)

我希望你们能帮助我并理解这个问题! 亲切的问候。

【问题讨论】:

  • 那么你用什么,discord.js 还是 java? JS 和 Java 是完全不同的语言...
  • 很抱歉,我提到了 Discord.js

标签: javascript discord discord.js


【解决方案1】:

完全理解!据我了解,该过程将是:

  1. 检查文件是否有附件(您已经这样做了)。
  2. 将文件发送到其他频道。
  3. 从原始频道中删除文件。

但是,这不适用于大小超过 8 MB 的文件,因为机器人仅限于 8 MB 文件(与最多可以上传 100 MB 的 Nitro 用户不同)。所以你在这里有两个选择:(A) 要么从消息中获取链接(但是你将无法删除该消息),要么 (B) 处理超过 8 MB 的消息(忽略它们或仅删除它们,无需重新上传)。

我提供的两种解决方案也适用于图像和视频。如果您不想这样,只需检查附件是否有宽度(例如attachments[0].width == null)。如果有宽度,则文件是图像或视频。否则,它就是一个文件。

选项 A

您首先必须从消息中提取链接,然后将该链接发布到新频道中。这很简单。

// The incoming message is `message`.
if (message.channel.id === 'CHANNEL ID 1') {
  // No need for a size check since this will be run 0 times if
  // there are no attachments.
  message.attachments.each(attachment => {
    client.channels.cache.get('CHANNEL ID 2').send(attachment.url);
  });
}

但是在这种情况下,您不能删除该消息,否则该文件也会从 Discord 的服务器中删除。

选项 B

这会将原始邮件的附件发送到另一个频道。

// The incoming message is `message`.
if (message.channel.id === 'CHANNEL ID 1') {
  if (message.attachments.size > 0) {
    // Size check (8000000 bytes is 8 MB)
    if (attachment.size > 8000000) { /* Pick an option below. */ }

    client.channels.cache.get('CHANNEL ID 2')
      .send({
        "files": message.attachments.map(attachment => attachment.url)
      });
  }
}

在这种情况下,message.attachments.map(...) 是包含已发送附件的 URL 数组。这些将被下载并发送回 Discord。如果文件超过 8 MB 会发生什么取决于您,但两者都以根本不发送消息而告终。

选项 B.1

您可以选择不转发消息,而是完全不做任何事情。原始消息被保留,没有任何东西被发送到另一个频道。

if (attachment.size > 8000000) { return; /* Ends the entire function. */ }

如果您打算在这部分代码之后执行其他操作,您可以简单地否定表达式(即 attachment.size < 8000000)并将发送语句 (client.channels.cache...) 包含在该 if 语句中。

选项 B.2

您可以选择在不转发消息的情况下删除消息,并发送友好的错误消息或类似消息。如果要发送的文件是机密文件或类似文件,建议使用此选项。

if (attachment.size > 8000000) {
  message.delete();
  message.channel.send("Sorry, but your file was too large!");
  return;
}

您可以将message.delete 之后的语句替换为您想要的任何内容。请注意,此消息还带有return,只是为了确保机器人不会尝试上传文件(它肯定会失败)。

【讨论】:

  • 非常感谢!我终于可以结束 4 小时的头脑风暴了!
猜你喜欢
  • 2020-05-07
  • 1970-01-01
  • 2021-01-19
  • 2021-11-05
  • 2019-04-11
  • 2021-10-29
  • 2020-01-23
  • 2021-09-15
  • 1970-01-01
相关资源
最近更新 更多