• Как сделать сообщение дискорд бота видимым только одному человеку(отправителю сообщения)?

    cringeg
    @cringeg
    В библиотеке Discord.JS необходимо в методе reply передать значение ephemeral где true будет то, что сообщение доступно одному человеку.

    Пример реализации слэш команды с ответом доступным только одному человеку:
    Создание:
    const commands = [];
    const commandFiles = fs.readdirSync('./commands').filter(file => file.endsWith('.js'));
    
    const clientId = '123456789012345678';
    const guildId = '876543210987654321';
    
    for (const file of commandFiles) {
    	const command = require(`./commands/${file}`);
    	commands.push(command.data.toJSON());
    }
    
    const rest = new REST({ version: '9' }).setToken(token);
    
    await rest.put(
    	Routes.applicationGuildCommands(clientId, guildId),
    	{ body: commands },
    );

    Ответ:
    client.on('interactionCreate', async interaction => {
    	if (!interaction.isCommand()) return;
    
    	if (interaction.commandName === 'ping') {
    		await interaction.reply({ content: 'Pong!', ephemeral: true });
    	}
    });

    Обратите внимание, этот код не будет работать, если его вставить без своих добавлений и интеграции в свой. Это вырезки из гайдов, где вы можете посмотреть полный код. Изучите документацию и гайды, на примерах которых был код выше.
    Ответ написан
    Комментировать
  • VK API Метод CreateComment, загрузка изображения?

    cringeg
    @cringeg
    Используйте методы photos.getUploadServer и photos.save с токеном пользователя. При создании альбома поставьте галочку в пункте «Фотографии могут добавлять только редакторы и администраторы». И загружать в альбом должны токеном создателя или администратора.
    Ответ написан
    Комментировать
  • Как при клике обратиться к пред идущему элементу массива и последующему?

    cringeg
    @cringeg
    Работает это по схеме, что мы постоянно определяем текущую позицию в массиве. То есть, если массив состоит из ["111", "222", "333", "444"], то очевидно, что последний добавленный цвет 444. Значит позиция будет вычисляться по формуле Длина массива - 1. Дело в том, что длина массива начинается с 1, а по факту массив начинается с 0.

    Когда мы передвигаем позицию мы отнимаем 1, если ушли назад и прибавляем 1, если ушли вперед, но уйти дальше, чем нужно в коде невозможно.

    UPD. Я прочитал комменты, я крайне не рекомендую хранить это стадо цветов в кукисах или еще где-либо на памяти пользователя и вообще дальше обновления страницы. Вы засоряете человеку память, либо пишите функцию для очищения старых цветов, но я даже не знаю, как можно извратить эту задачу так, чтобы не пострадала память пользователя и работало хорошо.

    let colors = [];
    let spot; 
    
    function newColor(colors, color) {
        colors.push(color);
    }
    
    function colorOld(colors, spot) {
       if (spot !== 0) {
         return colors[spot - 1];
       }else {
         // если пользователь попал под это условие, значит предыдущего цвета нет
        return null;
       }
    }
    
    function colorNext(colors, spot) {
      if (spot < colors.length) {
        return colors[spot + 1];
      }else {
        // если пользователь попал под это условии значит следующего цвета нет или это последний добавленный
        return null;
      }
    }
    
    // Не обращаем внимание на этот цикл. Он создан, чтобы сделать исскуственное добавление цветов. Если интересно, как он работает, отпиши в комментариях.
    for (let i = 1; i < 5; i++) {
      let str = i.toString();
      newColor(colors, str.repeat(3));
    }
    spot = colors.length - 1; // Важно определить позицию после того, как цвет были добавлены новые цвета. Каждый раз переменную необходимо перезаписывать.
    
    let oldColor = colorOld(colors, spot);
    spot -= 1; // показываем что позиция сдвинулась назад
    let nextColor = colorNext(colors, spot);
    spot += 1; // показываем что позиция сдвинулась вперед
    
    console.log(oldColor);
    console.log(nextColor)
    Ответ написан