如何使用Telegram Bot删除所有聊天记录

时间:2020-08-24 14:46:35

标签: python python-3.x telegram telegram-bot python-telegram-bot

是否可以删除与bot聊天的所有聊天记录(消息)。

因此控制台版本如下:

import os
os.sys("clear") - if Linux
os.sys("cls") - if Windows

我只想使用bot删除聊天中的所有消息。

def deleteChat(message):
    #delete chat code

1 个答案:

答案 0 :(得分:3)

首先,如果要使用漫游器删除历史记录,则应保存消息ID。 否则,您可以使用userbot(使用用户帐户)来清除历史记录。 您可以遍历所有聊天消息并获取其ID,然后一次将其删除100个。

警告:由于电报的限制,bot和BotAPI无法重复聊天的消息历史记录。因此,您应该使用MTProto API框架,并使用前面所述的用户帐户。

首先,需要pyrogram库来执行此操作(也可以使用telethon),并实例化一个Client,然后可以使用 with 关键字。然后通过迭代聊天获取所有消息ID,并将其保存在列表中。最后,使用 delete_messages 客户端方法删除它们:

from pyrogram import Client, Filters
# Filters are optional, but it's better
# to use them if you use handlers

app = Client(
    "filename", # Will create a file named filename.session which will contain userbot "cache"
    # You could also change "filename" to ":memory:" for better performance as it will write userbot session in ram
    api_id=0, # You can get api_hash and api_id by creating an app on
    api_hash="", # my.telegram.org/apps (needed if you use MTProto instead of BotAPI)
)

# This is a pyrogram handler, when the userbot receive a "/delall" command
# from a group, the function below will execute.
@app.on_message(Filters.group & Filters.command("delall"))
def func(app, message):
    ids = [msg.message_id for msg in app.iter_history(message.chat.id)]
    chunk_size = 100

    # Splitting the list in chunks of 100 messages ids
    ids = [ids[i:i + chunk] for i in range(0, len(ids), chunk)]

    for m_ids in ids:
        try:
            app.delete_messages(
                message.chat.id,
                m_ids
            )
        except Exception as e:
            app.send_message(
                message.chat.id,
                f"An error occurred: {e}"
            )
            break # Excepts errors given by Telegram, like floodwaits

if __name__ == "__main__":
    app.start()

启动用户程序后,将其添加到组中,然后发送“ / delall”。如果userbot具有删除消息的权限,它将开始删除所有消息。

有关热像图文档,请参见https://docs.pyrogram.org


(但是,请勿在终端中打印所有消息,以避免VPS超载)

用于清除控制台的正确代码是这样的:

import os

def clear():
    os.system('cls' if os.name=='nt' else 'clear')

How to clear the interpreter console?所示。

P.S。 您可以使用相同的代码,在客户端中添加bot_token =“”参数,并删除iter_history部分,以便在具有消息ID的情况下使用bot删除消息。

如果将来您希望从某个组接收消息并打印它们,但又没有收到消息更新,请在该组中将bot作为admin添加或禁用bot 隐私模式BotFather中。

要获得更好的热成像性能,您应该安装 tgcrypto 库,并使用async version(将来,热成像默认情况下将是异步的。此代码适用于0.18.x版本)。

这是删除聊天记录的许多方法之一,我写这个是为了保持简单。

相关问题