使用Telethon删除他人创建的公开频道评论失败求助
Telegram频道评论删除失败问题解决
问题回顾
使用Telethon删除公开Telegram频道的帖子评论时,代码在自有频道正常工作,但在他人创建的公开频道中无效。机器人已被授予删除消息的管理员权限,执行代码无报错,但评论未被删除。尝试过调整chat_id格式、传入频道实体、使用DeleteMessagesRequest等方法,均未解决。
排查与解决方法
1. 确认管理员权限细节
Telegram频道的删除权限有细分,必须确保机器人被授予删除其他用户消息的权限,而非仅删除自身发送的消息。请频道所有者检查管理员设置:
- 进入频道管理页 → 找到机器人账号 → 确认勾选「删除消息」权限,且该权限无额外限制
2. 验证目标评论的ID正确性
确保传入的message_ids是评论本身的ID,而非原帖子的ID。可以通过以下代码获取帖子下的所有评论,核对目标ID:
# 获取原帖子下的所有评论 comments = await client.get_messages(entity, reply_to=原帖子message_id) for comment in comments: print(f"评论ID: {comment.id}, 内容: {comment.text}")
3. 正确获取频道实体
避免ID格式混淆,直接通过频道用户名获取实体:
# 替换为目标频道的用户名(带@前缀) entity = await client.get_entity('@target_public_channel') await client.delete_messages(entity, message_ids=[目标评论ID])
使用用户名获取实体可规避正负号、ID类型(普通频道/超级频道)的格式问题。
4. 确保异步逻辑正确执行
如果使用异步模式,必须正确使用await关键字并启动事件循环:
import asyncio from telethon import TelegramClient async def delete_target_comment(): client = TelegramClient('session_name', API_ID, API_HASH) await client.start(bot_token='YOUR_BOT_TOKEN') entity = await client.get_entity('@target_public_channel') await client.delete_messages(entity, message_ids=[123456789]) # 替换为实际评论ID await client.disconnect() asyncio.run(delete_target_comment())
同步模式下需确保client.start()已完成初始化。
5. 手动验证机器人权限
用机器人账号登录Telegram客户端,手动尝试删除目标评论。如果手动也无法删除,说明权限配置存在问题,需频道所有者重新授予权限。
6. 更新Telethon到最新版本
旧版本可能存在API兼容性问题,执行升级:
pip install --upgrade telethon
内容的提问来源于stack exchange,提问作者Ekaterina Loginova
相关产品推荐
相关产品推荐

