提问者:小点点

我的bot的discord.js函数有问题


我想创建一个脚本,知道哪一个有我的机器人在服务器和创建我的一个邀请,第二我想创建一个命令谁发送一个私人消息给所有成员(不,它不是一个raid机器人)

  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:无法读取client.client.client.on(C:\users\mathis\downloads\selfBot ash\raid.js:10:18)中未定义的属性“for each”,位于websocketManager.triggerClientReady(C:\users\mathes\node_modules\discord.js\src\client\websocketManager.js:433:17)位于websocketManager.checkshardsReadycket.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个答案

匿名用户

如果您的discord.js版本是v12或更高版本(至少在DM命令中是这样),这似乎是一个问题。
从v12开始,client#guilds和guild#members不再返回集合,而是返回管理器。因此,现在guild#members返回一个guildmembermanager,而client#guilds返回一个guildmanager

幸运的是,仍然有一种方法可以访问管理器的各个集合,那就是:.cache
cache属性无一例外地存在于每个单个管理器中(因为它是baseManager中的一个属性)。
因此,要访问

// 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.jsv11或更低版本,我还没有看到任何更新版本。

匿名用户

我的建议是使用every而不是foreach;我以前也遇到过这样的问题。

附注。如果这是一个自我机器人,请记住他们是反对Discord的服务条款。