首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用telethon从聊天中仅获取未读消息?

使用 Telethon 从聊天中仅获取未读消息可以通过以下步骤实现。Telethon 是一个用于与 Telegram API 交互的 Python 库。以下是详细的步骤和示例代码:

1. 安装 Telethon

首先,确保你已经安装了 Telethon:

代码语言:javascript
复制
pip install telethon

2. 设置 Telegram API

你需要在 Telegram 上创建一个应用以获取 API ID 和 API Hash。你可以在 my.telegram.org 上创建应用并获取这些信息。

3. 编写代码

以下是一个示例代码,展示如何使用 Telethon 从聊天中仅获取未读消息:

代码语言:javascript
复制
from telethon import TelegramClient, events
from telethon.tl.functions.messages import GetHistoryRequest
from telethon.tl.types import PeerUser, PeerChat, PeerChannel

# 你的API ID和API Hash
api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'

# 创建客户端
client = TelegramClient('session_name', api_id, api_hash)

async def get_unread_messages(chat_id):
    # 获取聊天历史
    result = await client(GetHistoryRequest(
        peer=chat_id,
        limit=100,  # 获取最近100条消息
        offset_date=None,
        offset_id=0,
        max_id=0,
        min_id=0,
        add_offset=0,
        hash=0
    ))

    # 过滤未读消息
    unread_messages = [message for message in result.messages if not message.out and message.unread]

    return unread_messages

async def main():
    # 连接到Telegram
    await client.start()

    # 替换为你要获取消息的聊天ID
    chat_id = 'CHAT_ID'

    # 获取未读消息
    unread_messages = await get_unread_messages(chat_id)

    # 打印未读消息
    for message in unread_messages:
        print(f"Message ID: {message.id}, Message: {message.message}")

    # 断开连接
    await client.disconnect()

# 运行主函数
with client:
    client.loop.run_until_complete(main())

解释

  1. 创建客户端:使用你的 API ID 和 API Hash 创建一个 Telegram 客户端。
  2. 获取聊天历史:使用 GetHistoryRequest 获取聊天历史。你可以调整 limit 参数以获取更多或更少的消息。
  3. 过滤未读消息:通过检查消息的 unread 属性来过滤未读消息。message.out 属性用于检查消息是否是由你发送的,未读消息通常是接收的消息。
  4. 打印未读消息:遍历未读消息并打印它们的内容。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TG 网盘机器人

但与此同时作为一款聊天软件,想要公开上传、分享文件却并不是太容易。虽然这多少有违一款聊天软件的初衷,但事实现状就是当下很多 TG 频道、群组被作为文件共享服务而使用。...机器人收到文本消息时,通过正则匹配尝试分享链接提取。如果提取成功,再使用资源索引进行数据库索引。如没有匹配不返回任何内容,如匹配成功则进一步比对密钥。...3.容灾备份 为了应对可能的账号、群组消失事件,网盘配备了可选的备份功能,用于将媒体复制存储到多个群组。 机器人在收到媒体消息后,会将其复制到存储群组,并记录对应的消息 ID 。...此时在数据库中会记录下资源密钥所对应的消息 ID,以供取回媒体时使用。该媒体的发送者身份为 BOT 自身。...如果启用了容灾备份功能,账号2(或账号3,下同)会定时扫描数据库做备份的资源记录,并根据对应的群组 ID 和消息 ID,将存储群组的媒体复制到备份群组。该媒体的发送者身份为账号2。

9110

如何使用AndroidQF快速Android设备获取安全取证信息

关于AndroidQF AndroidQF,全称为Android快速取证(Android Quick Forensics)工具,这是一款便携式工具,可以帮助广大研究人员快速目标Android设备获取相关的信息安全取证数据...AndroidQF旨在给广大研究人员提供一个简单且可移植的跨平台实用程序,以快速Android设备获取信息安全取证数据。...可以提供设备相关的诊断信息; · “getprop” Shell命令的执行输出,可以提供构建信息和配置参数; · “ps” Shell命令的输出结果,可以提供目标设备中所有正在运行进程的列表; · (可选)备份SMS或MMS消息...除此之外,我们还可以考虑让AndroidQF在一个VeraCrypt容器运行。...获取到加密的取证文件之后,我们可以使用下列方式进行解密: $ age --decrypt -i ~/path/to/privatekey.txt -o .zip .zip.age

