如何在用户状态改变时发送频道消息

How to send a channel message when a user changes status

我正在尝试弄清楚当用户更改其状态时如何向不和谐的频道发送消息。我试图通过调用一个单独文件中的方法来做到这一点。

在我的Program.cs

  public async Task StartAsync()
  {
    // Create instance of the class with the method I want to call
    Games statusChange = new Games();

    // call the method when a status changes
    _client.GuildMemberUpdated += statusChange.UpdateGameBeingPlayed;
  }

还有我要调用的class(在单独的文件中):

public class Games : ModuleBase<SocketCommandContext>

    public async Task UpdateGameBeingPlayed(SocketGuildUser user, SocketUser userAgain)
    {
        // get channel id
        string strGuildId = user.Guild.Id.ToString();
        ulong ulongId = Convert.ToUInt64(strGuildId);

        // get the channel I want to update
        var channel = Context.Guild.GetChannel(ulongId) as SocketTextChannel; // Context here is undefined :(

        await channel.SendMessageAsync("a user has changed status!");
    } 
}

在我尝试在我的游戏 class 中使用 Context 之前,此实现一直有效。上下文未定义(因为没有上下文可以获取,我猜,不确定)。

所以我认为解决这个问题的方法可能是从我的 Program.cs 文件中导入 _client 并使用它向我要更新的频道发送消息。但是,我不确定该怎么做。

所以我的问题如下:

  1. _client 应该是私有的有什么理由吗?有人告诉我 应该是,但从未给出解释。
  2. 如果绕过 _client 是正确的解决方案,我如何将其导入到我的游戏中 class?

谢谢!

海报在这里:

答案是毕竟我不需要上下文来获取通道,您可以从 SocketGuildUser 获取通道。

工作代码:

public async Task UpdateGameBeingPlayed(SocketGuildUser user, SocketUser userAgain)
{
    string strGuildId = user.Guild.Id.ToString();
    ulong ulongId = Convert.ToUInt64(strGuildId);
    var channel = user.Guild.GetChannel(ulongId) as SocketTextChannel;
    await channel.SendMessageAsync("a user has changed status!");
}