繁体   English   中英

Discord js bot:无法向具有特定角色的用户发送 DM

[英]Discord js bot: Cannot send DM to users with specific role

我似乎在向具有特定角色的所有用户发送 DM 时遇到了严重的问题。

这是我的机器人代码:

bot.on('message', async message => {
    members = message.guild.roles.cache.find(role => role.id === "12345678998765").members.map(m => m.user.id);
    
    members.forEach(member_id => {
        
        sleep(5000).then(() => {
            message.users.fetch(member_id, false).then((user) => {
                user.send("some message");
             });
        });
       
    });
});

这段代码给了我错误:

无法读取 null 的属性(读取“角色”)

在这条线上:

成员 = message.guild.roles.cache.find(role => role.id ===....

然而,这不是问题。 当我注释掉发送消息的睡眠命令和 output 成员角色使用:

members.forEach(member_id => {

        console.log(member_id)

        //sleep(5000).then(() => {
        //    bot.users.fetch(member_id, false).then((user) => {
        //        user.send("some message");
        //     });
        //});
       
    });

我在控制台中返回了所有用户 ID 的列表。所以它必须返回角色。

如何向具有特定角色 ID 的所有用户发送消息? 我希望能够遍历它们并等待以减少 API 请求和垃圾邮件触发器。

要解决您的第一个问题, message.guild将是 DM 中的null 确保它不是 DM,或者如果必须是,请使用client.guilds.cache.get("id")选择一个公会。

bot.on("message", async message => {
    let { guild } = message
    if (!guild) guild = bot.guilds.cache.get("id")
    //...
})

要解决您的其他问题,您可以运行GuildMember#send()而不是获取 ID 并获取用户

bot.on("message", async message => {
    let { guild } = message
    if (!guild) guild = bot.guilds.cache.get("id")
    let members = guild.roles.cache.get("12345678998765").members 
    // I used .get here because it's getting by ID
    
    members.forEach(member => {
        sleep(5000).then(() => member.send("some message"));
    });
})

上面的代码将获取所有GuildMember并循环遍历每一个,“休眠”5 秒(如果 sleep 参数为毫秒)并向成员发送 DM

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM