#c# #discord #discord.net
#c# #Discord #discord.net
Вопрос:
Последние несколько дней я работал над ботом 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 и контекстом, я попытался найти ошибку в Google и изменить код, но безрезультатно какие-либо советы? Я считаю, что ошибка в одном из этих двух методов, но я не на 100% положительный
Комментарии:
1. Можете поделиться сообщением об ошибке? Нам будет легче определить, где находятся ошибки. Кроме того, вы точно использовали команды для отправки сообщения пользователю, когда они присоединяются? Если да, я думаю, вы можете
UserJoined
использовать обработчик событий пользователя вместо этого.2. Обработчик MessageReceived выдал необработанное исключение.: System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта. в Discord. Команды. SocketCommandContext..ctor(клиент DiscordSocketClient, сообщение сообщения SocketUserMessage) в UBot_CodeV2.Program. <HandleCommandAsync>d__9.MoveNext() в C:UserssarahsourcereposUBot_CodeV2UBot_CodeV2Program.cs:line 70 Строка 70 будет var context
Ответ №1:
Я думаю, вы можете использовать UserJoined
event для достижения этой цели.
Определите обработчик событий для подключенного пользователя
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;
....
}
Я не уверен, достаточно ли это связано, но проверьте, включен ли член сервера Intents
Комментарии:
1. Большое вам спасибо, я не могу поверить, что пропустил что-то подобное! теперь он отправляет приветствие Dm просто неправильное, по какой-то причине я, вероятно, неправильно установил переменную
2. Я думаю, что на самом деле вам нужно только «намерение участника сервера», чтобы это работало, а не «Намерение присутствия».