python-3.x Telethon获取当前聊天

sf6xfgos  于 2023-03-20  发布在  Python
关注(0)|答案(1)|浏览(158)

我想获取当前聊天并观察当前时间以后的聊天
打印组中当前正在发送的所有消息并打印全部
但仅打印当前日期或时间

from telethon.sync import TelegramClient
import datetime
import pandas as pd
from openpyxl.workbook import Workbook

# import configparser
# config = configparser.ConfigParser()
# config.read("telethon.config")

api_id = 12345678
api_hash = 'b4272661f3crandom'

chats = ['crypto_king']

client =  TelegramClient('none', api_id, api_hash)

df = pd.DataFrame()
#time 20 sec ago

df = pd.DataFrame()

for chat in chats:
    with TelegramClient('test', api_id, api_hash) as client:
        time_ago = datetime.datetime.now() - datetime.timedelta(seconds=1)
        print(time_ago)

        for message in client.iter_messages(chat,offset_date=time_ago,reverse=True):
            print(message)
            data = { "group" : chat, "sender" : message.sender_id, "text" : message.text, "date" : message.date}
            print(message.text)
            # temp_df = pd.DataFrame(data, index=[1])
            # df = df.append(temp_df)

# df['date'] = df['date'].dt.tz_localize(None)
# 
# df.to_excel("E:\\crypto\\data_{}.xlsx".format(datetime.date.today()), index=False)
xxhby3vn

xxhby3vn1#

试试这个:

with TelegramClient('test', api_id, api_hash) as client:
time_ago = datetime.datetime.now()
while True:
    for chat in chats:
        for message in client.iter_messages(chat, offset_date=time_ago, reverse=True):
            print(f"Sender: {message.sender_id} | Message: {message.text} | Date: {message.date}")
            time_ago = message.date

在这个更新的代码中,time_ago变量在代码开始时被初始化为当前日期和时间。外部while循环无限期运行,每10秒检查一次新消息(可以根据需要调整这个间隔)。
对于chats列表中的每个聊天,内部for循环从time_ago开始以相反的顺序迭代所有消息,对于处理的每个消息,time_ago更新为该消息的日期和时间,确保循环只检索代码开始运行后发送的消息。

相关问题