是否可以删除与bot聊天的所有聊天记录(消息)。
因此控制台版本如下:
import os
os.sys("clear") - if Linux
os.sys("cls") - if Windows
我只想使用bot删除聊天中的所有消息。
def deleteChat(message):
#delete chat code
答案 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版本)。
这是删除聊天记录的许多方法之一,我写这个是为了保持简单。