手动使用discord的搜索功能,您可以输入类似from:user#3456
的内容,它将显示它们在服务器上发送了多少消息(至少,您有权访问的消息)。
有人告诉我没有办法通过discord.py获取这些信息,但是实际上根本没有办法获取这些数据吗?我必须使用网络抓取工具吗?
为清楚起见,我已经看过this。我正在寻找的是一种访问Discord已经拥有的搜索功能的方法。
答案 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
标签以查看您的回复。
请求标头的accept-encoding
属性包括br
,但这似乎使结果混乱。将其保留为gzip, deflate
对我来说是有效的。
使用requests
python模块,这应该很容易设置。只要br
中没有列出accepted-encoding
,您就应该能够使用json()
的{{1}}方法,并且对于查找由...发送的邮件总数的特定问题用户(您必须在请求URL中插入其ID),只需使用requests
即可访问。
要注意的主要是my_request_variable.json()['total_results']
请求标头。这对用户来说是唯一的(不幸的是,除非您通过别人的帐户来完成所有这些操作),而且您不能用不和谐的bot令牌代替。