我想创建一个脚本,知道哪一个有我的机器人在服务器和创建我的一个邀请,第二我想创建一个命令谁发送一个私人消息给所有成员(不,它不是一个raid机器人)
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)
谢谢你的回覆!
如果您的discord.js版本是v12或更高版本(至少在DM命令中是这样),这似乎是一个问题。
从v12开始,client#guilds和guild#members不再返回集合
,而是返回管理器
。因此,现在guild#members
返回一个guildmembermanager
,而client#guilds返回一个guildmanager
。
幸运的是,仍然有一种方法可以访问管理器的各个集合,那就是:
。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的服务条款。