首页
学习
活动
专区
工具
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。

61110

如何使用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

7.1K30
  • 如何使用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.9K50

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

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

    35320

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

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

    3.2K53

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

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

    1.1K10

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

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

    3.4K01

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

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

    8.1K171

    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去获取未读消息和当前消息的位置差来做。...当有群聊成员退出群聊的时候,那就需要删除消息和成员未读消息的映射关系。当有新成员加入的时候,那就需要新增消息与成员未读消息的映射关系。

    22530

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

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

    4.6K40

    百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现

    主要优化点如下:1)客户端登录后减少非必须请求,总未读数获取由从服务端获取,改为先使用客户端本地计算,同步数据后再更新;2)客户端每次同步会话时,将所有新会话放入同步队列中,防止每个会话开一个线程,增加客户端线程池饱和风险...9.2挑战一:如何实现同一账号在线设备操作后,其他离线设备在线时用户数据一致性问题概述:如果同一用户有多台手机,用户部分设备处于离线状态(设备断网或未打开APP),如果用户使用在线状态的手机执行了已读会话...用户使用一台设备A已读了和用户小明的聊天信息,设备A中和用户小明的聊天会话中未读数变为0;打开设备B,使其处于在线状态,设备B和用户小明的会话仍显示有5条未读数。...以设备在线后消息已读指令消息为例,相关执行流程如下:9.3挑战二:如何实现同一账号多台在线设备数据一致性问题概述:IM系统中,数据一致性是指在多设备环境中,用户如果有多台设备或终端,各个设备登录同一账号...,各个设备下显示的用户消息数量、消息未读状态、会话未读数、会话最近一条消息等要保持一致。

    1900

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

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

    2.4K20

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

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

    2.7K12

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

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

    2.6K40

    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.3K30

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

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

    2.8K30

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

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

    2.3K30
    领券