@Rosin886
JavaScript and Python Developer

Не работает одна и та же команда Дискорд-бота на VPS, хотя на компьютере все работает (Discord.JS) Как решить?

Вот код:
Код

const fs = require('fs');
const format = require('node.date-time');
const news = require('./news.json');
const cfg = {"token": "Токен бота", "prefix": "=","welcomehookid":"ID вебхука", "welcomehooktoken":"Токен вебхука",}
const token = cfg.token;
const prefix = cfg.prefix;
const Discord = require('discord.js');
const { stringify } = require('querystring');
const bot = new Discord.Client();
const welcomehook = new Discord.WebhookClient(cfg.welcomehookid, cfg.welcomehooktoken);
const newshook = new Discord.WebhookClient("ID вебхука", "Токен вебхука");
const newsForHook = news.newsToPublish;
const langMessages = {
  "russian": {
    "donthavekickperm": "У вас нет разрешения на кик пользователя.",
    "pleasementiontokick": "Пожалуйста, упомяните участника, которого хотите кикнуть.",
    "newspublished1": "Ок",
    "newspublished2": "новость из памяти бота успешно опубликована.",
    "news": "Новость из памяти бота:",
    "channelcleared1": "Успешно удалено сообщений:",
    "channelcleared2": "Успешно удалены все сообщения в канале.",
    "hi": "Привет",
    "hiHelloText": `добро пожаловать на наш сервер!`,
  },
  "serbian": {
    "donthavekickperm": "Немате дозволу да шутнете корисника.",
    "pleasementiontokick": "Молимо вас да наведете члана који желите да шутнете.",
    "newspublished1": "Dobro",
    "newspublished2": "вести из бот меморије успешно објављене.",
    "news": "Вести из бот меморије",
    "channelcleared1": "Успешно избрисане поруке:",
    "channelcleared2": "Успешно избрисане све поруке у каналу.",
    "hi": "Здраво",
    "hiHelloText": `добродошли на наш сервер!`
  },
  "english": {
    "donthavekickperm": "You don't have permission to kick the user",
    "pleasementiontokick": "Please mention the member you want to kick",
    "newspublished1": "Ok",
    "newspublished2": "news from bot\'s memory is successfully published/",
    "news": "News from bot\'s memory",
    "channelcleared1": "Successfully deleted messages:",
    "channelcleared2": "Successfully deleted all messages in the channel.",
    "hi": "Hi",
    "hiHelloText": `welcome to our server!`
  },
  "recent": {
  }
}
let logtext = "";


bot.on('ready', () => {
  logtext = `Logged in as ${bot.user.tag}`;
  console.log(logtext);
  log(logtext, "info");
  langMessages.recent = langMessages.english;
  bot.once('reconnecting', () => {
    console.log('Reconnecting!');
  });
  bot.once('disconnect', () => {
    console.log('Disconnect!');
  });
});

bot.on('guildMemberAdd', member => {
  welcomehook.send(`${langMessages.recent.hi} ${member.username}, ${langMessages.recent.hiHelloText}`);
  });
  
bot.on('message', msg => {
  logtext = `${msg.channel.name}(${msg.guild.name}) : ${msg.author.tag} : ${msg.content}`;
  console.log(`\n\n${logtext}`);
  log(logtext, "msg");
  
  
  if (!msg.guild || msg.author.bot || !msg.content.startsWith(prefix)) return;
  
  else msgHandler(msg);
});


bot.login(token).then(() => {
})


