讲师中心 微信公众号
AI工具推荐 视频效率加速

如何使用Telethon从Telegram消息中删除图片

陌丽君_1578

陌丽君_1578

发布时间:2025-11-20 11:39:21

|

280人浏览过

|

来源于php中文网

原创

如何使用telethon从telegram消息中删除图片

本文详细介绍了在Python中使用Telethon库从Telegram消息中删除图片的方法。针对用户尝试使用`event.edit(file=None)`无效的问题,我们明确指出,直接移除消息中图片而保留文本的功能并非通过`event.edit`实现。核心解决方案是利用`client.delete_messages`方法来删除包含图片的原消息,并通过示例代码演示了如何初始化客户端、获取消息、判断媒体类型并执行删除操作,确保用户能有效管理消息中的媒体内容。

Telethon消息中图片删除的专业指南

在使用Telethon库处理Telegram消息时,开发者经常会遇到需要从已发送消息中移除图片的需求。常见的误解是尝试通过event.edit(file=None)来达到这一目的。然而,event.edit方法主要用于修改消息的文本内容或替换媒体文件,而非直接“删除”媒体而保留文本。当消息中包含图片时,若要彻底移除该图片,最直接且有效的方法是删除整条消息。

理解消息编辑与删除的差异

Telethon的event.edit方法允许您修改消息的某些属性,例如文本内容或替换其附加的媒体文件。当您尝试将file参数设置为None时,系统并不会理解为“移除现有文件”,而是可能忽略该参数或导致其他非预期行为。对于包含媒体(如图片)的消息,如果目标是使图片消失,同时不关心消息文本是否也一并删除,那么使用删除消息的API是更为直接和推荐的做法。

核心解决方案:删除包含图片的消息

Telethon库提供了client.delete_messages方法,允许您根据聊天ID和消息ID删除一条或多条消息。这是移除消息中图片的有效手段,因为它会彻底移除包含图片的原消息。

以下是实现此功能的详细步骤和示例代码:

Claw Code Suite (Python-Only Edition)
Claw Code Suite (Python-Only Edition)

仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...

下载

1. 初始化Telethon客户端

首先,您需要使用您的API凭据初始化Telethon客户端。确保您已经从Telegram获取了api_id和api_hash。

from telethon.sync import TelegramClient
from telethon.tl.types import Message

# 替换为您的API凭据和手机号码
api_id = 'YOUR_API_ID'
api_hash = 'YOUR_API_HASH'
phone_number = 'YOUR_PHONE_NUMBER' # 首次运行时用于登录

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

2. 定义删除图片消息的函数

创建一个异步函数,该函数接收聊天ID和消息ID作为参数。在该函数内部,我们将执行以下操作:

  • 通过client.get_messages获取指定的消息对象。
  • 检查消息是否包含媒体(即图片或视频)。
  • 如果包含媒体,则使用client.delete_messages删除该消息。
async def remove_image_from_message(chat_id: int | str, message_id: int):
    """
    从指定聊天中删除包含图片的消息。

    Args:
        chat_id: 聊天ID(可以是整数或用户名字符串)。
        message_id: 要删除的消息的ID。
    """
    try:
        # 获取指定的消息
        message: Message = await client.get_messages(chat_id, ids=message_id)

        if message and message.media:
            # 如果消息存在且包含媒体(图片、视频等),则删除该消息
            await client.delete_messages(chat_id, message_id)
            print(f"消息 (ID: {message_id}) 中的图片已成功移除(消息已删除)。")
        elif message and not message.media:
            print(f"指定消息 (ID: {message_id}) 不包含图片或任何媒体。")
        else:
            print(f"未找到指定消息 (ID: {message_id})。")
    except Exception as e:
        print(f"删除图片消息时发生错误: {e}")

3. 运行主程序

在main函数中启动客户端,调用remove_image_from_message函数,然后断开客户端连接。

async def main():
    await client.start(phone_number)

    # 替换为实际的聊天ID和消息ID
    # chat_id 可以是整数(如群组ID)或字符串(如用户名 '@username')
    target_chat_id = 'YOUR_CHAT_ID' 
    target_message_id = 123  # 替换为包含图片的消息ID

    await remove_image_from_message(target_chat_id, target_message_id)

    await client.disconnect()

