在没有discord.py的情况下,如何获取不和谐服务器中用户发送的消息数?

时间:2020-08-26 01:11:27

标签: python http discord discord.py

手动使用discord的搜索功能,您可以输入类似from:user#3456的内容,它将显示它们在服务器上发送了多少消息(至少,您有权访问的消息)。

有人告诉我没有办法通过discord.py获取这些信息,但是实际上根本没有办法获取这些数据吗?我必须使用网络抓取工具吗?

为清楚起见,我已经看过this。我正在寻找的是一种访问Discord已经拥有的搜索功能的方法。

2 个答案:

答案 0 :(得分:0)

实际上可以使用discord.TextChannel.history。这是一个示例:

userMessages = []

userID = 1234567890 # Change this to the ID of the user you are looking messages for
channelID = 1234567890 # Change this to the channel ID of the messages you want to check for

channel = client.get_channel(channelID)
user = discord.utils.find(lambda m: m.id== userID, channel.guild.members)

async for message in channel.history():
    if message.author == user:
        userMessages.append(message.content)

print(len(userMessages)) # Outputs total user messages

确保将1234567890替换为相应的ID。

我添加了一个数组,该数组还显示所有用户消息,如果您愿意,可以删除它并使它增加一个计数器。

答案 1 :(得分:0)

我通过在Discord应用程序中使用from:username查询进行搜索,使用Chrome DevTools查看http请求,最后使用python模块requests重新创建了请求,从而解决了这一问题

在Discord中,您可以在Windows或Linux上使用ctrl+shift+i,在Mac上使用command+option+i打开DevTools。

在DevTools中,导航至Network标签。

我建议填写搜索查询(但不要按Enter键),然后打开devtools,然后在搜索中按Enter键。否则,您输入时会弹出很多http请求。

然后,您找到名称类似于“ search?author_id = 1234567890”的请求。如果单击该请求,则可以看到重新创建该请求所需的详细信息。

您需要使用的http请求的关键部分是Request Headers部分和Request URL部分下的General,所有这些都在弹出的Headers标签中首次单击该请求时,然后单击Response标签以查看您的回复。

discord http request in chrome devtools

请求标头的accept-encoding属性包括br,但这似乎使结果混乱。将其保留为gzip, deflate对我来说是有效的。

使用requests python模块,这应该很容易设置。只要br中没有列出accepted-encoding,您就应该能够使用json()的{​​{1}}方法,并且对于查找由...发送的邮件总数的特定问题用户(您必须在请求URL中插入其ID),只需使用requests即可访问。

要注意的主要是my_request_variable.json()['total_results']请求标头。这对用户来说是唯一的(不幸的是,除非您通过别人的帐户来完成所有这些操作),而且您不能用不和谐的bot令牌代替。