>백엔드 개발 >파이썬 튜토리얼 >텔레그램 window.open(url, &#_blank&#); iOS에서는 이상하게 작동합니다

텔레그램 window.open(url, &#_blank&#); iOS에서는 이상하게 작동합니다

PHPz
PHPz원래의
2024-09-03 16:02:37434검색

telegram window.open(url,

텔레그램 봇을 만들고 있는데 미니앱의 일부 정보를 채팅으로 전달하는 옵션을 추가하고 싶습니다. 나는 window.open(url, '_blank');를 사용하기로 결정했습니다. iPhone에서 사용해 보기 전까지는 잘 작동했습니다. 전달하는 대신 공유 기능을 얻었습니다(큰 문제입니다. 정확히 메시지를 전달해야 합니다). 이를 처리하는 방법에 대한 몇 가지 아이디어가 있지만 사용자 친화적이지 않습니다. 여기에 제안사항이 있나요?

두 가지 간단한 부분이 있습니다: 1)app.py

from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup, WebAppInfo
from telegram.ext import ApplicationBuilder, CommandHandler, MessageHandler, CallbackContext, filters
from collections import defaultdict
from credentials import BOT_TOKEN, WEBAPP_URL

# Словарь для хранения чатов, куда пользователь переслал сообщение
user_forwarded_chats = defaultdict(set)

# Количество требуемых пересылок
REQUIRED_FORWARDS = 5

async def start(update: Update, context: CallbackContext):
    # Запуск веб-приложения с кнопкой "Поделиться"
    keyboard = [
        [InlineKeyboardButton("Поделиться", web_app=WebAppInfo(WEBAPP_URL))]
    ]
    reply_markup = InlineKeyboardMarkup(keyboard)

    await update.message.reply_text(
        "Перешлите сообщение 5 раз в разные чаты и получите награду.",
        reply_markup=reply_markup
    )

async def track_forwarded_message(update: Update, context: CallbackContext):
    if update.message.forward_from_chat:
        user_id = update.message.from_user.id
        chat_id = update.message.chat.id

        # Проверяем, пересылалось ли уже сообщение в этот чат
        if chat_id not in user_forwarded_chats[user_id]:
            user_forwarded_chats[user_id].add(chat_id)

            await update.message.reply_text(
                f"Сообщение переслано в {len(user_forwarded_chats[user_id])} из {REQUIRED_FORWARDS} уникальных чатов."
            )

            if len(user_forwarded_chats[user_id]) >= REQUIRED_FORWARDS:
                await update.message.reply_text("Молодцы, вы выполнили условия!")
                # Сбрасываем счетчик после подтверждения выполнения задания
                user_forwarded_chats[user_id] = set()
        else:
            await update.message.reply_text(
                "Вы уже пересылали сообщение в этот чат. Перешлите его в другой чат."
            )
    else:
        await update.message.reply_text(
            "Это не пересланное сообщение из чата. Пожалуйста, пересылайте сообщения в разные чаты."
        )

if __name__ == '__main__':
    application = ApplicationBuilder().token(BOT_TOKEN).build()

    application.add_handler(CommandHandler('start', start))
    application.add_handler(MessageHandler(filters.ALL & ~filters.COMMAND, track_forwarded_message))

    print("Бот запущен!")
    application.run_polling()

2)index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Telegram Web App</title>
  <script>
    window.onload = function() {
      console.log("Page Loaded");

      // Создаем кнопку "Share in Telegram"
      const shareButton = document.createElement('button');
      shareButton.textContent = "Share in Telegram";
      shareButton.style.fontSize = "16px";
      shareButton.style.padding = "10px 20px";
      shareButton.style.cursor = "pointer";

      // Обработчик клика по кнопке
      shareButton.onclick = function() {
        console.log("Share Button Clicked");

        // Открываем окно "Поделиться постом" в Telegram
        const postUrl = "https://t.me/dvachannel/143325";
        const telegramShareUrl = `https://t.me/share/url?url=${encodeURIComponent(postUrl)}`;
        window.open(telegramShareUrl, '_blank');
      };

      // Добавляем кнопку на страницу
      document.body.appendChild(shareButton);
    };
  </script>
</head>
<body>
  <h1>Hello, Telegram!</h1>
</body>
</html>

간단한 링크 https://t.me/dvachannel/143325를 사용하여 전달하고 있는데 노트북과 안드로이드에서는 잘 작동하지만 iPhone에서는 작동하지 않습니다.

위 내용은 텔레그램 window.open(url, &#_blank&#); iOS에서는 이상하게 작동합니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.