if __name__ == '__main__':
    # 运行主异步函数
    client.loop.run_until_complete(main())

完整示例代码

from telethon.sync import TelegramClient
from telethon.tl.types import Message

# --- 配置信息 ---
# 替换为您的API凭据,可在 my.telegram.org 获取
api_id = 'YOUR_API_ID' 
api_hash = 'YOUR_API_HASH'
# 您的手机号码,首次运行时用于登录
phone_number = 'YOUR_PHONE_NUMBER' 

# 替换为实际的聊天ID和消息ID
# chat_id 可以是整数(如群组ID)或字符串(如用户名 '@username')
TARGET_CHAT_ID = 'YOUR_CHAT_ID' 
TARGET_MESSAGE_ID = 123  # 替换为包含图片的消息ID

# 初始化Telethon客户端
# 'session_name' 是会话文件的名称,用于保存登录状态
client = TelegramClient('session_name', api_id, api_hash)

async def remove_image_from_message(chat_id: int | str, message_id: int):
    """
    从指定聊天中删除包含图片的消息。
    如果消息存在且包含媒体,则删除该消息。

    Args:
        chat_id: 聊天ID(可以是整数或用户名字符串)。
        message_id: 要删除的消息的ID。
    """
    try:
        # 获取指定的消息
        # client.get_messages 返回一个消息列表,即使只请求一个ID
        messages = await client.get_messages(chat_id, ids=message_id)
        message: Message = messages[0] if messages else None

        if message:
            if message.media:
                # 如果消息存在且包含媒体(图片、视频等),则删除该消息
                await client.delete_messages(chat_id, message_id)
                print(f"消息 (ID: {message_id}) 中的图片已成功移除(消息已删除)。")
            else:
                print(f"指定消息 (ID: {message_id}) 不包含图片或任何媒体。")
        else:
            print(f"未找到指定消息 (ID: {message_id})。")
    except Exception as e:
        print(f"删除图片消息时发生错误: {e}")

async def main():
    """
    主函数,用于启动客户端并执行删除操作。
    """
    print("正在启动Telethon客户端...")
    await client.start(phone_number)
    print("客户端已启动。")

    await remove_image_from_message(TARGET_CHAT_ID, TARGET_MESSAGE_ID)

    print("正在断开客户端连接...")
    await client.disconnect()
    print("客户端已断开。")

if __name__ == '__main__':
    client.loop.run_until_complete(main())

注意事项

  • API凭据和权限: 确保您的api_id和api_hash是正确的,并且您的Telegram账户拥有删除消息的权限(例如,在群组中您必须是管理员)。
  • 聊天ID和消息ID: 务必替换示例中的YOUR_CHAT_ID和YOUR_MESSAGE_ID为实际的数值。聊天ID可以是整数(对于私人聊天、群组或频道)或字符串(对于用户名,如@username)。消息ID可以通过检查消息的URL或使用Telethon的调试工具获取。
  • 彻底删除: client.delete_messages操作是不可逆的,它会彻底从聊天中移除消息及其所有内容(包括文本和媒体)。
  • 仅移除图片,保留文本: 如果您的需求是“仅移除图片但保留消息文本”,那么直接删除消息的方案可能不适用。在这种情况下,您需要执行一个更复杂的操作:
    1. 获取原始消息的文本内容。
    2. 删除原始消息。
    3. 重新发送一条只包含文本的新消息。 这种方法虽然可行,但会改变消息ID和时间戳。

总结

通过本教程,您应该已经掌握了使用Telethon从Telegram消息中删除图片的核心方法。关键在于理解event.edit与client.delete_messages之间的功能差异,并选择后者来达到彻底移除包含图片消息的目的。在实际应用中,请务必谨慎操作删除功能,并确保您的API凭据和目标ID准确无误。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

1778

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

2764

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

6124

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

5789

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

7434

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

10954

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

5619

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

6127

2025.08.07

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

0

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn