有没有办法我可以做一种单向vc bot的东西

如何解决有没有办法我可以做一种单向vc bot的东西

您好,有一种方法可以实现,这样您就可以拥有1种方式的vc,其中(到目前为止ive设置的方式)以某种方式连接了2个帐户(ive使2可以从一个jda项目运行) 然后在一个vc中拥有一个机器人,在另一个vc中拥有另一个机器人。 第一个bot听到vc的声音,然后第二个bot发出声音在第二个vc中共享 因此第一个vc中的人听不到第二个vc中的人,但是第二个vc中的人可以听到第一个vc中的人

顺便说一下,这就是我在一个jda项目中连接2个机器人的方式 Main.java:

public class Main {

    public static void main(String[] args){
        Bot bot = new Bot("token for bot 1");
        Bot2 bot2 = new Bot2("token for bot 2");
        bot.start();
        bot2.start();
    }

}

Bot.java:

import net.dv8tion.jda.api.JDABuilder;
import net.dv8tion.jda.api.hooks.ListenerAdapter;

import javax.security.auth.login.LoginException;

public class Bot {

    ListenerAdapter[] listenerAdapters= new ListenerAdapter[]{new Help()};
    String token;

    public Bot(String token) {
        this.token = token;
    }

    public void start() {
        JDABuilder jdaBuilder = JDABuilder.createDefault(token);
        jdaBuilder.addEventListeners(listenerAdapters);
        jdaBuilder.setActivity(Activity.watching("1!help"));

        try {
            JDA jda = jdaBuilder.build();
            jda.awaitReady();
        }   catch (LoginException | InterruptedException e){
                e.printStackTrace();
        }

    }

}

Bot2.java:

    import commands2.*;
    import net.dv8tion.jda.api.entities.Activity;
    import net.dv8tion.jda.api.JDA;
    import net.dv8tion.jda.api.JDABuilder;
    import net.dv8tion.jda.api.hooks.ListenerAdapter;
    
    import javax.security.auth.login.LoginException;
    
    public class Bot2 {
    
        ListenerAdapter[] listenerAdapters = new ListenerAdapter[]{new Help2()};
        String token;
    
        public Bot2(String token) {
            this.token = token;
        }
    
        public void start() {
            JDABuilder jdaBuilder = JDABuilder.createDefault(token);
            jdaBuilder.addEventListeners(listenerAdapters);
            jdaBuilder.setActivity(Activity.watching("2!help"));
        try {
            JDA jda = jdaBuilder.build();
            jda.awaitReady();
        }   catch (LoginException | InterruptedException e){
            e.printStackTrace();
        }

    }

}

这个想法可行吗? (顺便说一句,我想办法是在intellij中运行它,然后两个机器人都可以工作)

解决方法

我只会向您展示如何进行“从一个机器人到另一个机器人的音频流传输”。
实施完全取决于您(以及您是要通过命令激活它还是希望机器人在启动时加入特定渠道等)

为了能够跳过这一部分,我将假定两个机器人都已经在其专用通道中。

在开始之前,您必须对现有代码进行一些更改,因为以后可能需要它们:

{
    "cmake.sourceDirectory": "${workspaceFolder}/llvm","cmake.configureSettings": {
        "LLVM_ENABLE_PROJECTS" : "mlir","LLVM_BUILD_EXAMPLES" : "ON","LLVM_TARGETS_TO_BUILD" : "X86;NVPTX;AMDGPU","CMAKE_BUILD_TYPE" : "Release","LLVM_ENABLE_ASSERTIONS" : "ON","CMAKE_C_COMPILER" : "clang","CMAKE_CXX_COMPILER" : "clang++","LLVM_ENABLE_LLD" : "ON","PYTHON_EXECUTABLE" : "python3",}
}

我更改了代码,使其可以使用import net.dv8tion.jda.api.JDABuilder; import net.dv8tion.jda.api.hooks.ListenerAdapter; import javax.security.auth.login.LoginException; public class Bot { ListenerAdapter[] listenerAdapters= new ListenerAdapter[]{new Help()}; String token; // this is new JDA jda; public Bot(String token) { this.token = token; } public void start() { JDABuilder jdaBuilder = JDABuilder.createDefault(token); jdaBuilder.addEventListeners(listenerAdapters); jdaBuilder.setActivity(Activity.watching("1!help")); try { // and this changed as well this.jda = jdaBuilder.build(); jda.awaitReady(); } catch (LoginException | InterruptedException e){ e.printStackTrace(); } } } 通过JDA访问Bot实例。当然,这些更改也必须在Bot.jda中进行。

进行更改后,您必须实现一种方法,使漫游器可以加入其专用语音通道,但这取决于您。

您基本上想要的是将一个机器人收到的音频插入到另一个机器人发出的音频中。

幸运的是,JDA提供了example关于如何让漫游器播放接收到的音频的信息。在其中,您可以找到类Bot2

EchoHandler

该课程基本上为您完成所有艰苦的工作。您可以输入public static class EchoHandler implements AudioSendHandler,AudioReceiveHandler { /* All methods in this class are called by JDA threads when resources are available/ready for processing. The receiver will be provided with the latest 20ms of PCM stereo audio Note you can receive even while setting yourself to deafened! The sender will provide 20ms of PCM stereo audio (pass-through) once requested by JDA When audio is provided JDA will automatically set the bot to speaking! */ private final Queue<byte[]> queue = new ConcurrentLinkedQueue<>(); /* Receive Handling */ @Override // combine multiple user audio-streams into a single one public boolean canReceiveCombined() { // limit queue to 10 entries,if that is exceeded we can not receive more until the send system catches up return queue.size() < 10; } @Override public void handleCombinedAudio(CombinedAudio combinedAudio) { // we only want to send data when a user actually sent something,otherwise we would just send silence if (combinedAudio.getUsers().isEmpty()) return; byte[] data = combinedAudio.getAudioData(1.0f); // volume at 100% = 1.0 (50% = 0.5 / 55% = 0.55) queue.add(data); } /* Disable per-user audio since we want to echo the entire channel and not specific users. @Override // give audio separately for each user that is speaking public boolean canReceiveUser() { // this is not useful if we want to echo the audio of the voice channel,thus disabled for this purpose return false; } @Override public void handleUserAudio(UserAudio userAudio) {} // per-user is not helpful in an echo system */ /* Send Handling */ @Override public boolean canProvide() { // If we have something in our buffer we can provide it to the send system return !queue.isEmpty(); } @Override public ByteBuffer provide20MsAudio() { // use what we have in our buffer to send audio as PCM byte[] data = queue.poll(); return data == null ? null : ByteBuffer.wrap(data); // Wrap this in a java.nio.ByteBuffer } @Override public boolean isOpus() { // since we send audio that is received from discord we don't have opus but PCM return false; } } 并将其插入具有所需结果的AudioReceiveHandler中。
现在只剩下要做的事情了。

您希望第二个机器人播放第一个机器人的音频,就像这样:

(注意:您必须从AudioSendHandlerguild的jda实例中获取guild2Bot。)

Bot2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-