使用不和谐机器人从用户那里接收音频 [英] receive audio form a user with discord bot

查看:23
本文介绍了使用不和谐机器人从用户那里接收音频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在做一个不和谐的项目,在那个项目中我需要录制用户的声音,我正在关注 this 文档.

I'm working on a discord project and in that project i need to record a user voice, i'm following this document.

到目前为止,这是我写的:

so far this is what i wrote:

const fs = require('fs');
const Discord = require('discord.js');
const client = new Discord.Client();

client.once('ready', () => {
    console.log('Ready!');
});

client.on('message', async message => {
    if (message.content === 'a' && message.member.voice.channel) {
        const connection = await message.member.voice.channel.join();
        const audio = connection.receiver.createStream('user_id?', { mode: 'pcm' });
        audio.pipe(fs.createWriteStream('user_audio'));
    }
});

client.login('token');

但问题是 user_audio 文件总是空的!

but the problem is that always the user_audio file is empty!

推荐答案

这是discord.js中的一个bug,要解决这个问题我们需要播放音频...

This is a bug in discord.js, to solve this problem we need to play an audio...

const fs = require('fs');
const Discord = require('discord.js');
const client = new Discord.Client();
const { Readable } = require('stream');

const SILENCE_FRAME = Buffer.from([0xF8, 0xFF, 0xFE]);

class Silence extends Readable {
  _read() {
    this.push(SILENCE_FRAME);
    this.destroy();
  }
}

client.once('ready', () => {
    console.log('Ready!');
});

client.on('message', async message => {
    if (message.content === 's' && message.member.voice.channel) {
        const connection = await message.member.voice.channel.join();
        const audio = connection.receiver.createStream(message, { mode: 'pcm', end: 'manual' });
        audio.pipe(fs.createWriteStream('user_audio'));

        connection.play(new Silence(), { type: 'opus' });
        console.log(message.member.user.id);
    }
});

client.login('token');

这篇关于使用不和谐机器人从用户那里接收音频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