私はそれがクリーンであるときにそれが好きだから私はそれを私が試みたものです私はそれが好きであるのでそれが好きなので、私は不調和ボットにテキストチャンネルのすべてのメッセージを削除させようとしています
@CLIENT.command()
async def Clear(message):
return await CLIENT.delete_message(message)
私は他のことを試して他の投稿を調べましたが、ボットが入力するたびにメッセージを削除することがわかりました(探しているものではありません)
メッセージを一括削除する(つまり、一度に複数のメッセージを削除する)場合は、await Client.delete_messages(list_of_messages)
を使用します。以下に例を示します。
_import asyncio
import discord
from discord.ext.commands import Bot
Client = Bot('!')
@Client.command(pass_context = True)
async def clear(ctx, number):
mgs = [] #Empty list to put all the messages in the log
number = int(number) #Converting the amount of messages to delete to an integer
async for x in Client.logs_from(ctx.message.channel, limit = number):
mgs.append(x)
await Client.delete_messages(mgs)
Client.run(Token)
_
注:これを行うと、14日経過したunderのメッセージに対してのみ機能し、一度に100を超えるメッセージを削除することはできません。時間、つまり、この_!clear 120
_を入力するとエラーが発生します。しかし、それは不可能ではありません。本当に必要な場合は、while
ループを追加できますが、予期しない結果が生じる可能性があります。
では、メッセージがある場合はどうなりますか古い 14日よりも長いですか? Client.delete_messages(list_of_messages)
は使用できません。代わりに、Client.delete_message(Message)
を使用できます。これにより、一度に1つのメッセージのみが削除されます。はい、私は遅いことを知っていますが、今のところ、それだけです。したがって、logs_from()
でループするたびに削除するように元のコードを変更できます。
このようなもの:
_import asyncio
import discord
from discord.ext.commands import Bot
Client = Bot('!')
@Client.command(pass_context = True)
async def clear(ctx, number):
number = int(number) #Converting the amount of messages to delete to an integer
counter = 0
async for x in Client.logs_from(ctx.message.channel, limit = number):
if counter < number:
await Client.delete_message(x)
counter += 1
await asyncio.sleep(1.2) #1.2 second timer so the deleting process can be even
Client.run(Token)
_
client.logs_from(someChannel)
を使用して、チャネル内のすべてのメッセージのリストを取得できます。そこから、client.delete_message(msg)
を使用します。
discord.pyのreadme リポジトリに記載されている例をベースとして使用し、Python 3.5。
client = discord.Client()
@client.event
async def on_message(message):
if message.content.startswith('!clear'):
tmp = await client.send_message(message.channel, 'Clearing messages...')
async for msg in client.logs_from(message.channel):
await client.delete_message(msg)