Discord.js - 使presenceUpdate发送消息

时间:2018-03-16 04:35:41

标签: node.js discord discord.js

我试图让我的超级简单机器人发送一条消息,说明用户状态。好像某人离线,在线等等,它会自动向服务器发送一条消息,说明发生了这种情况。 我只是做一个工作,所以它可以得到更新(我知道我需要!每次状态)

任何人都有想法让它在presenceUpdate点火后立即发送相同的消息?

let userStatus = [];

bot.on("presenceUpdate", (oldMember, newMember) => {
    let username = newMember.user.username;
    let status = newMember.user.presence.status;
    userStatus.push(username, status);
    console.log(`${newMember.user.username} is now ${newMember.user.presence.status}`);
})

bot.on('message', (message) => {
    // if (!message.content.startsWith(prefix)) return;
    if (console.log())
        let [username, status] = userStatus;

    if (message.content.startsWith(prefix + "status")) {
        let botembed = new Discord.RichEmbed()
            .setDescription("Status Update")
            .setColor("#FFF")
            .addField('.............................................', `${username} is now ${status}`);

        message.channel.send(botembed);

        userStatus = [];
    }
});

1 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是您不再直接引用某个频道,这就是为什么您不能轻易地&#34;致电<TextChannel>.send(...)。您必须在presenceUpdate事件监听器中决定要向哪个频道发送消息。一旦您决定,您可以使用此代码使用频道name获取对该频道的引用:

client.on('presenceUpdate', (oldMember, newMember) => {
    // get a reference to all channels in the user's guild
    let guildChannels = newMember.guild.channels;

    // find the channel you want, based off the channel name
    // -> replace '<YOUR CHANNEL NAME>' with the name of your channel
    guildChannels.find('name', '<YOUR CHANNEL NAME>')
        .send('test message!')
        .then(msg => {
            // do something else if you want
        })
        .catch(console.error)
});

注意:您不必使用频道的name媒体资源来识别唯一频道,您可以通过以下方式使用频道id

guildChannels.get('<YOUR CHANNEL ID')
.send('...

希望这有帮助!