The problem with connecting two bots.
I'm developing a functionality to relay a message from one source to multiple Discord channels simultaneously. I need to use commands from one bot to redirect the connection for another bot. Currently, it's not working as expected:
When bot A is called --> Bot A joins the channel.
When bot B is subsequently called --> Bot A joins the channel again
(and vice versa).
I would be extremely grateful for any assistance because this issue is now causing all the work to come to a halt.

2 Replies
- What's your exact discord.js
npm list discord.js
and node node -v
version?
- Not a discord.js issue? Check out #other-js-ts.
- Consider reading #how-to-get-help to improve your question!
- Explain what exactly your issue is.
- Post the full error stack trace, not just the top part!
- Show your code!
- Issue solved? Press the button!Code MAIN:
Second bot:
Deps:
Oh... Really... Thx
let mainBotConnections = new Map();
mainBot.on('interactionCreate', async (interaction) => {
const { commandName, options } = interaction;
if (commandName === 'join-main-bot') {
const userVoiceChannelId = interaction.member?.voice?.channelId;
if (!userVoiceChannelId) {
return interaction.reply('ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅, ΡΡΠΎΠ±Ρ Π±ΠΎΡ ΠΌΠΎΠ³ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ.');
}
const isAdmin = interaction.member.permissions.has('ADMINISTRATOR');
if (!isAdmin) {
return interaction.reply('Π£ Π²Π°Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠ°Π² Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.');
}
try {
const connectionMain = joinVoiceChannel({
channelId: userVoiceChannelId,
guildId: interaction.guildId,
adapterCreator: interaction.guild.voiceAdapterCreator,
});
const audioPlayerMain = createAudioPlayer();
mainBotConnections.set(interaction.guildId, { connection: connectionMain, audioPlayer: audioPlayerMain });
connectionMain.subscribe(audioPlayerMain);
audioPlayerMain.on(AudioPlayerStatus.Playing, () => {
console.log('[MAIN] ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΠΎΡΡ.');
});
audioPlayerMain.on(AudioPlayerStatus.Idle, () => {
playNextAudio();
});
audioPlayerMain.on('error', error => {
console.error("[ΠΡΠΈΠ±ΠΊΠ°]", error);
});
connectionMain.on('error', (error) => {
console.error('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ:', error);
});
interaction.reply('ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ!');
} catch (error) {
interaction.reply('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ: ' + error.message);
}
}
let mainBotConnections = new Map();
mainBot.on('interactionCreate', async (interaction) => {
const { commandName, options } = interaction;
if (commandName === 'join-main-bot') {
const userVoiceChannelId = interaction.member?.voice?.channelId;
if (!userVoiceChannelId) {
return interaction.reply('ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅, ΡΡΠΎΠ±Ρ Π±ΠΎΡ ΠΌΠΎΠ³ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ.');
}
const isAdmin = interaction.member.permissions.has('ADMINISTRATOR');
if (!isAdmin) {
return interaction.reply('Π£ Π²Π°Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠ°Π² Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.');
}
try {
const connectionMain = joinVoiceChannel({
channelId: userVoiceChannelId,
guildId: interaction.guildId,
adapterCreator: interaction.guild.voiceAdapterCreator,
});
const audioPlayerMain = createAudioPlayer();
mainBotConnections.set(interaction.guildId, { connection: connectionMain, audioPlayer: audioPlayerMain });
connectionMain.subscribe(audioPlayerMain);
audioPlayerMain.on(AudioPlayerStatus.Playing, () => {
console.log('[MAIN] ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΠΎΡΡ.');
});
audioPlayerMain.on(AudioPlayerStatus.Idle, () => {
playNextAudio();
});
audioPlayerMain.on('error', error => {
console.error("[ΠΡΠΈΠ±ΠΊΠ°]", error);
});
connectionMain.on('error', (error) => {
console.error('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ:', error);
});
interaction.reply('ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ!');
} catch (error) {
interaction.reply('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ: ' + error.message);
}
}
if (commandName === 'join-second-bot') {
const userVoiceChannelId = interaction.member?.voice?.channelId;
const guildId = interaction.guildId;
if (!userVoiceChannelId) {
return interaction.reply('ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅, ΡΡΠΎΠ±Ρ Π±ΠΎΡ ΠΌΠΎΠ³ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ.');
}
const isAdmin = interaction.member.permissions.has('ADMINISTRATOR');
if (!isAdmin) {
return interaction.reply('Π£ Π²Π°Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠ°Π² Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.');
}
try {
secondBot.joinSecondBotToVoice(userVoiceChannelId, guildId);
interaction.reply('ΠΡΠΎΡΠΎΠΉ Π±ΠΎΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ!');
} catch (error) {
interaction.reply('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ: ' + error.message);
}
}
});
if (commandName === 'join-second-bot') {
const userVoiceChannelId = interaction.member?.voice?.channelId;
const guildId = interaction.guildId;
if (!userVoiceChannelId) {
return interaction.reply('ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡΡ Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΠΊΠ°Π½Π°Π»Π΅, ΡΡΠΎΠ±Ρ Π±ΠΎΡ ΠΌΠΎΠ³ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ.');
}
const isAdmin = interaction.member.permissions.has('ADMINISTRATOR');
if (!isAdmin) {
return interaction.reply('Π£ Π²Π°Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠ°Π² Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.');
}
try {
secondBot.joinSecondBotToVoice(userVoiceChannelId, guildId);
interaction.reply('ΠΡΠΎΡΠΎΠΉ Π±ΠΎΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ!');
} catch (error) {
interaction.reply('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ: ' + error.message);
}
}
});
const secondBot = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.DirectMessages,
GatewayIntentBits.MessageContent,
],
});
secondBot.once('ready', () => {
console.log('ΠΡΠΎΡΠΎΠΉ Π±ΠΎΡ Π·Π°ΠΏΡΡΠ΅Π½!');
});
let secondBotConnections = new Map();
const joinSecondBotToVoice = async (channelId, guildId) => {
try {
const userVoiceChannelId = channelId;
const adapterCreator = secondBot.guilds.cache.get(guildId).voiceAdapterCreator;
const connectionSecond = joinVoiceChannel({
channelId: userVoiceChannelId,
guildId: guildId,
adapterCreator: adapterCreator,
});
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ audioPlayer Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ°
const audioPlayerSecond = createAudioPlayer();
secondBotConnections.set(guildId, { connection: connectionSecond, audioPlayer: audioPlayerSecond });
connectionSecond.subscribe(audioPlayerSecond);
audioPlayerSecond.on(AudioPlayerStatus.Playing, () => {
console.log('[SECOND] ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΠΎΡΡ.');
});
audioPlayerSecond.on(AudioPlayerStatus.Idle, () => {
playNextAudio();
});
audioPlayerSecond.on('error', error => {
console.error("[SECOND ΠΡΠΈΠ±ΠΊΠ°]", error);
});
connectionSecond.on('error', (error) => {
console.error('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ°:', error);
});
console.log('ΠΡΠΎΡΠΎΠΉ Π±ΠΎΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ!');
} catch (error) {
console.log('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ: ' + error.message);
}
};
const secondBot = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.GuildMembers,
GatewayIntentBits.DirectMessages,
GatewayIntentBits.MessageContent,
],
});
secondBot.once('ready', () => {
console.log('ΠΡΠΎΡΠΎΠΉ Π±ΠΎΡ Π·Π°ΠΏΡΡΠ΅Π½!');
});
let secondBotConnections = new Map();
const joinSecondBotToVoice = async (channelId, guildId) => {
try {
const userVoiceChannelId = channelId;
const adapterCreator = secondBot.guilds.cache.get(guildId).voiceAdapterCreator;
const connectionSecond = joinVoiceChannel({
channelId: userVoiceChannelId,
guildId: guildId,
adapterCreator: adapterCreator,
});
// Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ audioPlayer Π΄Π»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ°
const audioPlayerSecond = createAudioPlayer();
secondBotConnections.set(guildId, { connection: connectionSecond, audioPlayer: audioPlayerSecond });
connectionSecond.subscribe(audioPlayerSecond);
audioPlayerSecond.on(AudioPlayerStatus.Playing, () => {
console.log('[SECOND] ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ°Π»ΠΎΡΡ.');
});
audioPlayerSecond.on(AudioPlayerStatus.Idle, () => {
playNextAudio();
});
audioPlayerSecond.on('error', error => {
console.error("[SECOND ΠΡΠΈΠ±ΠΊΠ°]", error);
});
connectionSecond.on('error', (error) => {
console.error('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° Π² Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ°:', error);
});
console.log('ΠΡΠΎΡΠΎΠΉ Π±ΠΎΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΠ»ΡΡ ΠΊ Π²Π°ΡΠ΅ΠΌΡ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ!');
} catch (error) {
console.log('ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ Π±ΠΎΡΠ° ΠΊ Π³ΠΎΠ»ΠΎΡΠΎΠ²ΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ: ' + error.message);
}
};
{
"dependencies": {
"@discordjs/opus": "^0.9.0",
"@discordjs/voice": "^0.16.0",
"cookie-parser": "^1.4.6",
"discord.js": "^14.11.0",
"ejs": "^3.1.9",
"express": "^4.18.2",
"express-session": "^1.17.3",
"lamejs": "^1.2.1",
"node-lame": "^1.3.2",
"opusscript": "^0.0.8",
"unirest": "^0.6.0",
"ws": "^8.13.0"
}
}
{
"dependencies": {
"@discordjs/opus": "^0.9.0",
"@discordjs/voice": "^0.16.0",
"cookie-parser": "^1.4.6",
"discord.js": "^14.11.0",
"ejs": "^3.1.9",
"express": "^4.18.2",
"express-session": "^1.17.3",
"lamejs": "^1.2.1",
"node-lame": "^1.3.2",
"opusscript": "^0.0.8",
"unirest": "^0.6.0",
"ws": "^8.13.0"
}
}