You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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,提问作者Даніель Скрибайло-Леськів

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 19:06:04