我试图让我的超级简单机器人发送一条消息,说明用户状态。好像某人离线,在线等等,它会自动向服务器发送一条消息,说明发生了这种情况。 我只是做一个工作,所以它可以得到更新(我知道我需要!每次状态)
任何人都有想法让它在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 = [];
}
});
答案 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('...
希望这有帮助!