我的机器人具有管理员权限,所以我只是想知道是否有可能从1个频道中抓取所有消息,例如#general。
答案 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)
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