我如何使用discord.py来获取Discord服务器中特定频道中的所有聊天消息?

时间:2020-10-05 15:28:25

标签: discord bots discord.py discord.py-rewrite

我的机器人具有管理员权限,所以我只是想知道是否有可能从1个频道中抓取所有消息,例如#general。

2 个答案:

答案 0 :(得分:0)

频道历史记录

这是可能的,有一个功能可以做到:channel.history()

此功能可用于检索通道中发送的所有消息。但是,如果要检索包含成千上万条消息的频道中的所有消息,则会非常慢。


示例

此示例显示了如何检索在某个频道中发送的每条消息:

private List<MyObject> getObjectList(List<OtherObject> objects) {
    return objects.stream()
        .map(obj -> {
        MyObject object = new MyObject();
        object.setId(obj.getId());
        object.setText(obj.getTextValue());
        object.setUserId(obj.getUserName());
        object.setCreatedDate(obj.getCreateDateTime());
        return object;
    }).collect(Collectors.toList());
}

参考

答案 1 :(得分:0)

  • 您可以使用channel.history
  • map将功能应用于每个元素。
  • flatten使其成为一个列表。

您可以将限制更改为None,以获取所有消息,但这需要一些时间。

def transform(message):
    return message.content


@bot.command()
async def history(ctx, channel: discord.TextChannel):
    messages_in_channel = await channel.history(limit=10).map(transform).flatten()

    print(messages_in_channel)

用法:{prefix}history #channel_mention