如何处理 Discord 机器人的用户状态更改?

How to handle user status change for Discord bot?

有活动可用 DiscordClient.UserJoinedDiscordClient.UserLeftDiscordClient.UserUpdated。虽然在前两个事件中我可以访问 e.User.Name 以获取加入或离开服务器的用户名,但第三个事件没有这个。只有 e.Server.CurrentUser 指的是机器人本身或 e.Server.Users 给了我所有用户的列表。但是我不知道事件触发的是哪一个,所以不知道访问的是哪一个。

假设我想在用户上线时创建一个通知(将 his/her 状态从离线更改为在线,反之亦然)。对于 UserJoined 事件我可以做:

client.UserJoined += async (s, e) =>
{
  var channel = e.Server.FindChannels("abc", ChannelType.Text);
  await channel.SendMessage(e.User.Name + " has joined the server!");
}

但是当我没有 User 时,我如何为 UserUpdated 执行此操作?

client.UserUpdated += async (s, e) =>
{
  var channel = e.Server.FindChannels("abc", ChannelType.Text);
  if(???.Status == "online")
  {
    await channel.SendMessage(???.Name + " has come online!");
  }
}

用户将位于 e.Before 和 e.After,因此要访问它,请使用 e.After.Name