function msgHandler(msg) {
  
  let args = msg.content.split(' ');
  let commandarr = args[0].split(prefix)
  commandarr.splice(0, 1);
  let command = commandarr[0];
  args.splice(0, 1);
  console.log(command);
  console.log(args);

  if(msg.content.startsWith(prefix + "kick")){
    if(!msg.member.hasPermission("KICK_MEMBERS"))return(msg.reply(langMessages.recent.donthavekickperm))
    let tokick = msg.mentions.members.first()
    if(!tokick)return(msg.reply(langMessages.recent.pleasementiontokick))
    let reason = "testing bot commands";
    msg.delete();
    tokick.kick(reason);
  }
  
  else if (command == "hi") {
    msg.channel.send(`${langMessages.recent.hi}, ${msg.author.username}`);
  }

  else if (command == "publishnews") {
    newshook.send(newsForHook);
    msg.channel.send(`${langMessages.recent.newspublished1} ${msg.author.username}, ${langMessages.recent.newspublished2}`);
    msg.channel.send(`${langMessages.recent.news}: ${newsForHook}`);
  }
  
  else if (command == "clear") {
    msg.channel.bulkDelete(100);
    msg.channel.send(`${langMessages.recent.channelcleared2}`).then((message) => {
      message.channel.bulkDelete(1);
    });
  }
    
  else if (command == "lang" && (args[0] == "russian" || "serbian" || "english")) {
    switch (args[0]) {
      case "russian":
        translate("Russian");
        msg.channel.send("Bot translated to Russian")        
        break;
      case "serbian":
        translate("Serbian");
        msg.channel.send("Bot translated to Serbian")        
        break;
      case "english":
        translate("English");
        msg.channel.send("Bot translated to English")        
        break;
    }
  }};

function translate(lang) {
  switch (lang) {
    case "Russian":
      langObj = langMessages.russian;
      break
    case "Serbian":
      langObj = langMessages.serbian;
      break
    case "English":
      langObj = langMessages.english;
      break
  };
  langMessages.recent = langObj;
  logtext = `Bot translated to ${lang}`
  console.log(logtext)
  log(logtext, "info")
};
    
function log(logText, logType) {
  function logTime(){
    return new Date().format('Y-MM-dd HH:mm:SS');
  };
  let logPrefix = "";
  switch (logType){
    case "msg":
      logPrefix = "[MESSAGE]";
      break;
      
    case "info":
      logPrefix = "[INFO]";
    break;
  }
  logPrefix += " ";
  let logResult = `(${bot.user.tag}): ${logTime()} ${logPrefix} ${logText}`
  
  fs.appendFile(`recent.log`, `${logResult}\n`, () =>{
  });
};


Этот код есть и у меня на компьютере (на нем всё работает) и на VPS (там не работает только команда бота clear (эта команда удаляет все сообщения в текстовом канале))

На VPS при использовании команды бота clear выдает такую ошибку:
Текст ошибки

(node:50691) UnhandledPromiseRejectionWarning: TypeError: Object.entries(...).filter(...).flatMap is not a function
at new APIRequest (/root/golubovicbot/node_modules/discord.js/src/rest/APIRequest.js:24:10)
at RESTManager.request (/root/golubovicbot/node_modules/discord.js/src/rest/RESTManager.js:39:24)
at Proxy.options (/root/golubovicbot/node_modules/discord.js/src/rest/APIRouter.js:30:19)
at MessageManager._fetchMany (/root/golubovicbot/node_modules/discord.js/src/managers/MessageManager.js:140:75)
at MessageManager.fetch (/root/golubovicbot/node_modules/discord.js/src/managers/MessageManager.js:68:86)
at TextChannel.bulkDelete (/root/golubovicbot/node_modules/discord.js/src/structures/interfaces/TextBasedChannel.js:358:40)
at msgHandler (/root/golubovicbot/bot.js:134:17)
at Client.bot.on.msg (/root/golubovicbot/bot.js:83:8)
at Client.emit (events.js:198:13)
at MessageCreateAction.handle (/root/golubovicbot/node_modules/discord.js/src/client/actions/MessageCreate.js:31:14)
(node:50691) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
(node:50691) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.


Если у есть какие-то ошибки в коде, прошу указать мне на них, дабы больше их не повторять :)
  • Вопрос задан
  • 87 просмотров
Решения вопроса 2
dyuriev
@dyuriev
A posteriori
У вас на сервере нода 10 версии или ниже. Обновитесь.
Array.prototype.flatMap() появился в Node.js v11.0.0
Ответ написан
Комментировать
@HepkaPlay
JavaScript Junior.
На Вашем ПК может быть одна версия Node.JS, а на VPS совсем другая.
На VPS допустим версия старее, чем у Вас на ПК и некоторые методы и функции не работают на старой версии Node.JS
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы