如何处理 Discord 机器人的用户状态更改?
How to handle user status change for Discord bot?
有活动可用 DiscordClient.UserJoined
、DiscordClient.UserLeft
和 DiscordClient.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
有活动可用 DiscordClient.UserJoined
、DiscordClient.UserLeft
和 DiscordClient.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