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

TeleBot开发:如何删除Telegram消息中的@ID及超链接文本?

解决方案

注意:Telegram 嵌入超链接的文本无法仅通过正则匹配纯文本实现删除,这类富文本格式信息存储在消息的entities字段中,需要先基于实体定位要删除的文本区间,再配合正则完成清洗。

完整修改后代码

bot.on("text", async function (msg){
  let text = msg.text;
  // 第一步:处理富文本实体,删除嵌入超链接和@ID实体对应的文本
  if (msg.entities && msg.entities.length > 0) {
    // 筛选要删除的实体:mention是@ID实体,text_link是自定义嵌入超链接
    const toRemoveEntities = msg.entities.filter(entity => 
      ['mention', 'text_link'].includes(entity.type)
    );
    // 按偏移量从大到小排序,避免删除前面内容后偏移量错位
    toRemoveEntities.sort((a, b) => b.offset - a.offset);
    // 逐个删除对应区间的文本
    toRemoveEntities.forEach(entity => {
      text = text.slice(0, entity.offset) + text.slice(entity.offset + entity.length);
    });
  }

  // 第二步:正则清洗剩余内容,删除明文链接和漏网的@ID
  text = text.replace(
    /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/g,
    ""
  ).replace(/@[a-zA-Z0-9_]{5,32}\b/g, "") // 新增:删除@开头的ID
  .replace(/\s{2,}/g, " ") // 可选:合并多余空格
  .trim(); // 可选:去除首尾空格

  console.log(text);
})

bot.start();

改动说明

  • 新增富文本实体处理逻辑:优先删除mention类型的@ID实体、text_link类型的嵌入超链接实体对应的文本,解决自定义超链接无法用正则匹配的问题
  • 新增@ID正则匹配规则:对纯文本中没有对应实体的@ID内容做二次清洗,保证所有@格式的ID都被删除
  • 保留原有明文链接删除逻辑,新增可选的多余空格处理,优化清洗后文本的格式

内容的提问来源于stack exchange,提问作者calisa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:03