бот discord.js работает локально, но не на Heroku - PullRequest
0 голосов
/ 04 октября 2019

Я пытался запустить свой бот discord.js на Heroku, но у меня возникли проблемы с подключением бота к голосовым каналам. Всякий раз, когда я запускаю свой бот локально, все работает хорошо, но когда я размещаю его на Heroku, некоторые вещи не работают.

Мой bot.js выглядит так:

const Discord = require('discord.js');
const client = new Discord.Client();
const ffmpeg = require('ffmpeg');
const opus = require('opusscript');
const token = 'Hidden for obious reasons'
var isReady = true;

client.on('ready', () => {
    console.log(`Logged in as ${client.user.tag}!`);
});

client.on('message', message => {
     if (message.content === 'ping') {
       message.reply('Test message');
       client.channels.get('Our general chat').send('Test message 2')
      }
});

client.on('message', message => {
    if (message.content === 'join') {
      isReady = false;
      const voiceChannel = client.channels.get('ID of our voiceChannel');
      if (!voiceChannel) {
        client.channels.get('ID of our general chat').send('Can\'t get vc');
      }
      else {
        client.channels.get('ID of our general chat').send('Got here 1');
        voiceChannel.join();
        client.channels.get('ID of our general chat').send('Got here 2');
        isReady = true;
      }
    }
});

client.on('message', message => {
  if (message.content === 'leave') {
    isReady = false;
    const voiceChannel = client.channels.get('ID of our voiceChannel');
    voiceChannel.leave();
    isReady = true;
  }
});

client.on('voiceStateUpdate', (oldMember, newMember) => {
  if (isReady && newMember.id === 'My friends ID' && oldMember.voiceChannel === undefined && newMember.voiceChannel !== undefined)
  {
  isReady = false;
  var voiceChannel = client.channels.get('ID of our voiceChannel');
  voiceChannel.join().then(connection =>
  {
     // Play the file
     const dispatcher = connection.playFile('./clip.mp3');
     dispatcher.on("end", end => {
       voiceChannel.leave();
       });
   }).catch(err => console.log(err));
   isReady = true;
  }
});

client.login(token);

Хотяmy package.json выглядит так:

{
  "name": "mybot",
  "version": "1.0.0",
  "description": "Make It Say Dumb Thing",
  "main": "bot.js",
  "scripts": {
    "start": "node bot.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "discord.js": "^11.5.1",
    "ffmpeg": "0.0.4",
    "opusscript": "0.0.7"
  }
}

С моим Procfile просто:

worker: node bot.js

Когда я запускаю это локально на моей машине, все работает отлично. Однако, когда я размещаю это на Heroku, функция .join () не работает. Он выводит «Got here 1» и «Got here 2», но бот никогда не присоединяется к голосовому чату.

1 Ответ

0 голосов
/ 15 октября 2019

вы используете client.login(token);, а не client.login(process.env.token);.

Проблема в том, что вы не просите код просмотреть Vars.

это также отображается, потому что вы можетене устанавливайте .env right.

В heroku ENV находится под

(Ваше приложение)> Настройки> Config Vars.

, если они не настроены, этотакже проблема.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...