проблема с моей функцией с разногласиями. js для моего бота - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу создать скрипт, который будет знать, у какого моего бота есть серверы, и создать мое приглашение, а второй - создать команду, которая отправляет одно личное сообщение всем участникам (нет, это не рейд-бот)

  1. скрипт:

    client.on("ready", () => {
    client.user.setActivity('ESPADA');
        client.guilds.forEach(serv => {
          serv.channels.random().createInvite().then(invite => console.log(`>${serv.name} | ${invite}`))
          .catch(console.log(`>${serv.name} | Entrain d'envoyer une invite... `));
        });

и моя ошибка:

(узел: 10752) UnhandledPromiseRejectionWarning: TypeError: Невозможно прочитать свойство 'forEach' из неопределенного в Client.client.on (c: \ Users \ mathis \ Downloads \ self bot ash \ Raid. js: 10: 18) в Client.emit (события. js: 189: 13) в WebSocketManager.triggerClientReady (c: \ Users \ mathis \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketManager. js: 433: 17) в WebSocketManager.checkShardsReady (c: \ Users \ mathis \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketManager. js: 417: 10) в WebSocketShard.shard.on.unavailableGuilds (c: \ Users \ mathis \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketManager. js: 199: 14) в WebSocketShard.emit (события. js: 189: 13) в WebSocketShard.checkReady (c: \ Users \ mathis \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard. js: 466: 12) в WebSocketShard.onPacket (c: \ Users \ mathis \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard. js: 438: 16) в WebSocketShard.onMe ssage (c: \ Users \ mathis \ node_modules \ discord.js \ src \ client \ websocket \ WebSocketShard. js: 293: 10) в WebSocket.onMessage (c: \ Users \ mathis \ node_modules \ ws \ lib \ event-target. js: 120: 16)

моя команда DM


    if(message.content === "!mp"){
        if(message.deletable) message.delete();
        i = 0;
        message.guild.members.forEach(member => { ```

4. the error :

TypeError: message.guild.members.forEach is not a function
    at Client.<anonymous> (c:\Users\mathis\Downloads\self bot ash\Raid.js:98:31)
    at Client.emit (events.js:194:15)
    at MessageCreateAction.handle (c:\Users\mathis\node_modules\discord.js\src\client\actions\MessageCreate.js:31:14)
    at Object.module.exports [as MESSAGE_CREATE] (c:\Users\mathis\node_modules\discord.js\src\client\websocket\handlers\MESSAGE_CREATE.js:4:32)
    at WebSocketManager.handlePacket (c:\Users\mathis\node_modules\discord.js\src\client\websocket\WebSocketManager.js:386:31)
    at WebSocketShard.onPacket (c:\Users\mathis\node_modules\discord.js\src\client\websocket\WebSocketShard.js:435:22)
    at WebSocketShard.onMessage (c:\Users\mathis\node_modules\discord.js\src\client\websocket\WebSocketShard.js:293:10)
    at WebSocket.onMessage (c:\Users\mathis\node_modules\ws\lib\event-target.js:120:16)
    at WebSocket.emit (events.js:189:13)
    at Receiver.receiverOnMessage (c:\Users\mathis\node_modules\ws\lib\websocket.js:801:20)

спасибо за повторную заявку !

Ответы [ 2 ]

1 голос
/ 09 апреля 2020

Кажется, это проблема вашего разногласия. js версия v12 или выше (по крайней мере, в вашей команде DM). Начиная с версии 12, Клиентские # гильдии и Члены Гильдии # больше не возвращают Collection, вместо этого они возвращают Manager. Так что теперь Guild#members возвращает GuildMemberManager, а гильдия Client # возвращает GuildManager. К счастью, есть еще способ получить доступ к соответствующим коллекциям менеджеров, и это через: <SomeManager>.cache. Свойство cache присутствует в каждом менеджере без исключения (так как это свойство в BaseManager). Таким образом, чтобы получить доступ к коллекциям client.guilds или guild.members, вы должны сделать следующее: Client#guilds:

// This returns the collection: Collection<Snowflake, Guild>
// which then you can use methods on such as .forEach() or .every()
client.guilds.cache; 

// Using .forEach()
client.guilds.cache.forEach(guild => console.log(guild.name));

и Guild#members:

// This returns the collection: Collection<Snowflake, GuildMember>
// which then you can use methods on such as .forEach() or .every()
guild.members.cache;

// Using .forEach()
guild.members.cache.forEach(member => console.log(member.displayName));

Существует несколько других типов менеджеров, я бы порекомендовал проконсультироваться с этим чтобы увидеть изменения в v12. В старых уроках на YouTube используется Discord. js v11 или ниже, и я еще не видел обновленных версий.

0 голосов
/ 09 апреля 2020

Я предлагаю использовать every вместо forEach; Я сталкивался с подобными проблемами раньше.

PS, если это автобот, имейте в виду, что они противоречат условиям обслуживания Discord .

...