2016-11-13 3 views
0

Hier ist das Bit aus der Dokumentation, die ich nicht verstehe.Python: Discord API

purge_from(channel, *, limit=100, check=None, before=None, after=None, around=None) 

Diese Funktion ist eine Koroutine.

Bereinigt eine Liste von Nachrichten, die die Kriterien der Prädikatüberprüfung erfüllen. Wenn keine Prüfung erfolgt, werden alle Meldungen ohne Unterscheidung gelöscht.

Sie müssen über die Berechtigung zum Verwalten von Nachrichten verfügen, um Nachrichten zu löschen, auch wenn sie sind. Die Berechtigung zum Lesen des Nachrichtenverlaufs ist ebenfalls erforderlich, um den Nachrichtenverlauf abzurufen.

Nur über Bot-Konten verwendbar.

Parameter: channel (Channel) - Der zu löschende Kanal. Limit (int) - Die Anzahl der zu durchsuchenden Nachrichten. Dies ist nicht die Anzahl der Nachrichten, die gelöscht werden, obwohl es sein kann. check (Prädikat) - Die Funktion, mit der überprüft wird, ob eine Nachricht gelöscht werden soll. Es muss eine Nachricht als einzigen Parameter annehmen.

Beispiele

Nachrichten Bot löschen

def is_me(m): 
    return m.author == client.user 

deleted = await client.purge_from(channel, limit=100, check=is_me) 
await client.send_message(channel, 'Deleted {} message(s)'.format(len(deleted))) 

Ich verstehe alles hier bis zum Prüfparameter. Ich habe versucht, das Beispiel so gut wie möglich zu nutzen, kann es aber nicht. Was ich versuche zu erreichen, ist jede Nachricht zu löschen, die einen Anhang hat. Message.Attachments gibt eine leere Liste zurück, wenn keine vorhanden ist. Kann jemand das Beispiel so gut wie möglich erklären oder Code zur Verfügung stellen? Vielen Dank.

Antwort

1

Ich habe discord.py verwendet, aber ich habe nicht wirklich purge_from() verwendet. Hier gehts:

check scheint ein Argument zu sein, das nach einer Prädikatfunktion mit einem Parameter des Typs Message fragt. Nachrichten, die True zurückgeben, wenn sie als Argumente für diese Funktion verwendet werden, werden gelöscht. Dies könnte auch mit einem Lambda für etwas kompakteren Code umgeschrieben werden.

+0

Das funktionierte perfekt für mich, danke. Ich hatte Probleme mit einem Vergleich mit 'm.author' und einer anderen Variablen mit dem mitgelieferten Beispiel im Dokument. Da ich aber auch neu bei Python bin, lese ein gutes Beispiel zu Lambda, um deine Antwort besser zu verstehen: http://www.secnetix.de/olli/Python/lambda_functions.hawk – dnLL

0

Denken Sie daran: Kopieren Sie nicht direkt von der API-Dokumentation, da es höchstwahrscheinlich nicht funktioniert. Ich hatte dieses Problem zuvor, und meine Antwort war, @bot.command(pass_context=True) über dem Befehl zu verwenden, dann verwenden Sie async def clear(ctx, msglimit : int): deleted = await bot.purge_from(ctx.message.channel, limit=msglimit) await bot.say("Cleared **{}** Messages".format(len(deleted))) darunter. Denken Sie daran, die Dokumente und FAQ sorgfältig durchzulesen und eine Nachrichtenbegrenzung auf die Menge festzulegen, die gelöscht werden kann. Viel Glück, deinen Bot zu kodieren!

Verwandte Themen