Adding proper support for audio messages via bot

This commit is contained in:
Raven Scott 2024-06-15 03:03:43 -04:00
parent 2cf819553a
commit 487bc13970
3 changed files with 33 additions and 5 deletions

View File

@ -0,0 +1,10 @@
export default {
handler: function(bot, args, message) {
// Specify the path to the audio file you want to send
const audioFilePath = '/Users/raven/discord-linux.mp3'; // Replace with the actual audio file path
const audioType = 'audio'; // Specify the correct audio file type
// Send the audio message using the bot instance
bot.sendAudioMessage(audioFilePath, audioType);
}
};

View File

@ -114,7 +114,7 @@ class Client extends EventEmitter {
if (msgType === "audio") { if (msgType === "audio") {
const audioBuffer = await this.drive.get(`/audio/${messageObj.audioName}`); const audioBuffer = await this.drive.get(`/audio/${messageObj.audioName}`);
this.emit('onAudio', peer, new AudioMessage(peerName, peerAvatar, this.currentTopic, timestamp, `http://localhost:${this.servePort}/audio/${messageObj.audioName}`, messageObj.audioType)); this.emit('onAudio', peer, new AudioMessage(peerName, peerAvatar, this.currentTopic, timestamp, `http://localhost:${this.servePort}/audio/${messageObj.audioName}`, messageObj.audioType, messageObj.audioData));
} }
} }
}); });
@ -163,6 +163,20 @@ class Client extends EventEmitter {
} }
} }
async sendAudioMessage(filePath, audioType) {
try {
await this.drive.ready();
const audioBuffer = fs.readFileSync(filePath);
const audioName = path.basename(filePath);
await this.drive.put(`/audio/${audioName}`, audioBuffer);
const audioUrl = `http://localhost:${this.servePort}/audio/${audioName}`;
const audioMessage = AudioMessage.new(this, audioUrl, audioType, audioBuffer); // Pass audioBuffer to the new method
this.sendMessage(audioMessage);
} catch (error) {
console.error('Error sending audio message:', error);
}
}
sendMessage(message) { sendMessage(message) {
if (!(message instanceof Message)) { if (!(message instanceof Message)) {
console.error(`message does not extend Message class (TextMessage, FileMessage, AudioMessage).`, message); console.error(`message does not extend Message class (TextMessage, FileMessage, AudioMessage).`, message);

View File

@ -1,22 +1,26 @@
import Message from "./Message.js"; import Message from "./Message.js";
import b4a from "b4a";
class AudioMessage extends Message { class AudioMessage extends Message {
constructor(peerName, peerAvatar, topic, timestamp, audioUrl, audioType) { constructor(peerName, peerAvatar, topic, timestamp, audioUrl, audioType, audioData) {
super("audio", peerName, peerAvatar, topic, timestamp); super("audio", peerName, peerAvatar, topic, timestamp);
this.audioUrl = audioUrl; this.audioUrl = audioUrl;
this.audioType = audioType; this.audioType = audioType;
this.audioData = audioData; // Add audio data property
} }
toJsonString() { toJsonString() {
return JSON.stringify({ return JSON.stringify({
...this.toJson(), ...this.toJson(),
audioUrl: this.audioUrl, audioUrl: this.audioUrl,
audioType: this.audioType audioType: this.audioType,
audio: this.audioData // Include audio data in JSON
}); });
} }
static new(bot, audioUrl, audioType) { static new(bot, audioUrl, audioType, audioBuffer) {
return new AudioMessage(bot.botName, bot.botAvatar, bot.currentTopic, Date.now(), audioUrl, audioType); const audioData = b4a.toString(audioBuffer, 'base64'); // Convert audio buffer to base64
return new AudioMessage(bot.botName, bot.botAvatar, bot.currentTopic, Date.now(), audioUrl, audioType, audioData);
} }
} }