使用Telethon时删除机器人仍收垃圾,如何实现block the bot
Telethon 实现屏蔽Telegram机器人的方法
问题本质说明
client.delete_dialog()仅执行删除本地对话会话入口的操作,等价于官方客户端左滑删除聊天记录的逻辑,不会阻止对应会话主体后续向你推送消息,这也是删除机器人对话后仍能持续收到垃圾消息的核心原因。
具体实现步骤
1. 获取目标Bot的实体对象
调用屏蔽接口前,需要先获取对应Bot的合法实体,可根据自己持有的信息选择对应获取方式:
- 已知Bot的用户名(例如
@my_spam_bot),通过用户名获取实体:
bot_entity = await client.get_entity('my_spam_bot')
- 已知Bot的数字ID,通过ID获取实体:
bot_entity = await client.get_entity(1234567890)
- 若已持有对应Bot的对话对象,可直接从对话中提取实体:
# 遍历会话列表匹配目标Bot的场景 async for dialog in client.iter_dialogs(): if dialog.entity.username == 'my_spam_bot': bot_entity = dialog.entity break
2. 执行屏蔽操作
根据你使用的Telethon版本选择对应实现方式:
- 若使用Telethon v1.24及以上版本,可直接调用内置封装方法:
await client.block(bot_entity)
- 若使用更早期的Telethon版本,需要手动调用原始API实现:
首先导入对应请求类:
from telethon.tl.functions.contacts import BlockRequest
再执行屏蔽请求:
await client(BlockRequest(id=bot_entity))
操作效果
执行屏蔽操作后,效果和官方客户端点击「Block the Bot」完全一致:
- 后续该Bot发送的所有消息不会向你推送,也不会重新出现在你的会话列表中
- 你主动向该Bot发送消息时会触发屏蔽状态提示,和官方端行为完全匹配
补充操作
如果后续需要解除对Bot的屏蔽,调用对应方法即可:
# 高版本直接调用内置方法 await client.unblock(bot_entity) # 低版本调用原始API from telethon.tl.functions.contacts import UnblockRequest await client(UnblockRequest(id=bot_entity))
内容的提问来源于stack exchange,提问作者Даніель Скрибайло-Леськів
相关产品推荐
相关产品推荐

