Как очистить сообщения от одного пользователя на discord.net и С#?

Я сделал команду очистки для моего бота в дискорде, он отлично работает...

(простая версия)

int amount = Int32.Parse(e.GetArg("amount"))+1;
Message[] messagesToDelete = await e.Channel.DownloadMessages(amount);
await e.Channel.DeleteMessages(messagesToDelete);

Теперь я хочу сделать то же самое, но только удалив сообщения от одного пользователя, но я не могу заставить его работать... Вот что у меня есть прямо сейчас:

int amount = Int32.Parse(e.GetArg("amount"));
ulong userID = e.Server.FindUsers(e.GetArg("user")).First().Id;

Message[] messagesToDelete = await e.Channel.DownloadMessages(amount, userID);
await e.Channel.DeleteMessages(messagesToDelete);

Этот второй код, похоже, удаляет только команду и ничего больше... Что я делаю неправильно?


person Nyss    schedule 20.07.2017    source источник


Ответы (1)


Пытаться

using System.Linq;

var users = e.Server.FindUsers(e.GetArg("user")).ToArray();
var msgs = (await e.Channel.DownloadMessages(amount));
msgs = msgs.Where(x => users.Contains(x.User));

Затем прокрутите msgs и вызовите удаление для каждого из них.

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

Конечно, вам также понадобятся некоторые проверки безопасности, такие как проверка, пуст ли e.GetArg("user"), действительно ли это пользователь, проверка, содержит ли msgs какие-либо сообщения, если e.Channel.Messages меньше, чем ваш amount, и т. д. Непроверено, но это должно помочь вам правильное направление.

person Mr Awesome8    schedule 25.07.2017
comment
Это не сработает, если моя команда скажет 5 сообщений, она загрузит 5 последних сообщений и в этих 5 удалит все сообщения от этого пользователя. Например, представьте, что рассматриваемый пользователь сказал одно и то же 6 раз подряд, и я хочу удалить последние 5 из них, однако после этого люди отправили еще 3 сообщения. если бы в моей команде был код, который вы отправили, и я набрал его с 5 для суммы, как и должно быть, он удалил бы только последние 2 сообщения. - person Nyss; 26.07.2017