The bot can now actually interact with the API, fixed issues relating to leaving voice channels
This commit is contained in:
parent
fdc08575f3
commit
a6137436d2
4 changed files with 37 additions and 20 deletions
|
@ -9,12 +9,12 @@ const storage = multer.diskStorage({
|
||||||
cb(null, "/tmp/");
|
cb(null, "/tmp/");
|
||||||
},
|
},
|
||||||
filename: function(req, file, cb) {
|
filename: function(req, file, cb) {
|
||||||
cb(null, Date.now() + path.extname(file.originalname)); //Appending extension
|
cb(null, Date.now() + path.extname(file.originalname));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const upload = multer({ storage: storage });
|
const upload = multer({ storage: storage });
|
||||||
const app = express();
|
const app = express();
|
||||||
const port = 3000;
|
const port = process.env.API_PORT || 3000;
|
||||||
|
|
||||||
const formats = ["image/jpeg", "image/png", "image/webp", "image/gif"];
|
const formats = ["image/jpeg", "image/png", "image/webp", "image/gif"];
|
||||||
|
|
||||||
|
@ -39,8 +39,8 @@ app.post("/:method", upload.single("image"), async (req, res, next) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const data = await magick(object);
|
const data = await magick(object, true);
|
||||||
res.contentType(type).send(data);
|
res.send(data);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
next(e);
|
next(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,11 @@ module.exports = async (member, oldChannel) => {
|
||||||
} else {
|
} else {
|
||||||
waitMessage.delete();
|
waitMessage.delete();
|
||||||
connection.player.stop(connection.originalChannel.guild.id);
|
connection.player.stop(connection.originalChannel.guild.id);
|
||||||
|
soundPlayer.manager.leave(connection.originalChannel.guild.id);
|
||||||
|
connection.player.destroy();
|
||||||
|
soundPlayer.players.delete(connection.originalChannel.guild.id);
|
||||||
|
soundPlayer.queues.delete(connection.originalChannel.guild.id);
|
||||||
|
client.createMessage(connection.originalChannel.id, "🔊 The current voice channel session has ended.");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (member.id === connection.host) {
|
} else if (member.id === connection.host) {
|
||||||
|
@ -29,6 +34,11 @@ module.exports = async (member, oldChannel) => {
|
||||||
if (members.length === 0) {
|
if (members.length === 0) {
|
||||||
waitMessage.delete();
|
waitMessage.delete();
|
||||||
connection.player.stop(connection.originalChannel.guild.id);
|
connection.player.stop(connection.originalChannel.guild.id);
|
||||||
|
soundPlayer.manager.leave(connection.originalChannel.guild.id);
|
||||||
|
connection.player.destroy();
|
||||||
|
soundPlayer.players.delete(connection.originalChannel.guild.id);
|
||||||
|
soundPlayer.queues.delete(connection.originalChannel.guild.id);
|
||||||
|
client.createMessage(connection.originalChannel.id, "🔊 The current voice channel session has ended.");
|
||||||
} else {
|
} else {
|
||||||
const randomMember = random(members);
|
const randomMember = random(members);
|
||||||
soundPlayer.players.set(connection.voiceChannel.guild.id, { player: connection.player, type: connection.type, host: randomMember.id, voiceChannel: connection.voiceChannel, originalChannel: connection.originalChannel });
|
soundPlayer.players.set(connection.voiceChannel.guild.id, { player: connection.player, type: connection.type, host: randomMember.id, voiceChannel: connection.voiceChannel, originalChannel: connection.originalChannel });
|
||||||
|
@ -36,6 +46,13 @@ module.exports = async (member, oldChannel) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
} else if (member.id === client.user.id) {
|
||||||
|
connection.player.stop(connection.originalChannel.guild.id);
|
||||||
|
soundPlayer.manager.leave(connection.originalChannel.guild.id);
|
||||||
|
connection.player.destroy();
|
||||||
|
soundPlayer.players.delete(connection.originalChannel.guild.id);
|
||||||
|
soundPlayer.queues.delete(connection.originalChannel.guild.id);
|
||||||
|
await client.createMessage(connection.originalChannel.id, "🔊 The current voice channel session has ended.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
|
@ -2,22 +2,22 @@ const magick = require("../build/Release/image.node");
|
||||||
const fetch = require("node-fetch");
|
const fetch = require("node-fetch");
|
||||||
const { promisify } = require("util");
|
const { promisify } = require("util");
|
||||||
const FormData = require("form-data");
|
const FormData = require("form-data");
|
||||||
const { readFile } = require("fs").promises;
|
const fs = require("fs");
|
||||||
|
|
||||||
module.exports = async (object) => {
|
module.exports = async (object, fromAPI = false) => {
|
||||||
if (process.env.API === "true") {
|
if (process.env.API === "true" && !fromAPI) {
|
||||||
const params = [];
|
const params = [];
|
||||||
for (const element of Object.keys(object)) {
|
for (const element of Object.keys(object)) {
|
||||||
params.push(`${element}=${object[element]}`);
|
params.push(`${element}=${object[element]}`);
|
||||||
}
|
}
|
||||||
const form = new FormData();
|
const form = new FormData();
|
||||||
const data = await readFile(object.path);
|
form.append("image", fs.createReadStream(object.path));
|
||||||
form.append("image", data);
|
|
||||||
const req = await fetch(`${process.env.API_URL}/${object.cmd}?${params.join("&")}`, {
|
const req = await fetch(`${process.env.API_URL}/${object.cmd}?${params.join("&")}`, {
|
||||||
method: "POST",
|
method: "POST",
|
||||||
body: form
|
body: form,
|
||||||
|
headers: form.getHeaders()
|
||||||
});
|
});
|
||||||
return await req.buffer();
|
return object.cmd === "qrread" ? await req.json() : await req.buffer();
|
||||||
} else {
|
} else {
|
||||||
const data = await promisify(magick[object.cmd])(object);
|
const data = await promisify(magick[object.cmd])(object);
|
||||||
return data;
|
return data;
|
||||||
|
|
|
@ -10,7 +10,7 @@ const nodes = require("../lavanodes.json");
|
||||||
|
|
||||||
exports.players = new Map();
|
exports.players = new Map();
|
||||||
|
|
||||||
const queues = new Map();
|
exports.queues = new Map();
|
||||||
const skipVotes = new Map();
|
const skipVotes = new Map();
|
||||||
|
|
||||||
exports.manager;
|
exports.manager;
|
||||||
|
@ -54,9 +54,9 @@ exports.play = async (sound, message, music = false) => {
|
||||||
if (!music && this.manager.voiceStates.has(message.channel.guild.id) && this.players.get(message.channel.guild.id).type === "music") return client.createMessage(message.channel.id, `${message.author.mention}, I can't play a sound effect while playing music!`);
|
if (!music && this.manager.voiceStates.has(message.channel.guild.id) && this.players.get(message.channel.guild.id).type === "music") return client.createMessage(message.channel.id, `${message.author.mention}, I can't play a sound effect while playing music!`);
|
||||||
const node = this.manager.idealNodes[0];
|
const node = this.manager.idealNodes[0];
|
||||||
const { tracks } = await fetch(`http://${node.host}:${node.port}/loadtracks?identifier=${sound}`, { headers: { Authorization: node.password } }).then(res => res.json());
|
const { tracks } = await fetch(`http://${node.host}:${node.port}/loadtracks?identifier=${sound}`, { headers: { Authorization: node.password } }).then(res => res.json());
|
||||||
const oldQueue = queues.get(voiceChannel.guild.id);
|
const oldQueue = this.queues.get(voiceChannel.guild.id);
|
||||||
if (tracks.length === 0) return client.createMessage(message.channel.id, `${message.author.mention}, I couldn't find that song!`);
|
if (tracks.length === 0) return client.createMessage(message.channel.id, `${message.author.mention}, I couldn't find that song!`);
|
||||||
queues.set(voiceChannel.guild.id, oldQueue ? [...oldQueue, tracks[0].track] : [tracks[0].track]);
|
this.queues.set(voiceChannel.guild.id, oldQueue ? [...oldQueue, tracks[0].track] : [tracks[0].track]);
|
||||||
const connection = await this.manager.join({
|
const connection = await this.manager.join({
|
||||||
guild: voiceChannel.guild.id,
|
guild: voiceChannel.guild.id,
|
||||||
channel: voiceChannel.id,
|
channel: voiceChannel.id,
|
||||||
|
@ -105,21 +105,21 @@ exports.nextSong = async (message, connection, track, info, music, voiceChannel,
|
||||||
this.manager.leave(voiceChannel.guild.id);
|
this.manager.leave(voiceChannel.guild.id);
|
||||||
connection.destroy();
|
connection.destroy();
|
||||||
this.players.delete(voiceChannel.guild.id);
|
this.players.delete(voiceChannel.guild.id);
|
||||||
queues.delete(voiceChannel.guild.id);
|
this.queues.delete(voiceChannel.guild.id);
|
||||||
logger.error(error);
|
logger.error(error);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
connection.once("end", async (data) => {
|
connection.once("end", async (data) => {
|
||||||
if (data.reason === "REPLACED") return;
|
if (data.reason === "REPLACED") return;
|
||||||
const queue = queues.get(voiceChannel.guild.id);
|
const queue = this.queues.get(voiceChannel.guild.id);
|
||||||
const newQueue = queue.slice(1);
|
const newQueue = queue.slice(1);
|
||||||
queues.set(voiceChannel.guild.id, newQueue);
|
this.queues.set(voiceChannel.guild.id, newQueue);
|
||||||
await playingMessage.delete();
|
await playingMessage.delete();
|
||||||
if (newQueue.length === 0) {
|
if (newQueue.length === 0) {
|
||||||
this.manager.leave(voiceChannel.guild.id);
|
this.manager.leave(voiceChannel.guild.id);
|
||||||
connection.destroy();
|
connection.destroy();
|
||||||
this.players.delete(voiceChannel.guild.id);
|
this.players.delete(voiceChannel.guild.id);
|
||||||
queues.delete(voiceChannel.guild.id);
|
this.queues.delete(voiceChannel.guild.id);
|
||||||
if (music) await client.createMessage(message.channel.id, "🔊 The current voice channel session has ended.");
|
if (music) await client.createMessage(message.channel.id, "🔊 The current voice channel session has ended.");
|
||||||
} else {
|
} else {
|
||||||
const track = await fetch(`http://${connection.node.host}:${connection.node.port}/decodetrack?track=${encodeURIComponent(newQueue[0])}`, { headers: { Authorization: connection.node.password } }).then(res => res.json());
|
const track = await fetch(`http://${connection.node.host}:${connection.node.port}/decodetrack?track=${encodeURIComponent(newQueue[0])}`, { headers: { Authorization: connection.node.password } }).then(res => res.json());
|
||||||
|
@ -136,7 +136,7 @@ exports.stop = async (message) => {
|
||||||
const connection = this.players.get(message.channel.guild.id).player;
|
const connection = this.players.get(message.channel.guild.id).player;
|
||||||
connection.destroy();
|
connection.destroy();
|
||||||
this.players.delete(message.channel.guild.id);
|
this.players.delete(message.channel.guild.id);
|
||||||
queues.delete(message.channel.guild.id);
|
this.queues.delete(message.channel.guild.id);
|
||||||
await client.createMessage(message.channel.id, "🔊 The current voice channel session has ended.");
|
await client.createMessage(message.channel.id, "🔊 The current voice channel session has ended.");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -206,7 +206,7 @@ exports.queue = async (message) => {
|
||||||
if (!message.channel.guild.members.get(client.user.id).voiceState.channelID) return client.createMessage(message.channel.id, `${message.author.mention}, I'm not in a voice channel!`);
|
if (!message.channel.guild.members.get(client.user.id).voiceState.channelID) return client.createMessage(message.channel.id, `${message.author.mention}, I'm not in a voice channel!`);
|
||||||
if (!message.channel.guild.members.get(client.user.id).permission.has("addReactions") && !message.channel.permissionsOf(client.user.id).has("addReactions")) return `${message.author.mention}, I don't have the \`Add Reactions\` permission!`;
|
if (!message.channel.guild.members.get(client.user.id).permission.has("addReactions") && !message.channel.permissionsOf(client.user.id).has("addReactions")) return `${message.author.mention}, I don't have the \`Add Reactions\` permission!`;
|
||||||
if (!message.channel.guild.members.get(client.user.id).permission.has("embedLinks") && !message.channel.permissionsOf(client.user.id).has("embedLinks")) return `${message.author.mention}, I don't have the \`Embed Links\` permission!`;
|
if (!message.channel.guild.members.get(client.user.id).permission.has("embedLinks") && !message.channel.permissionsOf(client.user.id).has("embedLinks")) return `${message.author.mention}, I don't have the \`Embed Links\` permission!`;
|
||||||
const queue = queues.get(message.channel.guild.id);
|
const queue = this.queues.get(message.channel.guild.id);
|
||||||
const player = this.players.get(message.channel.guild.id).player;
|
const player = this.players.get(message.channel.guild.id).player;
|
||||||
const tracks = await fetch(`http://${player.node.host}:${player.node.port}/decodetracks`, { method: "POST", body: JSON.stringify(queue), headers: { Authorization: player.node.password, "Content-Type": "application/json" } }).then(res => res.json());
|
const tracks = await fetch(`http://${player.node.host}:${player.node.port}/decodetracks`, { method: "POST", body: JSON.stringify(queue), headers: { Authorization: player.node.password, "Content-Type": "application/json" } }).then(res => res.json());
|
||||||
const trackList = [];
|
const trackList = [];
|
||||||
|
|
Loading…
Reference in a new issue