python - Discord py 清除通道
问题描述
我正在尝试让我的 Discord 机器人从指定频道中删除一些消息,但出现错误
AttributeError: 'int' object has no attribute 'purge'
功能如下
await clearChannel(3, 837017813357035560)
@bot.event
async def clearChannel(number, channel):
await channel.purge(limit=number)
解决方案
欢迎来到 Discord.py!
这里有一些问题。
您应该使用
@bot.command()
装饰器-您对此感到困惑@bot.event
命令并非旨在由其他代码触发 - 从这个意义上说,它们不是常规方法。您的用户将
!clearChannel
在 Discord 聊天中触发命令,其中!
是您为bot
对象设置的前缀。您的用户不必手动传递通道 ID 以使命令正常工作。对于最终用户来说,这将是不必要的复杂处理。相反,您应该只从发送命令消息的位置自动获取通道 ID。
您的代码应如下所示;
@commands.has_permissions(administrator=True)
@bot.command()
async def clear(ctx, number: int):
await ctx.channel.purge(limit=number)
我添加了一些东西;
我添加了一项检查以确保只有管理员才能使用此命令。如果您不验证可能会损坏服务器的命令,一旦部署了您的机器人,任何用户都可以删除他们想要的任意数量的消息。
number: int
是类型提示。它将尝试将number
参数解析为 int,当您将其传递给purge
方法时,您需要它。如果它不能被解析,例如它包含非数字字符,你可以处理它。使用类型提示还可以提高代码的可读性。
编辑:
看来我误解了你的问题。我猜你正在寻找一种非命令方法,然后你可以在事件或类似的东西中实现它。
要做到这一点,它基本上是相同的。
async def clear_channel(channels, limit: int): # channels should be a list of discord.Channel objects
for channel in channels:
await channel.purge(limit=limit)
您可以通过向管理员询问频道 ID 并使用get_channel()获取discord.Channel
对象,然后将其附加到要传递到上述方法的列表中来获取需要传入的频道列表。还有一种更用户友好的方法是通过传入频道名称并以这种方式获取频道对象,但我将把它留给你;)
推荐阅读
- azure - 使用 SPN 通过 powershell 授权 Azure API 连接
- python - 将目录从路径复制到当前目录
- javascript - 折叠列表菜单更改
- c++ - 如何使用 openssl 库中的 openssl passwd 命令?
- amazon-web-services - 将s3图像从一个存储桶复制到同一帐户的另一个存储桶后未加载
- java - 将 WebElement 作为参数传递给隐式等待方法
- scala - 错误输入长度 = 1 使用 sbt 1.2.8 scala 2.12.10 play 2.8.1
- javascript - html,JS搜索字段列表
- github - 通过 GitHub 提交到 master 触发 Dokku 部署
- asp.net - 如何修复“ObjectContext 实例已被处置错误”