Telethon中是否有方法可获取聊天消息并附带发送者姓名、日期和时间?
聊天消息关联发送者姓名与时间信息实现方案
通用逻辑
聊天消息的基础数据结构默认会关联用户标识、时间戳两个核心字段,你只需要在获取消息时同步做映射转换即可,无需额外开发复杂的同步逻辑:
- 先确认你当前调用的消息查询接口/消息表返回的原始数据,是否包含
send_user_id(发送者用户ID)、msg_timestamp(消息发送时间戳)两个字段,绝大多数商用IM服务、自研聊天系统都会默认携带这两个基础字段 - 发送者姓名关联:提前维护用户ID与姓名的映射缓存,拿到消息的
send_user_id后直接从缓存中匹配即可。如果需要实时获取最新昵称,优先做批量ID查询,不要单条消息循环查库,避免性能问题 - 时间信息转换:直接将
msg_timestamp按你需要的格式(如YYYY-MM-DD HH:mm:ss)做格式化转换即可,无需额外存储冗余时间字段
代码示例(Python 服务端场景)
# 初始化用户ID-姓名映射缓存,可在服务启动时生成、定期更新保证数据准确性 user_id_to_name = { "u_1001": "张三", "u_1002": "李四" } def assemble_complete_msg(raw_msg): # 从原始消息数据中提取基础字段 msg_content = raw_msg.get("content") sender_uid = raw_msg.get("send_user_id") send_timestamp = raw_msg.get("msg_timestamp") # 关联发送者姓名 sender_name = user_id_to_name.get(sender_uid, "未知用户") # 转换时间戳为可读时间格式,注意适配时间戳的秒/毫秒单位 from datetime import datetime send_time = datetime.fromtimestamp(send_timestamp / 1000).strftime("%Y-%m-%d %H:%M:%S") # 返回组装后的完整消息结构体 return { "content": msg_content, "sender_name": sender_name, "send_time": send_time }
前端页面抓取场景适配
如果你是从已渲染的聊天页面中抓取消息,直接通过父DOM节点关联查询即可:
- 每条聊天消息的父级DOM容器下,一般会同时存在发送者昵称、消息内容、消息时间三类子节点,通过父节点选择器同时获取三类字段即可
- 不要单独全局批量获取所有消息内容、所有昵称后按下标匹配,极易出现消息顺序错位的问题
注意事项
- 时间戳转换时注意区分单位是秒还是毫秒,避免出现时间异常
- 多端同步场景下优先使用服务端返回的时间戳,不要使用本地生成的时间,避免不同设备时间不一致导致的顺序错乱
内容的提问来源于stack exchange,提问作者Vedha Vikash
相关产品推荐
相关产品推荐

