Python:不和谐 API

Posted

技术标签:

【中文标题】Python:不和谐 API【英文标题】:Python: Discord API 【发布时间】:2017-03-27 12:55:12 【问题描述】:

这是我不理解的文档中的一些内容。

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

这个函数是一个协程。

清除符合由 谓词检查。如果未提供检查,则所有消息都是 毫无歧视地删除。

您必须拥有管理消息权限才能删除消息,即使 他们是你自己的。还需要读取消息历史记录权限 检索消息历史记录。

只能由机器人帐户使用。

参数:channel (Channel) – 要清除的通道。限制 (int) – 要搜索的消息数。这不是 将被删除的消息数,尽管可以。查看 (predicate) – 用于检查消息是否应该是的函数 删除。它必须将 Message 作为其唯一参数。

例子

删除机器人的消息

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

我了解这里的所有内容,直到 check 参数。我已经尽可能地使用这个例子,但我不能。我想要实现的是清除每条带有附件的消息。如果没有,Message.Attachments 返回一个空列表。谁能尽可能地解释这个例子,或者提供代码?谢谢。

【问题讨论】:

【参考方案1】:

我使用过 discord.py,但我并没有真正使用过purge_from()。如下:

check 似乎是一个参数,要求使用一个 Message 类型参数的谓词类型函数。当用作该函数的参数时返回 True 的消息将被删除。这也可以用 lambda 重写以获得更紧凑的代码。

client.purge_from(channel, limit=100, check=lambda m: m.author == client.user)

【讨论】:

这对我来说非常有效,谢谢。我在与m.author 和另一个变量与文档中提供的示例进行比较时遇到问题。但是,由于我也是 Python 新手,因此请好好阅读 lambda 以更好地理解您的答案:secnetix.de/olli/Python/lambda_functions.hawk【参考方案2】:

记住:不要直接从 API 文档中复制,因为它很可能不起作用。我之前遇到过这个问题,我的回答是在命令上方使用@bot.command(pass_context=True),然后使用 async def clear(ctx, msglimit : int): deleted = await bot.purge_from(ctx.message.channel, limit=msglimit) await bot.say("Cleared **** Messages".format(len(deleted))) 在它下面。请记住仔细阅读文档和常见问题解答,并将消息限制设置为可以清除的数量。祝你的机器人编码好运!

【讨论】:

以上是关于Python:不和谐 API的主要内容,如果未能解决你的问题,请参考以下文章

不和谐机器人的语法无效(python)

使用python打开程序(不和谐)

不和谐机器人的命令不起作用(Python)

python问题中的不和谐机器人

python中的不和谐机器人

Python:不和谐 API