Как создать бота, который будет удалять текст и оставлять только ссылки?

Как можно реализовать функциональность в телеграм-боте, при которой пользователь пересылает текст с ссылкой или вставляет текст в чат с ботом, и бот автоматически удаляет весь текст, оставляя только одну ссылку на ресурс?  
<br/>  
Например, если пользователь отправляет следующее сообщение:  
<br/> --------------------------------  
Много текста  
<br/>  
Текст текст  
<br/>  
ссылка:  
<br/> <a href="https://qna.habr.com/" rel="nofollow">https://qna.habr.com/</a>  
<br/> -----------------------------------  
Бот должен вернуть только чистую ссылку, возможно, с превью:  
<br/>  
<a href="https://qna.habr.com/" rel="nofollow">https://qna.habr.com/</a>
  • 28 января 2025 г. 9:04
Ответы на вопрос 1
Чтобы создать Telegram-бота, который будет удалять текст и оставлять только ссылки, вам потребуется использовалось API Telegram, а также язык программирования, поддерживающий работу с HTTP-запросами. Наиболее популярным выбором является Python с библиотекой `python-telegram-bot`.

Вот пример того, как может выглядеть реализация такого бота:

1. **Установка необходимых библиотек**:
   Для начала, вам нужно установить библиотеку `python-telegram-bot`, а также `re` для работы с регулярными выражениями.

   ```bash
   pip install python-telegram-bot
   ```

2. **Код бота**:

   Ниже представлен пример кода для бота, который будет извлекать ссылки и отправлять их обратно пользователю.

   ```python
   import logging
   from telegram import Update, InputTextMessageContent
   from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext
   import re

   # Включаем логирование
   logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
   logger = logging.getLogger(__name__)

   # Функция для удаления текста и оставления только ссылки
   def extract_link(text):
       # Регулярное выражение для поиска ссылок
       url_pattern = r'(https?://\S+)'
       matches = re.findall(url_pattern, text)
       return matches[0] if matches else None

   # Функция-обработчик сообщений
   def handle_message(update: Update, context: CallbackContext):
       text = update.message.text
       link = extract_link(text)
       if link:
           update.message.reply_text(link)
       else:
           update.message.reply_text("Ссылок не найдено.")

   # Функция для обработки ошибок
   def error(update: Update, context: CallbackContext):
       logger.warning(f'Update {update} caused error {context.error}')

   def main():
       # Вставьте свой токен Telegram-бота
       TOKEN = 'YOUR_TOKEN'

       # Создаем Updater и получаем диспетчер
       updater = Updater(TOKEN, use_context=True)
       dp = updater.dispatcher

       # Обработчик текста
       dp.add_handler(MessageHandler(Filters.text & ~Filters.command, handle_message))

       # Логируем все ошибки
       dp.add_error_handler(error)

       # Запускаем бота
       updater.start_polling()
       updater.idle()

   if __name__ == '__main__':
       main()
   ```

3. **Запуск бота**:
   Сохраните код в файл, например `telegram_link_bot.py`, и замените `'YOUR_TOKEN'` на токен вашего бота, полученный от BotFather в Telegram. Затем запустите бот:

   ```bash
   python telegram_link_bot.py
   ```

4. **Отправка сообщений**:
   Теперь пользователь сможет отправить текст с ссылкой в чат с ботом, и бот ответит только чистой ссылкой, если она будет найдена.

Этот код содержит простую реализацию без дополнительных улучшений, таких как обработка ошибок или параллельные запросы. Вы можете расширять функциональность бота, добавляя новые возможности по мере необходимости.
Похожие вопросы