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

Telegram bot URL识别功能开发:Filters.entity(URL)实现问题求助

可直接运行的修复后代码

你现有代码存在4个核心错误:未定义URL实体类型、重复初始化updater、URL提取逻辑错误、语法缩进错误,修复后完整代码如下:

import logging
from telegram import MessageEntity
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import os
import random

TOKEN = "XXXXX" # 替换为你的bot实际token
PORT = int(os.environ.get('PORT', '8443'))

# 启用日志
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
                   level=logging.INFO)
logger = logging.getLogger(__name__)

def start(update, context):
    update.message.reply_text('Hi!')

def coin(update, context):
    cid=update.message.chat_id
    msg="⚫️ 正面" if random.randint(1,2)==1 else "⚪️ 反面"
    update.message.reply_text(msg)

def help(update, context):
    update.message.reply_text('帮助信息')

def links(update, context):
    # 提取消息中所有URL
    urls = []
    for entity in update.message.entities:
        if entity.type == MessageEntity.URL:
            url = update.message.text[entity.offset:entity.offset + entity.length]
            urls.append(url)
    # 这里替换为你要执行的自定义操作,示例为返回识别到的所有URL
    if urls:
        replay_text = f"识别到URL:\n{chr(10).join(urls)}"
        update.message.reply_text(replay_text)

def error(update, context):
    logger.warning('Update "%s" 触发错误 "%s"', update, context.error)

def main():
    updater = Updater(TOKEN, use_context=True)
    dp = updater.dispatcher

    dp.add_handler(CommandHandler("start", start))
    dp.add_handler(CommandHandler("help", help))
    dp.add_handler(CommandHandler("coin", coin))          
    # 绑定URL实体过滤器到处理函数
    dp.add_handler(MessageHandler(Filters.entity(MessageEntity.URL), links))
    dp.add_error_handler(error)

    # 启动webhook,替换XXXXX为你的服务实际域名
    updater.start_webhook(listen="0.0.0.0",
                          port=PORT,
                          url_path=TOKEN,
                          webhook_url="XXXXX/" + TOKEN)
    updater.idle()

if __name__ == '__main__':
    main()

功能说明

  • 只要用户发送的消息中包含任意URL(包括带http/https前缀、不带前缀的www域名等),都会自动触发links函数
  • 你可以修改links函数内的逻辑,替换为你需要执行的自定义操作,比如URL校验、内容爬取、自动回复等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:51:03