2017-07-20 1 views
0

J'ai fait une commande de purge pour mon bot de discorde, il fonctionne très bien ...Comment purger les messages d'un seul utilisateur sur discord.net et C#?

(version simple)

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

Maintenant, je veux faire la même chose, mais seulement la suppression des messages d'un seul utilisateur, mais je ne peux pas sembler le faire fonctionner ... Voilà ce que j'ai en ce moment:

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); 

Ce second code semble ne supprimer la commande et rien d'autre ... Qu'est-ce que je fais mal ?

Répondre

0

Essayez

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)); 

boucle ensuite par msgs et appeler delete sur chacun. Cela sépare les messages pour inclure uniquement ceux qui nous intéressent (c'est-à-dire les messages de l'utilisateur spécifié).

Bien sûr, vous allez avoir des contrôles de sécurité aussi comme la vérification si e.GetArg("user") est vide, si elle est en fait un utilisateur, vérifier si msgs contient des messages, si e.Channel.Messages est inférieur à votre amount, etc. Untested mais devrait vous mettre dans la bonne direction.

+0

Cela ne fonctionnerait pas, si ma commande dit 5 messages, il serait télécharger les 5 derniers messages, et dans ces 5 supprimer tous les messages de cet utilisateur. Par exemple, imaginez que l'utilisateur en question ait dit la même chose 6 fois de suite, et je veux supprimer les 5 derniers, cependant, les gens ont envoyé 3 messages de plus par la suite. Si ma commande avait le code que vous avez envoyé, et que je l'ai tapé avec 5 pour le montant tel qu'il devrait être, cela supprimerait seulement les 2 derniers messages. – Nyss