Как отправить сообщение канала, когда пользователь меняет статус - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь выяснить, как отправить сообщение на канал в раздоре, когда пользователь меняет свой статус.Я пытаюсь сделать это, вызывая метод, который находится в отдельном файле.

В моем 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;
  }

И классе, который я хочу вызвать (в отдельном файле):

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!");
    } 
}

Эта реализация работает, пока я не попытаюсь использовать Context в своем классе игр.Контекст не определен (потому что нет контекста для получения, я думаю, не уверен).

Так что я думаю, что решение этой проблемы может состоять в том, чтобы импортировать _client из моего файла Program.cs и использовать его дляотправлять сообщения на канал, который я хочу обновить.Однако я не уверен, как это сделать.

Итак, мои вопросы таковы:

  1. Есть ли какая-то причина, по которой _client должен быть закрытым?Мне сказали, что так и должно быть, но я никогда не давал объяснений.
  2. Если правильное решение - обойти _client, как я могу импортировать его в мой класс игр?

Спасибо!

1 Ответ

0 голосов
/ 21 октября 2018

Афиша здесь:

Ответ был таков: мне все-таки не нужен контекст для получения канала, вы можете получить канал из 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!");
}
...