如何在Telegram中获取user_hash?——使用Telethon与Telebot开发Python通知功能的参数疑问
如何获取Telethon中InputPeerUser需要的user_hash(access_hash)
其实你完全不用手动去查找user_hash(准确来说是access_hash),Telethon已经提供了便捷的方法来自动处理这个参数,而且这也是最稳妥的方式,避免手动存储hash带来的过期或错误问题。下面给你两种可行的方案:
方案一:直接获取可用的InputPeerUser(推荐)
Telethon的client.get_input_entity()方法可以直接根据user_id返回包含正确access_hash的InputPeerUser对象,你不需要手动拼接参数。示例代码如下:
from telethon import TelegramClient import asyncio # 替换成你自己的配置 API_ID = 你的api_id API_HASH = "你的api_hash" SESSION_NAME = "my_session" async def send_notification(user_id, message): async with TelegramClient(SESSION_NAME, API_ID, API_HASH) as client: # 自动获取包含access_hash的InputPeer receiver = await client.get_input_entity(user_id) # 发送通知 await client.send_message(receiver, message) # 调用示例:替换成目标用户的user_id和你的通知内容 asyncio.run(send_notification(123456789, "这是一条测试通知"))
方案二:手动提取access_hash(仅作了解)
如果你确实想获取这个hash值,可以通过client.get_entity()方法获取用户的完整实体信息,然后从中提取access_hash属性:
async def get_user_access_hash(user_id): async with TelegramClient(SESSION_NAME, API_ID, API_HASH) as client: user_entity = await client.get_entity(user_id) print(f"用户的access_hash是:{user_entity.access_hash}") return user_entity.access_hash # 调用获取hash asyncio.run(get_user_access_hash(123456789))
注意事项
access_hash是Telegram用于验证用户实体合法性的参数,不建议手动存储,因为它理论上存在过期或变更的可能,每次发送前通过get_input_entity获取是最可靠的。- 如果目标用户是隐私设置较高的账号,你需要确保你的Telethon账号已经添加对方为好友,或者双方在同一个群组中,否则可能无法获取到用户的实体信息。
内容的提问来源于stack exchange,提问作者Federico De Marco
相关产品推荐
相关产品推荐

