Как мне заставить Discord-бота отправить DM кому-то, кого я пингую?

Я довольно новичок в программировании и подумал, что попробую сделать бота для дискорда. До сих пор это было достаточно легко следовать, и я начал пытаться создавать команды для своего бота. Но я не могу понять, как заставить моего бота отправить DM человеку, которого я пингую бывшим. !предупредить @человека (причина). Я пытался найти его и не могу понять, как это сделать.

[Command("warn")]
[RequireUserPermission(GuildPermission.KickMembers, ErrorMessage = "You don't have the persmission ''warn_member''!")]
public async Task WarnMember(IGuildUser user = null, [Remainder] string reason = null)
{
    if (user == null)
    {
        await ReplyAsync("Please Specify A User"); return;
    }
    if (reason == null) reason = "Not Specified";

здесь я пытаюсь отправить DM, но он отправляет его человеку, который выполнил команду, а не тому, кого я пропинговал

await Context.User.SendMessageAsync("You have been warned for " + reason);

var EmbedBuilder = new EmbedBuilder()
    .WithDescription($":white_check_mark: {user.Mention} was warned\n**Reason **{reason}")
    .WithFooter(footer =>
    {
         footer
         .WithText("User Warn Log");
               
    });
    Embed embed = EmbedBuilder.Build();
    await ReplyAsync(embed: embed);
}

person Stealth    schedule 15.03.2021    source источник


Ответы (1)


Context.User всегда относится к пользователю, выполняющему команду. Чтобы отправить сообщение человеку, указанному в команде, вам нужно вызвать функцию SendMessageAsync() для вашего пользовательского аргумента.

await user.SendMessageAsync(...)

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

person 230Daniel    schedule 16.03.2021