获取频道/服务器中特定用户发送的所有消息 - Discord.py

时间:2021-04-30 20:55:43

标签: python discord.py

我正在尝试找出一种方法来获取频道和/或整个服务器中特定用户发送的所有消息(可能需要一段时间)。

我还研究了 User.history()Member.history(),但尽管文档没有提到它,但它只会返回用户的 DM 历史记录。

这是机器人命令代码片段:

@bot.command(aliases=['rq'])
async def randomquote(ctx):

    def check(ctx):
        return ctx.author.id == memberID

    messages = await ctx.channel.history(limit=100, check=check).flatten()
    await ctx.send(f"{random.choice(messages).content}")

我尝试过 this answer,但是,check=check 抛出:an exception: TypeError: history() got an unexpected keyword argument 'check',尽管它看起来确实是最干净的解决方案。

2 个答案:

答案 0 :(得分:0)

那个答案似乎是错误的,没有这样的方法可以将检查构建到 history 中。此外,如果您想要该用户的所有消息,则需要取消限制。但是,您可以尝试以下方法之一:

messages = []
async for message in ctx.channel.history(limit=None):
    if message.author.id == memberID:
        messages += [message]

# Or...

messages = [msg for msg in await ctx.channel.history(limit=None).flatten() if msg.author.id == memberID]

答案 1 :(得分:0)

首先,您可以获取频道中的所有消息并检查消息的作者是否为用户:

@bot.command(aliases=['rq'])
async def randomquote(ctx):
    messages = await ctx.channel.history(limit=100).flatten()
    messages = [m for m in messages if m.author.id == memberID]
    await ctx.send(f"{random.choice(messages).content}")