• Как исправить ошибку?

    Syjalo
    @Syjalo
    Представьте себе бота
    Если вы хотите, чтобы команда работала только у администраторов, то используйте Administrator, а не KickMembers.
    Так же if принимает только 1 параметр; вам следует использовать логическое И (&&) и подучить JavaScript.
    Ответ написан
  • Как получить поле "обо мне" в discord.js?

    Syjalo
    @Syjalo
    Представьте себе бота
    Это поле нельзя получить через Discord API для ботов.
    Ответ написан
    Комментировать
  • Кнопка, доступная только для определенных лиц - Discord.js?

    Syjalo
    @Syjalo
    Представьте себе бота
    Как сделать, чтобы кнопка была доступна только для меня?

    1) Если кнопка была отправлена слэш командой, то в слушателе interactionCreate проверяем, чтобы interaction.message.interaction.user.id был равен interaction.user.id.
    2) Если кнопка была отправлена обычными сообщением, то в customId кнопки добавляем id того, кто может использовать кнопку и сравниваем его с interaction.user.id.
    3) Отправить ephemeral ответ на интеракцию, чтобы сообщение мог видеть только отправитель команды.
    4) Использовать коллекторы
    Message#createMessageComponentCollector()
    InteractionResponse#createMessageComponentCollector()

    Как сделать слушатель кнопки?

    1) Через ивент interactionCreate
    client.on('interactionCreate', (interaction) => {
      if (interaction.isButton()) {
        // code here
      }
    });

    2) Через коллекторы
    const collector = <Message>.createMessageComponentCollector({ componentType: ComponentType.Button });
    collector.on('collect', (interaction) => {
      // code here
    });
    Ответ написан
    2 комментария
  • Ошибка typeerror cannot read properties of undefined (reading 'cache') discord.js?

    Syjalo
    @Syjalo
    Представьте себе бота
    /app/node_modules/discord.js/src/client/actions/MessageCreate.js:11
    const existing = channel.messages.cache.get(data.id);
    ^
    
    TypeError: Cannot read properties of undefined (reading 'cache')
    at MessageCreateAction.handle (/app/node_modules/discord.js/src/client/actions/MessageCreate.js:11:41)
    at Object.module.exports [as MESSAGE_CREATE] (/app/node_modules/discord.js/src/client/websocket/handlers/MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (/app/node_modules/discord.js/src/client/websocket/WebSocketManager.js:386:31)
    at WebSocketShard.onPacket (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:436:22)
    at WebSocketShard.onMessage (/app/node_modules/discord.js/src/client/websocket/WebSocketShard.js:293:10)
    at WebSocket.onMessage (/app/node_modules/ws/lib/event-target.js:132:16)
    at WebSocket.emit (node:events:527:28)
    at Receiver.receiverOnMessage (/app/node_modules/ws/lib/websocket.js:1008:20)
    at Receiver.emit (node:events:527:28)
    at Receiver.dataMessage (/app/node_modules/ws/lib/receiver.js:517:14)

    Эта ошибка возникает на версиях discord.js v13.7.0 и ниже при получении сообщения из новых текстовых чатов в голосовых каналах.
    Решение: обновиться до v13.8.0 или выше.

    Последние версии
    Ответ написан
    Комментировать
  • Как узнать статус пользователя - Discord.js?

    Syjalo
    @Syjalo
    Представьте себе бота
    Убедитесь, что у вас есть интент GuildPresences.
    <GuildMember>.presence?.status
    <GuildMember>.presence может быть null, когда участник офлайн или скрыл свой статус.
    Ответ написан
  • Как правильно написать ивент?

    Syjalo
    @Syjalo
    Представьте себе бота
    Убедитесь, что у вас есть интент GuildVoiceStates (v14), GUILD_VOICE_STATES (v13).
    Событие при входе участника в голосовой канал:
    client.on("voiceStateUpdate", (oldState, newState) => {
      if (!oldState.channelId && newState.channelId) {
        // code
      }
    });

    Событие при выходе участника из голосового канала:
    client.on("voiceStateUpdate", (oldState, newState) => {
      if (oldState.channelId && !newState.channelId) {
        // code
      }
    });
    Ответ написан
    Комментировать
  • Как отправить сообщение при входе моего бота на сервер?

    Syjalo
    @Syjalo
    Представьте себе бота
    Предоставленный код похож на код discord.js v12.
    v12 является устаревшей версией и может работать нестабильно.
    На данный момент стабильной версией является v13.8.1.

    Для v13 удостоверьтесь, что у вас есть интент GUILDS в опциях клиента.
    client.on("guildCreate", guild => {
      const channel = guild.channels.cache.find(channel => channel.isText() && channel.permissionsFor(client.user).has(["VIEW_CHANNEL", "SEND_MESSAGES"]));
      if (!channel) return;
      channel.send("Worked!");
    });
    Ответ написан
    Комментировать
  • Методы keys(), values(), entries() находятся в Symbol.iterator у итерируемых объектов?

    Syjalo
    @Syjalo
    Представьте себе бота
    keys(), values() и entries() — методы Map, Set, Array и Object, которые возвращают итератор или массив, у которого есть метод по ключу Symbol.iterator.

    Symbol.iterator — символ, который выступает в качестве ключа (имени) для метода, который возвращает итератор.
    Ответ написан
    1 комментарий
  • Чем require отличается от import? B почему require не совместим с import?

    Syjalo
    @Syjalo
    Представьте себе бота
    require — способ импортирования для CommonJS
    import — способ импортирования для ECMAScript

    С помощью import вы можете выбрать те данные, которые хотите импортировать, а с помощью require — нет. import также может импортировать данные асинхронно.

    Если вы хотите использовать node-fetch с CommonJS, то установите соответствующую версию npm i node-fetch@cjs
    Ответ написан
    Комментировать
  • Создание нескольких хендлеров сообщений?

    Syjalo
    @Syjalo
    Представьте себе бота
    Ошибка DiscordAPIError: Unknown interaction обычно происходит, когда срок действия токена интеракции истёк.

    Возможные причины
    • Первоначальный ответ не был дан в течении 3 секунд
    • Дополнительный ответ не был дан в течении 15 минут
    Ответ написан
    Комментировать
  • Voice Activity Tracking System discord.js?

    Syjalo
    @Syjalo
    Представьте себе бота
    Для начала убедитесь, что у вас есть интент GUILD_VOICE_STATES в опциях клиента.

    Теперь создайте Map для интервалов перед регистрацией ивента
    const intervals = new Map();
    Далее при подключении к каналу создавайте интервал и записывайте в только что созданный Map
    client.on("voiceStateUpdate", (oldState, newState) => {
      function addVoiceTime() {}
      if (!oldState.channelId && newState.channelId) {
        intervals.set(newState.id, setInterval(addVoiceTime, 5000));
      }
    });

    А при отключении отчищайте
    client.on("voiceStateUpdate", (oldState, newState) => {
      if (oldState.channelId && !newState.channelId) {
        clearInterval(intervals.get(newState.id));
        intervals.delete(newState.id);
      }
    });

    Результирующий код
    const intervals = new Map();
    client.on("voiceStateUpdate", (oldState, newState) => {
      function addVoiceTime() {}
      if (!oldState.channelId && newState.channelId) {
        intervals.set(newState.id, setInterval(addVoiceTime, 5000));
      }
      if (oldState.channelId && !newState.channelId) {
        clearInterval(intervals.get(newState.id));
        intervals.delete(newState.id);
      }
    });
    Ответ написан
    Комментировать
  • Как с помощью одной команды параллельно запустить более одного collector'а?

    Syjalo
    @Syjalo
    Представьте себе бота
    Коллекторы не мешают работе друг друга. Возможно у вас есть некоторые проблемы в обработчике команд.
    Ответ написан
    Комментировать