<pre><code>class ModLog:
def __init__(self, bot):
self.bot = bot
async def on_ready(self):
await self.bot.wait_until_ready()
for guild in self.bot.guilds:
channel = await self.get_channel(guild)
if channel:
self.bot.loop.create_task(self.modlog_purge(channel))
async def get_channel(guild):
# Whatever your logic for getting the Channel for a given guild is
async def modlog_purge(self, channel):
while True:
now = datetime.utcnow()
two_weeks_ago = now - timedelta(days=14)
await channel.purge(before=two_weeks_ago)
await asyncio.sleep(86400)
def setup(bot):
q = ModLog(bot)
bot.add_cog(q)
</code></pre>
<p>下面是我将如何构造它(我现在没有使用<code>discord.py</code>的计算机,因此可能有一些错误)。我们有一个<code>on_ready</code>事件,该事件为每个拥有我们想要维护的通道的服务器启动后台任务(这可能会在一个通道列表中循环,或者类似的东西)。在</p>
<p>实际的清除全部由<a href="https://discordpy.readthedocs.io/en/rewrite/api.html#discord.TextChannel.purge" rel="nofollow noreferrer">^{<cd3>}</a>协同程序处理。我们只需向它传递一个<code>datetime</code>对象,它将从该日期之前删除100条消息(这是可配置的)。然后它会睡一天,然后重复。在</p>