В настоящее время я программирую бота, который сможет очистить канал от всех его сообщений. При этом я столкнулся с несколькими проблемами.
Я начал с использования
IEnumerable<IMessage> messages = await channel.GetMessagesAsync(1000).FlattenAsync();
await ((ITextChannel)channel).DeleteMessagesAsync(messages);
Это сработало, но вы не можете удалить сообщения старше 2 недель по неизвестным причинам.
Люди сказали мне, что этого не произойдет, если вы удалите каждое сообщение по отдельности с помощью DeleteAsync(), поэтому я так и сделал.
IEnumerable<IMessage> messages;
do
{
messages = await channel.GetMessagesAsync(100).FlattenAsync();
foreach (IMessage item in messages)
{
item.DeleteAsync();
}
} while (messages.Count() != 0);
Теперь, когда я его использую, я получаю сообщение об ошибке «Ограничение скорости», что имеет смысл.
Но теперь я ищу способ удалить все свои сообщения, оставаясь при этом в пределах лимита скорости.
Как я могу узнать, что следующий запрос (на удаление сообщения) вызовет ограничение скорости (чтобы мой бот мог дождаться выхода ограничения)?
Есть ли способ получить текущий «ковш» с помощью оболочки/API?
Или есть вообще лучший способ очистить канал?