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"
}
}