有没有办法使用python Telegram-bot获取个人资料图片更新?

时间:2018-08-19 16:10:27

标签: python python-3.x telegram telegram-bot python-telegram-bot

因此,我正在使用python-telegram-bot将电报集成到另一个应用程序中。我的目标是在我的应用程序中通过电报获取用户的个人资料图片。 (用户和群聊)

获取用户或群组的头像很容易,在我的应用程序中下载和使用头像也很容易。但是,如果用户更改了个人资料图片怎么办?我在文档中找不到任何更新消息或处理程序,该更新或处理程序都不允许机器人检索图片更改,甚至对于组也是如此。

我的第一个想法是首先检索所有图片并将file_id存储在数据库中,然后定期检查用户/组的图片并浏览其图片,直到file_id与最后保存的{{ 1}}。

结合使用JobQueue是我能想到的最好的方法,因此我将使用它进行自我回答,但是我认为它仍然不是一个完美的解决方案,因此,如果有人有更好的主意,我会d感谢您的回答。

我正在特别为组寻找一种更好的解决方案,因为我认为除了最近的组图片之外,没有其他方法可以检索到,因此我的应用程序应该检索 all 他们。我的自我回答的另一个缺陷是,如果用户在这六个小时内两次更改个人资料图片,那么我只会得到最新的一张。对于在漫游器调用中具有file_id属性的用户可以解决此问题,但是method来获取群组的个人资料图片似乎没有。

tl; dr:

每当用户使用python-telegram-bot和python 3.5以最有效和可靠的方式更改其或组个人资料图片时,如何检索更新

1 个答案:

答案 0 :(得分:0)

这是使用offset每6小时检查一次个人资料图片的更新。

telegram.ext.JobQueue

这是我能想到的最好的方法。如果要在代码中使用此代码,则必须将# define job queue j = updater.job_queue def dl_pfps(bot, job): # this assumes that we have a textfile with the following # layout: "user_id:last_pfp_file_id" - One per line # later we'll write a list back into it with the newest IDs user_pfp_list = [] with open("user_pfps.txt") as f: for line in f: user_id = line.split(':')[0] last_file_id = line.split(':')[1] most_recent_pfp = bot.get_user_profile_photos(user_id, limit=1).photos[0] if last_file_id == most_recent_pfp[-1].file_id: print("No change") user_pfp_list.append(user_id + ":" + last_file_id) else: print("User updated profile picture. Geting full size picture...") # download and process the picture file_id = most_recent_pfp[-1].file_id newFile = bot.getFile(file_id) newFile.download('my/filename.jpg') user_pfp_list.append(user_id + ":" + file_id) # write new list back to file (overwrite current list) with open("user_pfps.txt", "w") as f: f.write("\n".join(user_pfp_list)) # check for new profile pictures every 6 hours job_dlpfps = j.run_repeating(dl_pfps, interval=21600, first=0) 调整为适当的文件名,并且需要在'my/filename.jpg'中生成一个初始列表,每个用户一行,如下所示:user_pfps.txt < / p>