Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с командами моего бота для Discord (https://javascript.ru/forum/misc/73629-problema-s-komandami-moego-bota-dlya-discord.html)

jsnoob3000 01.05.2018 14:08

Проблема с командами моего бота для Discord
 
Всем привет! Я только вчера познакомился в javascript, т.к. мне понадобилось создать собственного бота для Discord. Мои познания в этом языке программирования крайне скудные (и вообще я гуманитарий), поэтому я смог создать лишь команды, после которых бот отправляет определённые сообщения или добавляет в чат приглашение на сервер. Я пытался создать команды, после которых бот отправляет изображение, гиф, эмодзи или различные вариации текста, а не одинаковый текст (например, игра 8ball, в которой бот будет давать советы), а также команду, после которой бот повторяет сообщение пользователя (без команды).
Возникли следующие проблемы: после добавления команд с отправкой изображения - бот просто не запускается, после добавления команд с эмодзи - бот отправляет их текстом (:thinking: - пример, но если самому ввести это в чат, отправится эмодзи), после других команд бот также не запускается)

Такой код я оставил в итоге:
const Discord = require('discord.js');

const client = new Discord.Client();

var prefix = 'sh!'

client.on("message",(message) => 
{   
    if(message.content == "sh!inv")
    {
        message.channel.createInvite({temporary : true})
       .then(inv =>message.channel.sendMessage (`https://discord.gg/${inv.code}`));                    
    }
});

client.on('message', message => {
    if(message.author === client.user) return;
    if(message.content.startsWith(prefix + 'текст')) {
        message.channel.sendMessage('отправляемый текст');
     }
});

client.login('тут токен бота');


(Убрал похожие команды, т.к. разновидностей команд лишь две)

Сами вопросы:
Как добавить вариативность ответа бота?
Как заставить бота отправлять изображения?
Как заставить бота повторить сообщение пользователя без повторения команды?
Как заставить бота отправлять эмодзи как эмодзи, а не как текст?
+ буду очень рад советам, многое читал на англоязычных форумах, но почти везде ботов делают на питоне, а я к такому пока не готов)

KenClaron 02.05.2018 21:01

Ответы на вопросы
 
1. Вариативность ответов бота:
let answers = ["да", "нет", "возможно", "конечно"]; //массив ответов
let rand = Math.floor(Math.random()*answers.length); //получаем случайное число от 0 до `кол-ва ответов`
message.channel.send(answers[rand]);

2.Отправить изображение:
а) если это локальный файл:
message.channel.send("сообщение(можно отпустить)", {
        files:[{
          attachment: "nameImage.png",
          name: "newname.png"
        }]
      });

б) если этот файл находится в интернете:
message.channel.send("сообщение(можно отпустить)", {
  files: ['https://cdn.discordapp.com/icons/222078108977594368/6e1019b3179d71046e463a75915e7244.png?size=2048']
})

3. Повторно отправлять сообщение каждые 1 секунду
if(message.content == "sh!repeat"){
      setInterval(function() {
        message.channel.send("go-go");
      }, 1000)  // время в миллисекундах // 1000 == 1секунда
    }

4. Насчет эмодзи, попробуй использовать двойные кавычки при отправке эмодзи, у меня работает
message.channel.send(":thinking:");

Рекомендую в помощь http://discord.js.org


Часовой пояс GMT +3, время: 11:37.