我正在尝试找出一种方法来获取频道和/或整个服务器中特定用户发送的所有消息(可能需要一段时间)。
我还研究了 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'
,尽管它看起来确实是最干净的解决方案。
答案 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}")