因此,我正在使用python-telegram-bot将电报集成到另一个应用程序中。我的目标是在我的应用程序中通过电报获取用户的个人资料图片。 (用户和群聊)
获取用户或群组的头像很容易,在我的应用程序中下载和使用头像也很容易。但是,如果用户更改了个人资料图片怎么办?我在文档中找不到任何更新消息或处理程序,该更新或处理程序都不允许机器人检索图片更改,甚至对于组也是如此。
我的第一个想法是首先检索所有图片并将file_id存储在数据库中,然后定期检查用户/组的图片并浏览其图片,直到file_id
与最后保存的{{ 1}}。
结合使用JobQueue是我能想到的最好的方法,因此我将使用它进行自我回答,但是我认为它仍然不是一个完美的解决方案,因此,如果有人有更好的主意,我会d感谢您的回答。
我正在特别为组寻找一种更好的解决方案,因为我认为除了最近的组图片之外,没有其他方法可以检索到,因此我的应用程序应该检索 all 他们。我的自我回答的另一个缺陷是,如果用户在这六个小时内两次更改个人资料图片,那么我只会得到最新的一张。对于在漫游器调用中具有file_id
属性的用户可以解决此问题,但是method来获取群组的个人资料图片似乎没有。
每当用户使用python-telegram-bot和python 3.5以最有效和可靠的方式更改其或组个人资料图片时,如何检索更新?>
答案 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>