如何用InsanusMokrassar/TelegramBotAPI从本地OGG文件发语音消息
解决ktgbotapi发送包内.ogg语音的问题
要从程序包内的.ogg文件创建VoiceFile并发送,核心是用MultipartFileVoiceFile(对应本地文件/流上传场景),步骤如下:
1. 获取包内资源的输入流
假设你的.ogg文件放在项目resources/voices/目录下(比如resources/voices/voice1.ogg),用类加载器获取输入流:
val voiceStream = YourBotClass::class.java.classLoader.getResourceAsStream("voices/voice1.ogg") ?: error("找不到指定的语音文件,请检查资源路径")
2. 构建MultipartFile
把输入流转换成ktgbotapi所需的MultipartFile:
val multipartVoice = MultipartFile.fromStream( inputStream = voiceStream, filename = "voice1.ogg" // 文件名会传给Telegram,可自定义 )
3. 创建VoiceFile对象
用MultipartFileVoiceFile包装上面的MultipartFile:
val voiceFile = MultipartFileVoiceFile(multipartVoice)
4. 发送语音消息
调用sendVoice方法发送到目标群组:
bot.sendVoice( chatId = yourGroupChatId, // 替换为你的群组ID(Long类型) voice = voiceFile, duration = 15 // 可选:设置语音时长(单位:秒) )
额外提示
- 如果要随机发送多个包内语音,可以先枚举
resources/voices/下的所有文件,随机选一个再重复上述步骤 - 确保打包后资源文件被正确包含在jar/artifact中(Gradle/Maven默认会打包resources目录下的文件)
- 若使用Kotlin多平台(如JS/Native),资源读取方式会有差异,JVM环境下上述代码完全适用
内容的提问来源于stack exchange,提问作者madhead
相关产品推荐
相关产品推荐

