0

0

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

心靈之曲

心靈之曲

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

|

220人浏览过

|

来源于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删除一条或多条消息。这是移除消息中图片的有效手段,因为它会彻底移除包含图片的原消息。

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

ImgGood
ImgGood

免费在线AI照片编辑器

下载

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

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

761

2023.08.03

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

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

221

2023.09.04

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

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

1570

2023.10.24

字符串介绍
字符串介绍

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

651

2023.11.24

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

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

1229

2024.03.22

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

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

1205

2024.04.29

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

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

193

2025.07.29

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

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

131

2025.08.07

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 5万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号