javascript - Discord.js();如何发送文件(总是发送0字节文件?)

标签 javascript node.js discord.js

我在使用 ytdl 下载文件后发送文件时遇到问题。我注意到这很奇怪,只要我手动命名它而不是标题,它就会成功地将文件发送到服务器...否则它只会将 0 字节文件发送到我的服务器。我尝试在我的标题方案上运行各种字符串方法,认为这可能是错误的,但这不起作用。我有预感,这可能与以下因素有关: https://github.com/hydrabolt/discord.js/issues/1907

但是我不知道我一无所知。任何帮助将不胜感激。以下是我的来源。我在发送文件时遇到问题的功能是命令 === 'ytm'

const Discord = require('discord.js');  //need discord.js library of course.
const config = require("./config.json"); //load up the token and prefix from our object configuration file.
const bot = new Discord.Client();  //establishing the bot as the client. "bot" means "client" when looking at the documentation!


bot.on('ready', () => {
  console.log('I am ready!');
});

bot.on('message', message => {

  if(message.author.bot) return; //prevents the bot from reacting to itself.
  if(message.content.indexOf(config.prefix) !== 0) return; //reads out the first character of the message, and if its not our prefix we don't do break away

  const args = message.content.slice(config.prefix.length).trim().split(/ +/g); //setting up to split things into arguments for handling commands, and usage of the prefix
  const command = args.shift().toLowerCase();

  if (command === 'ping') {
    message.channel.send('pong');
    //console.log(args);
    //console.log(command);
  }


  if (command === 'ytm') {
     const fs = require('fs');
     const ytdl = require('ytdl-core');
     url = args[0];
     //console.log(ytdl.getURLVideoID(url));
     //tried to actually work with the "title" information outside of the callback. apparently impossible? 
     ytdl.getInfo(url,function(err, info){
         var title = info['title'];
         var length = title.length;
         title = title.substring(0, (length / 3));
         title = title.trim();
         title = './' + title + '.mp3'
         console.log(title);
         //console.log(info['size']);
         ytdl(url, {filter:'audioonly', format:'mp3'}).pipe(fs.createWriteStream(title.toString()));
         message.channel.send("Here's your mp3, boi.", {files:[(title)]}); 
         //message.channel.sendFile(('./' + title), title, 'Heres your mp3, boi,'); //deprecated?      
         })

  }





});

bot.login(config.token);

最佳答案

问题是您尝试将 title 变量作为文件发送,您已通过执行 title = './' + title + '.mp3' 显式将其设置为字符串。您的问题是您尝试发送视频而不是视频文件。 ytdl-core 是一个明确用于流式传输视频而不是下载视频的模块。要获取和发送 MP3 文件,您必须使用 youtube-dl相反(ytdl-core 是基于什么)。当文件下载完成时,这将发出一个事件,然后您可以通过 Discord.js 发送该事件。

关于javascript - Discord.js();如何发送文件(总是发送0字节文件?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47424406/

相关文章:

javascript - 触发 Google 跟踪代码管理器 jQuery

javascript - 尝试获取谷歌日期范围过滤器的日期范围边界

node.js - NodeJS https请求中的证书问题

angularjs - 如何将 Passport js 与客户端模板一起使用?

node.js - 编写 AngularJs 应用程序时 Jade 或 Handlebars 有什么用

node.js - Discord.js 播放音频文件错误

javascript - 某些文档中的 new "[,"意味着什么?

javascript - 在 promise 解决后从函数返回结果

javascript - Discord bot TypeError : client. guilds.forEach 不是函数

javascript - Discord.JS - 使用角色将 Discord 中的用户移动到您的 VC