Как стать автором
Обновить

Комментарии 21

Несколько текстовых каналов. Одни люди имеют доступ в один канал, другие — в другой. Пользователь в канале с помощью бота отправляет в другой канал сообщение, содержащее текст, видео и картинку. Сам пользователь в канал, куда отправляется такое сообщение, доступа не имеет. Возможно реализовать такой функционал?
Добрый вечер, Techniker753
Да, разумеется, такой функционал реализовать возможно, ведь контактирует с каналом не сам пользователь, а бот.
Используйте данный код:

		robot.channels.cache.get('ID_канала').send("Сообщение");

Большое спасибо! Очень понятное и полное руководство! Жду продолжение!
Рад, что вам понравилось, SergioTy!
Автору — спасибо за проделанный труд!

ИМХО, напрягает это засилье использования node везде, где только можно. Я вообще не считаю идею использовать js для бекенда хорошей, но это очень холиварная тема, поэтому не стоит начинать холивар тут.
Спасибо вам, Nokse, за положительный комментарий!

как тяжело на js и как легко на Python. я сам пишу на питоне но лучше начать учить Rust
Добрый вечер, helish_88
Не сказал бы.
Такое впечатление появляется лишь из-за того, что я показал вариант с большим кодом для обработки команд. Существуют способы, намного компактнее показанного.
да не, я когда хотел учить какой-то язык что бы писать ботов для дискорд я начал с discord js, Потом понял что ничего не понял и начал учить питон, мне он понравился.
У каждого языка свои особенности, минусы и плюсы.
Мне больше нравится писать ботов на Javascript, язык позволяет мне быстро выразить свои мысли.
Как же тяжело с мухоловкой и легко с веером. я сам обычно пользуюсь веером, но лучше купить лопату.

Все три инструмента находятся в практически противоположных областях, как вообще между ними можно выбирать?
Простейший парсер команд:
bot.on('message', async msg => {
  if (msg.author.bot) return;
  if (!msg.content.startsWith(BOT_PREFIX)) return;
  let args = msg.content.split(/\s+/g);
  let cmd = args.shift();
  ...
});

Насчет определения функции не уверен, вроде работало. ИМХО, это гораздо проще и возможно быстрее.
Также HashMap или что там в JS, имеет сложность O(1) для get запроса, когда тупой перебор — O(n).

Также:
«Math.floor(Math.random() * 4);» — может и 0 вернуть, т.к.
1. Math.floor(0.9999) == 0
2. 0.9 / 4 = 0.225
3. Math.random() насколько я помню, возвращает от 0 до 1.
Поэтому есть ~22%-25% шанс, что будет 0.
Добрый вечер, 1keda
Я осведомлен об этой особенности и даже хотел написать об этом в статье, но так как изначально она была рассчитана на новичков, я посчитал нужным не загружать никого лишней информацией.
Math.random() и Math.floor() невероятно гибки, и их можно полностью настроить под себя.
Возможно, я разберу это подробно в последующих статьях, но всё же, не будем забывать, что это основы Javascript, описанные в любом учебнике.
Здравствуйте, да, вполне возможно. Может я через строчку читал, или не написано было, но знать теперь буду. А еще было бы приятно увидеть в следующих статьях увидеть про оптимизацию, настройку БД и использованию ORM / самописного движка. Ну и еще какие-нибудь прикольные фишки как экономика/предметы/магазин и красивый профиль картинкой (пример из бота MEE6 ниже).

Помню, как написание простейшего PHP скрипта на коленке для UPDATE/SELECT запросов в БД (скрипт висел на сайте и был параметр в GET запросе а-ля токен), ускорило ну… Раз в 50, может и на все два порядка. Был даже момент когда бот ответил через 9 часов ±, а после максимум минут через 5. Ибо 2,000 серверов и около 100,000 юзеров, ну и 0 оптимизации видать (я был WEB кодером, что там было — я не имею понятия).

image
Всё это будет в скором времени, по возможности.
Разберу сначала простые вещи, потом перейду к более сложным и интересным.
Следующая статья уже почти готова, так что в ближайшие дни опубликую.

Статья интересная, но примеры кода тяжело читать.


Вы использовали линтер?


Где-то const/let, а где-то var.


В одном месте увидел async/await и одновременно Promise.then.


В колбэках где-то стрелочные функции, а где-то обычные.


Не говорю, что это прямо критично. Но причесанный код читать гораздо легче и проще понять, о чем речь.

Добрый день, 777Polar_Fox777
На данный момент я работаю над этим и в скором времени сделаю код читабельным.
Я так и не понял куда вписывать коды для этих игр, как Орёл и решка, удаление сообщений и т.д.
Добрый день, FurryFandom
Их вписывать необязательно, но если вы желаете, то просто добавляйте функции и заносите в них по одной команде, после чего добавляйте функции в массив.
Вот, как это будет выглядеть, на примере удаления сообщений:

function clear(robot, mess, args) { // Создание новой функции с командой

 const arggs = mess.content.split(' ').slice(1);

 const amount = arggs.join(' ');
 
 if (!amount) return mess.channel.send('Вы не указали, сколько сообщений нужно удалить!'); 

 if (isNaN(amount)) return mess.channel.send('Это не число!'); 

  if (amount > 100) return mess.channel.send('Вы не можете удалить 100 сообщений за раз');
  if (amount < 1) return mess.channel.send('Вы должны ввести число больше чем 1');
        
        async function delete_messages() {

        await mess.channel.messages.fetch({ limit: amount }).then(messages => {
            mess.channel.bulkDelete(messages)
            mess.channel.send(`Удалено ${amount} сообщений!`)
        })};
        delete_messages(); 
}

var comms_list = [ // Добавление функции с командой в массив
	{name: "clear", out: clear, about: "Удаление сообщений"},
}



Вы гений, спасибо за эту статью и целую помощь и если не сложно, так же сделать с орлом и решкой.
Спасибо вам.
Код
        function heads_or_tails(robot, mess, args) {
        mess.channel.send('Монета подбрасывается...')

        var random = Math.floor(Math.random() * 4);

        if (random == 1) { 
            mess.channel.send(':full_moon: Орёл!')
        } else if (random == 2) {
            mess.channel.send(':new_moon: Решка!')
        } else if (random == 3) {
            mess.channel.send(':last_quarter_moon: Монета упала ребром!')
        }
}
var comms_list = [ 
	{name: "heads_or_tails", out: heads_or_tails, about: "«Орёл или Решка»"},
}

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.