Почему мои пользователи bot dm не могут получить приветственное сообщение? (Discord.net C #)

Я работал над ботом Discord в течение последних нескольких дней, и мне удалось заставить работать одну из функций: (команда, которая устанавливает сообщение, которое она должна отправлять пользователям dm, когда они присоединяются). Кажется, я не могу заставить бота отправлять фактическое сообщение.

    private async Task Join(SocketGuildUser UID)
    {
        if (UID.IsBot || UID.IsWebhook) return;
         Welcometxt= File.ReadAllText([FILE]);
        await UID.SendMessageAsync("Your Message Was Sucessfully set!");
    }
        private async Task HandleCommandAsync(SocketMessage arg)
    {
        var message = arg as SocketUserMessage;
        var context = new SocketCommandContext(_client, message);
        if (message.Author.IsBot) return;

        int argPos = 0;
        if (message.HasStringPrefix("!", ref argPos))
        {
            var result = await _commands.ExecuteAsync(context, argPos, _services);
            if (!result.IsSuccess) Console.WriteLine(result.ErrorReason);
        }
    }

Когда я проверяю журналы, он выдает ошибку нулевой ссылки с сообщением и контекстом var, я попытался погуглить об ошибке и изменить код, но безрезультатно? Я считаю, что ошибка в одном из этих двух методов, но я не на 100% положительный


person Sarah Lawarence    schedule 29.11.2020    source источник
comment
Можете поделиться сообщением об ошибке? Нам будет легче определить, где находятся ошибки. Также вы точно использовали команды для отправки сообщения пользователю, когда он присоединяется? Если да, я думаю, вы можете вместо этого использовать UserJoined обработчик событий.   -  person Cuppyzh    schedule 30.11.2020
comment
Обработчик MessageReceived вызвал необработанное исключение .: System.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта. в Discord.Commands.SocketCommandContext..ctor (клиент DiscordSocketClient, сообщение SocketUserMessage) в UBot_CodeV2.Program. ‹HandleCommandAsync› d__9.MoveNext () в C: \ Users \ sarah \ source \ repos.UBot_CodeV2 \ UBot_CodeV2 \ UBot_CodeV2 \ UBot_CodeV2 \ UBot_CodeV2. 70 Строка 70 будет var context   -  person Sarah Lawarence    schedule 30.11.2020


Ответы (1)


Думаю, для этого можно использовать событие UserJoined.

Определите обработчик событий для UserJoined

public async Task UserJoined(SocketGuildUser user)
{
   await user.SendMessageAsync("Hello");
}

Зарегистрируйте

private readonly DiscordSocketClient _client = new DiscordSocketClient();
private readonly CommandService _commandService = new CommandService();

public async Task MainAsync()
{
   ....
   _client.UserJoined += UserJoined;
   ....
}

Я не уверен, связано ли это, но проверьте, есть ли намерения участников сервера на введите описание изображения здесь

person Cuppyzh    schedule 30.11.2020
comment
Большое вам спасибо, я не могу поверить, что пропустил что-то подобное! теперь он отправляет добро пожаловать, Dm просто не тот, по какой-то причине я, вероятно, неправильно установил переменную - person Sarah Lawarence; 30.11.2020
comment
Я думаю, что вам действительно нужно только «Намерение участника сервера», чтобы это работало, а не «Намерение присутствия». - person Thom; 17.12.2020
comment
Привет @Thom, спасибо за разъяснения - person Cuppyzh; 17.12.2020