7K30
  • 如何使用DNS和SQLi数据库获取数据样本

    泄露数据的方法有许多,但你是否知道可以使用DNS和SQLi数据库获取数据样本?本文我将为大家介绍一些利用SQL盲注DB服务器枚举和泄露数据的技术。...我尝试使用SQLmap进行一些额外的枚举和泄露,但由于SQLmap header的原因WAF阻止了我的请求。我需要另一种方法来验证SQLi并显示可以服务器恢复数据。 ?...在之前的文章,我向大家展示了如何使用xp_dirtree通过SQLi来捕获SQL Server用户哈希值的方法。这里我尝试了相同的方法,但由于客户端防火墙上的出站过滤而失败了。...此外,在上篇文章我还引用了GracefulSecurity的文章内容,而在本文中它也将再次派上用场。 即使有出站过滤,xp_dirtree仍可用于网络泄露数据。...在下面的示例,红框的查询语句将会为我们Northwind数据库返回表名。 ? 在该查询你应该已经注意到了有2个SELECT语句。

    11.5K10

    IM群聊消息的已功能在存储空间方面的实现思路探讨

    所以,本文可以作为IM聊天消息(主要是群聊)功能的基本实现思路方面的参考,但不建议盲目迷信文中的结论或方案,避免被一些不够具体的技术指标而误导。...如果你对IM的已功能有产品方面的痛点困惑,可以参考一下微信对已功能的设计定位,详见《IM热门功能思考:为什么微信里没有消息“已”功能?》。...下面是大致的逻辑流程图:  4.2 查询消息人数(私聊、群聊通用) 消息的发送者,加载消息列表到聊天窗口时,可能需要展示消息是否被已。...客户端获取消息的数据: 1)当需要获取人数时,用receiver_list的个数减去read_list的个数; 2)当需要获取人员列表时,需用receiver_list减去read_list...客户端获取消息的数据: 1)当需要获取人数时,直接计算unread_list的个数; 2)当需要获取人员列表时,直接返回unread_list和read_list。

    5.7K50

    实时社群技术专题(二):百万级成员实时社群技术实现(消息系统篇)

    此外:IM聊天室的广播模式也不能直接复用,因为在聊天室架构,每个长链接映射到一个聊天室,因此当你登录到某个聊天室的时候,你只会收到该聊天室的消息。...当一条消息需要广播时,消息服务会访问订阅服务,获取到该服务器/频道被订阅的长链接服务器列表,并依次给该列表的长链接服务器发送消息下发通知,长链接服务器收到通知后会根据订阅详情再广播给所有客户端。...对于其他频道,如果你仅仅需要知道该频道有多少条消息(或者有无消息),则可以选择订阅该频道的计数(或者状态),此时服务下发时会广播精简的消息体用于维护客户端计数,并且当计数达到一定阈值之后...,我们也选择了不同的存储方案(历史消息使用分布式时间序列数据库,计数使用分布式 k-v 数据库),最大化地提升消息存储和查询的性能和效率。...有写就有,针对读取操作:1)所有最近的消息计数均会存储在中心化缓存,并通过先进先出和缓存过期等不同的策略来确保缓存存储的永远是最新和最热的数据;2)对于消息 ID 和消息内容本身,中心化缓存也会有不同的数据结构和过期策略

    32220

    如何设计一个亿级消息量的 IM 系统

    通常在IM系统消息会有以下几类:文本消息、表情消息、图片消息、视频消息、文件消息等等 会话 :通常指两个用户之间因聊天而建立起的关联 群 :通常指多个用户之间因聊天而建立起的关联 终端 :指用户使用...在写扩散,每个人都只自己的信箱里读取消息,但写(发消息)的时候,对于单聊跟群聊处理如下: 单聊:往自己的信箱跟对方的信箱都写一份消息,同时,如果需要查看两个人的聊天历史记录的话还需要再写一份(当然,...这种方式前端处理会比较麻烦一点,而且聊天的过程接收方的历史消息列表可能会在中间插入一条消息,这样会很奇怪,而且用户可能会漏消息。...如何处理读数 在IM系统读数的处理非常重要。读数一般分为会话读数跟总读数,如果处理不当,会话读数跟总读数可能会不一致,严重降低用户体验。...如何存储历史消息 扩散 对于扩散,只需要按会话ID进行Sharding存储一份就可以了。

    3K53

    从新手到专家:如何设计一套亿级消息量的分布式IM系统

    3)群:通常指多个用户之间因聊天而建立起的关联。 4)终端:指用户使用IM系统的机器(通常有Android端、iOS端、Web端等等)。 5)读数:指用户还没消息数量。...》 《现代IM系统聊天消息的同步和存储方案探讨》 《一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践》 《游击队到正规军(一):马蜂窝旅游网的IM系统架构演进之路》 《游击队到正规军(三...这种方式前端处理会比较麻烦一点,而且聊天的过程接收方的历史消息列表可能会在中间插入一条消息,这样会很奇怪,而且用户可能会漏消息。...PS:多端同步这也是IM里比较坑爹的技术痛点,有兴趣请移步《浅谈移动端IM的多点登录和消息漫游原理》。 8.5 如何处理读数 在IM系统读数的处理非常重要。...PS:如果你对Timeline这个概念不熟悉,请这篇《现代IM系统聊天消息的同步和存储方案探讨》。

    3.1K01

    你问我答 | 即时通信IM(2021年5月-7月)

    Q2:重新登录后,群聊消息如何第一条消息开始查看? SDK 提供的拉取历史消息支持指定的群消息 sequence 开始向前或者向后拉,也就是消息定位的能力。...消息开始的 sequece:可以通过会话最后一条消息的 sequece 减去会话的消息数得到。 Q3:消息没有收到或消息丢失如何处理?...另外,体验版的帐号支持删除,您可以调用账号删除接口删除不再使用的帐号,删除后该用户的数据将无法恢复,请谨慎处理。 Q5:IM的DAU如何计算?...Q10:即时通信IM如何获取当前消息数量? 即时通信 IM 可通过 TIMConversation 的 getUnReadMessageNum 方法获取当前会话消息的数量。...(对于聊天室,Server 不保存计数,每次登录后跟 Server 同步计数后将会清零。)

    1K10

    使用腾讯云IM搭建应用内类微信社交聊天模块实践

    ,建议使用备注名或昵称, "messageType": 原消息类型, "version": 协议版本}在消息列表展示时, cloudCustomData 字段,提取出上述JSON信息,直接用于拼接展示...,可便捷看到群内哪些人已哪些人,帮助发送者确认信息传递效率。...此外,发送端也可主动请求消息回执信息。发送端其他界面进入消息列表后,先请求获取历史消息,再调用 getMessageReadReceipts 方法请求获取消息回执信息。...群聊场景的消息回执,通常需要能够查看详情,显示群内哪些人已,哪些人。...当用户点击已回执角标时,可调用 getGroupMessageReadMemberList 方法分页拉取消息群成员列表。

    8K171

    iOS音视频接入- IM及时通讯基本原理

    IM简介 即时通信(Instant Messaging,IM)基于 QQ 底层 IM 能力开发,需植入 SDK 即可 轻松集成聊天、会话、群组、资料管理能力,帮助您实现文字、图片、短语音、短视频等富...image.png 消息会话与读数 image.png 消息会话用来区分不同的单聊、群聊或聊天室,一般在客户端上构造会话列表,通过用户ID,群组ID或聊天室ID来标记。...除聊天室这种只有在线消息聊天场景外,单聊和群聊都支持离线消息,当用户不在线时,未接收的消息会标识为。...消息客户端存在回执机制(已读上报),客户端在接受到消息时,需要向服务端发送一条回执,确认已经收到消息,若客户端未发送回执或服务端未收到回执,则服务端会认为该消息未被接收,状态一直为。...若某个会话客户端同时收到多条消息,则上报是只对该回话中最新的消息进行已读上报。

    2.3K32

    快给你的软件加IM聊天功能!

    联系人列表只更新存储收发双方的最新一条消息,不存储两人所有的历史消息 消息索引表的使用场景一般用于查询收发双方的历史聊天记录,是聊天会话维度 联系人表的使用场景用于查询某一个人最近的所有联系人,是用户全局维度...如何消息发出去?...上面通过提醒来查看消息的环节涉及了两个概念:一个是我有多少条消息,另一个是我和某个联系人有多少条消息。...那么,这两个消息读数变更的场景是下面这样的: 张三给李四发送一条消息,IM服务端接收到这条消息后,给李四的总读数增加1,给李四和张三的会话也增加1; 李四看到有一条消息后,打开App,查看和张三的聊天页...IM服务端进行完消息存储和变更后,会通过接收通道把消息推送给接收方,接收通道一般是通过IM服务端和消息接收方之间维护的长连接来实现,还会使用第三方操作系统级别的辅助通道,来提升“自建的长连接不可用“

    1.7K10

    《redis in action》发布和订阅

    这个就比较容易了,直接使用List数据结构即可完成。我们让消费者队列获取数据即可。...说白了就是我们的前边说的消息队列,如果用来描述QQ的用户对用户的聊天,那么用该队列即可,因为list具有顺序,那么消息也就自带了时间特色。...这时候A和B显示的消息数应该是不一样的。所以说我们存储群消息和群的人员的关系的时候肯定要保留用户所读取到的消息的位置。当消息位置没有达到现有消息的位置的时候,应该要进行提示。...所以在获取所有群聊数据的时候,我们也是按这个规则去寻找所有与本人相关的群聊,然后循环去获取群聊的消息。当然这块要是考虑消息的话,就是通过websocket去获取消息和当前消息的位置差来做。...当有群聊成员退出群聊的时候,那就需要删除消息和成员消息的映射关系。当有新成员加入的时候,那就需要新增消息与成员消息的映射关系。

    21730

    uni-app+php+workman实现简单聊天功能之聊天模块封装

    前面介绍了LaravelWebsocket基本使用(Workerman) 接下来利用uni-app+laravel+workman实现一个简单的聊天功能。...,并且渲染到tabbar的badge this.initTabbarBadge(); //获取信息 // this.getChatMessages()...该函数获取服务器的用户绑定结果 如果用户状态正常则使用户上线 初始化tabbar的总信息角标initTabbarBadge 获取的信息getChatMessages 绑定失败断开连接,并展示相关提示...该函数用于获取信息,当用户离线时接受到的消息暂存在服务端缓存,当用户重新上线时触发该函数获取消息并广播事件UserChat使页面获取消息 Message > __UpdateChatdetail...__UpdateNoReadNum({type:"read",num:item.noreadnum}); } }, 该函数用于读取消息,主要包含以下 获取旧数据 如果该会话存在则使为消息数清零

    4.4K40

    直播系统聊天技术(六):百万人在线的直播间实时聊天消息分发技术实践

    上述步骤3的通知合并机制原理如下: a)将所有成员加入到待通知队列(如已存在则更新通知消息时间); b)下发线程,轮训获取待通知队列; c)向队列中用户下发通知拉取。...,消息队列返回消息列表(原理详见下图 ▼); 4)用户 B 获取到新的消息。...(这是跟IM的实时聊天消息最大的不同,IM是不允许丢消息的)。...[4]《现代IM系统聊天消息的同步和存储方案探讨》 [5]《关于IM即时通讯群聊消息的乱序问题讨论》 [6]《IM群聊消息的已回执功能该怎么实现?》...[10]《网易云信技术分享:IM的万人群聊技术方案实践总结》 [11]《阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处》 [12]《IM群聊消息的已功能在存储空间方面的实现思路探讨

    2.3K20

    IM开发快速入门(一):什么是IM系统?

    (稍后发布)》 《IM开发快速入门(七):如何理解并实现IM系统消息读数? (稍后发布)》 《IM开发快速入门(八):如何理解并实现IM系统的多端消息漫游? ...▶ 1)联系人列表: 这个很好理解,使用IM系统的第一步,就是要解决“跟谁聊”的问题。功能表象上来说,联系人列表也就是社交关系列表,无非就是个信息列表界面,有什么特殊的地方?...》 《现代IM系统聊天消息的同步和存储方案探讨》 《社交软件红包技术解密(六):微信红包系统的存储层架构演进实践》 ▶ 6)消息读数: 消息读数?...看起来也就是那个所有IM应用都有的小红点嘛。是的,看起来也好简单! 然而,消息读数功能的实现也一样不简单: 1)读数是客户端实现还是服务端实现? 2)会话和总怎么保持一致?...3)多终端情况下,怎么保证读数的一致性(我在这台设备上,那台设备怎么知道的?)? 是的,看起来就这么简简单单的3件事,但深入思考一下,还真的简单不起来。

    2.5K12

    【适老化专题】微信、支付宝、百度大字版、百度关怀版适老化实测体验

    软件绿色联盟策划了应用适老化实测体验专题,模拟老年人使用场景、操作习惯,使用主观感受出发,对多款头部应用的适老化改造成果进行上手体验并输出体验报告,旨在帮助App更好地进行适老化设计和实现。...优点: 1)在关怀模式下,聊天列表、聊天对话框、通讯录、发现、公众号、视频号、朋友圈等主要功能页面,均对老年人的使用习惯进行了适配,字体变大,色彩更强,按钮也更大,使用感受较好。...2)在关怀模式下,有“听文字消息”功能,只需要点击一次文字消息就可以把聊天的文字消息转换为语音播放。 体验过后,发现微信已基本完成字体、图标大小的调整,页面设计较符合老年人使用习惯。...优点: 1)增加了听文章功能:可以小说、新闻、文章、搜索结果。还会根据朗读进度进行颜色标识(语音朗读到哪儿,哪儿就变成蓝色的段落),此功能可帮助老年用户群体更好地获取听觉信息。...但在一级页面展示了四个工具,用户需要点击【更多】才能看到更多工具,可以在一级页面内分多行放置更多的工具,并按照工具的使用频率排序,方便老年用户快速触达常用服务。

    2.5K40

    直播系统聊天技术(七):直播间海量聊天消息的架构设计难点实践

    服务落点的选择逻辑: 1)在聊天室服务聊天室的上行信令是依据聊天室 ID 使用一致性哈希算法来选择节点的; 2)在消息服务:依据用户 ID 使用一致性哈希算法来决定用户具体落在哪个消息服务。...通知拉取的详细流程为: 1)客户端成功加入聊天,将所有成员加入到待通知队列(如已存在则更新通知消息时间); 2)下发线程,轮训获取待通知队列; 3)向队列中用户下发通知拉取。...通过以上机制:压测结果看,在端手机上,直播间聊天每秒 400 条消息时,消息列表仍然表现流畅,没有卡顿。...[4] 现代IM系统聊天消息的同步和存储方案探讨 [5] 关于IM即时通讯群聊消息的乱序问题讨论 [6] IM群聊消息的已回执功能该怎么实现?...[10] 网易云信技术分享:IM的万人群聊技术方案实践总结 [11] 阿里钉钉技术分享:企业级IM王者——钉钉在后端架构上的过人之处 [12] IM群聊消息的已功能在存储空间方面的实现思路探讨

    2.6K30

    1.5k Star国产开源一款基于Vue3+Socket.IO的极简聊天应用,比较完整,略好看

    介绍 自我做的客服聊天以来,让我做一套聊天应用的呼声越来越多,加上那套客服聊天由于没有组件化、UI 设计等问题,也让我一直心有遗憾做的不够完美,于是利用空余时间做了一套相对完整的聊天应用。...HasChat 是一套使用全新技术完成的通讯聊天网页。...预览图 PC端 PC端 移动端 功能一览 登陆、随机获取用户登陆 发送邮箱验证码注册 发送表情+文字组合的富文本内容 发送图片内容,查看大图 enter 发送信息,enter+ctrl 换行输入内容...消息提醒 消息标记 记录历史会话 记录历史聊天内容 切换主题 发送视频 发送语音(移动端具备) 版本说明 前端:暂无版本区别 后端:分为 mysql 版本(分支 main)和 json 版本(分支...master);json 版本主要是为了不懂 mysql 的新手学习; 环境部署 Node.Js >= 15.0.0 Mysql >= 5.7.0 (mysql版本需要,但执行mysql文件需要8.0

    1.2K30

    IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总

    1、引言 IM应用的初学者们,在补全了各种基础技术知识后(如果您仍不具备这些知识,建议马上阅读《新手入门一篇就够:零开发移动端IM》),在动手编码实践时,很多时候纠结的并不是功能该如何实现,而是这个功能该实现成什么样...比如,最常见的纠结有以下这些: 1)离线聊天消息该保存多久? 2)好友请求应该保存多久? 3)短视频消息的视频时长设为多大合适?...4)图片、短视频、语音这些多媒体消息的文件数据保存多久? 5)群管理的逻辑该怎么弄?参考微信?还是参考QQ?(关键是参考资料哪里有?) 6)朋友圈限制最多发几张照片合适?...,只要点击查看,即被视为,服务器会在此期限后清理掉多媒体数据。...8.5 消息回执规则 微信不支持已回执功能。微信认为已状态属于个人隐私,不希望打破这种自由沟通的感觉。

    1.9K20

    消息之点不完的小红点(Node+Websocket)

    当然在这个过程涉及比较复杂的消息的存储,如何推送,获取,同步等问题,下面就是对这个过程进行详细的描述 ? 图上的流程解释 A....存储在Node缓存的房间用户列表(此处信息也可以存在Redis) B. 存储在Redis消息列表 C. 存储在MongoDB消息列表 用户1进入首页。...用户1进入房间,重置用户在房间1的消息,触发更新模块去更新B消息列表。 用户1向向房间B中发送了一条消息。 后端需要去获取房间用户列表,判断用户是否在房间?...是,因为在房间中的用户已经读取了最新消息,不需要进行计数。 否,若用户不在房间中,更新其的消息计数 从缓存获取用户的消息进行分发。 用户2登录我们的项目,离线用户变成了在线用户。...用户2登录时,触发查询模块,去获取其当前在各个房间消息情况。 查询模块去查询Redis消息,若Redis没有数据,会继续向数据库查询,若没有则返回0给用户。

    2.3K30
    领券