I'm making a telegram bot and I want to add option of forwarding some info from miniapp to a chat. I decided to use window.open(url, '_blank');
and it worked fine until I tried it on my iPhone. Instead of forwarding I got Share (it's a big deal, I need exactly to forward a message). I have some ideas how to deal with it, but they are not user friendly. Do you have any suggestions here?
I have two simple parts: 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>
I'm using a simple link https://t.me/dvachannel/143325 to forward and it works fine on my laptop and android, but not on iPhone.