add url-button
This commit is contained in:
parent
a30b25e9f5
commit
082d67d651
20
README.md
20
README.md
@ -134,6 +134,11 @@ bot = Bot(token=config.bot_token.get_secret_value())
|
|||||||
В распоряжении у разработчика имеется три способа разметки текста: HTML, Markdown и MarkdownV2.
|
В распоряжении у разработчика имеется три способа разметки текста: HTML, Markdown и MarkdownV2.
|
||||||
Наиболее продвинутыми из них считаются HTML и MarkdownV2
|
Наиболее продвинутыми из них считаются HTML и MarkdownV2
|
||||||
|
|
||||||
|
> Часто требуется получить id user-а (user_id), получить его можно так:
|
||||||
|
```py
|
||||||
|
user_id = message.from_user.id
|
||||||
|
```
|
||||||
|
|
||||||
#### Форматированный вывод
|
#### Форматированный вывод
|
||||||
За выбор форматирования при отправке сообщений отвечает аргумент ``parse_mode``, например:
|
За выбор форматирования при отправке сообщений отвечает аргумент ``parse_mode``, например:
|
||||||
|
|
||||||
@ -538,3 +543,18 @@ async def on_user_shared(message: types.Message):
|
|||||||
f"User ID: {message.chat_shared.chat_id}"
|
f"User ID: {message.chat_shared.chat_id}"
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Инлайн-кнопки
|
||||||
|
|
||||||
|
В отличие от обычных кнопок, инлайновые цепляются не к низу экрана, а к сообщению, с которым были отправлены. В этой главе мы рассмотрим два типа таких кнопок: **URL** и **Callback**.
|
||||||
|
|
||||||
|
#### URL-кнопки
|
||||||
|
|
||||||
|
Самые простые инлайн-кнопки относятся к типу URL, т.е. «ссылка». Поддерживаются только протоколы **HTTP(S)** и **tg://**
|
||||||
|
|
||||||
|
При попытке создать URL-кнопку с ID юзера, у которого отключен переход по форварду, бот получит ошибку **Bad Request: BUTTON_USER_PRIVACY_RESTRICTED**. Соответственно, прежде чем показывать такую кнопку, необходимо выяснить состояние упомянутой настройки. Для этого можно вызвать метод **getChat** и в ответе проверить состояние поля **has_private_forwards**. Если оно равно **True**, значит, попытка добавить **URL-ID** кнопку приведёт к ошибке.
|
||||||
|
|
||||||
|
#### Callback-кнопки
|
||||||
|
|
||||||
|
У колбэк-кнопок есть специальное значение **(data)**, по которому ваше приложение опознаёт, что нажато и что надо сделать. И выбор правильного data очень важен! Стоит также отметить, что, в отличие от обычных кнопок, нажатие на колбэк-кнопку позволяет сделать практически что угодно, от заказа пиццы до запуска вычислений на кластере суперкомпьютеров.
|
||||||
|
|
||||||
|
34
bot.py
34
bot.py
@ -322,7 +322,7 @@ async def cmd_special_buttons(message: types.Message):
|
|||||||
text="Выбрать премиум пользователя",
|
text="Выбрать премиум пользователя",
|
||||||
request_user=types.KeyboardButtonRequestUser(
|
request_user=types.KeyboardButtonRequestUser(
|
||||||
request_id=1,
|
request_id=1,
|
||||||
user_is_premium=True
|
user_is_premium=False
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
types.KeyboardButton(
|
types.KeyboardButton(
|
||||||
@ -357,8 +357,10 @@ async def handle_contact(message: types.Message):
|
|||||||
async def on_user_shared(message: types.Message):
|
async def on_user_shared(message: types.Message):
|
||||||
await message.answer(
|
await message.answer(
|
||||||
f"Request {message.user_shared.request_id}. "
|
f"Request {message.user_shared.request_id}. "
|
||||||
|
|
||||||
f"User ID: {message.user_shared.user_id}"
|
f"User ID: {message.user_shared.user_id}"
|
||||||
)
|
)
|
||||||
|
abc_id = message.user_shared.request_id
|
||||||
|
|
||||||
|
|
||||||
@dp.message(F.chat_shared)
|
@dp.message(F.chat_shared)
|
||||||
@ -368,6 +370,36 @@ async def on_user_shared(message: types.Message):
|
|||||||
f"Chat ID: {message.chat_shared.chat_id}"
|
f"Chat ID: {message.chat_shared.chat_id}"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# новый импорт
|
||||||
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||||
|
|
||||||
|
@dp.message(Command("inline_url"))
|
||||||
|
async def cmd_inline_url(message: types.Message, bot: Bot):
|
||||||
|
builder = InlineKeyboardBuilder()
|
||||||
|
builder.row(types.InlineKeyboardButton(
|
||||||
|
text="GitHub", url="https://github.com")
|
||||||
|
)
|
||||||
|
builder.row(types.InlineKeyboardButton(
|
||||||
|
text="Оф. канал Telegram",
|
||||||
|
url="tg://resolve?domain=telegram")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Чтобы иметь возможность показать ID-кнопку,
|
||||||
|
# У юзера должен быть False флаг has_private_forwards
|
||||||
|
user_id = message.from_user.id
|
||||||
|
chat_info = await bot.get_chat(user_id)
|
||||||
|
if not chat_info.has_private_forwards:
|
||||||
|
builder.row(types.InlineKeyboardButton(
|
||||||
|
text="Какой-то пользователь",
|
||||||
|
url=f"tg://user?id={user_id}")
|
||||||
|
)
|
||||||
|
|
||||||
|
await message.answer(
|
||||||
|
'Выберите ссылку',
|
||||||
|
reply_markup=builder.as_markup(),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@dp.message(Command("vfy"))
|
@dp.message(Command("vfy"))
|
||||||
@dp.message(CommandStart(
|
@dp.message(CommandStart(
|
||||||
deep_link=True, magic=F.args == "vfy"
|
deep_link=True, magic=F.args == "vfy"
|
||||||
|
29
bot2.py
29
bot2.py
@ -126,6 +126,35 @@ async def handle_contact(message: types.Message):
|
|||||||
else:
|
else:
|
||||||
await message.answer("Это не ваш контакт!")
|
await message.answer("Это не ваш контакт!")
|
||||||
|
|
||||||
|
# новый импорт
|
||||||
|
from aiogram.utils.keyboard import InlineKeyboardBuilder
|
||||||
|
|
||||||
|
@dp.message(Command("inline_url"))
|
||||||
|
async def cmd_inline_url(message: types.Message, bot: Bot):
|
||||||
|
builder = InlineKeyboardBuilder()
|
||||||
|
builder.row(types.InlineKeyboardButton(
|
||||||
|
text="GitHub", url="https://github.com")
|
||||||
|
)
|
||||||
|
builder.row(types.InlineKeyboardButton(
|
||||||
|
text="Оф. канал Telegram",
|
||||||
|
url="tg://resolve?domain=telegram")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Чтобы иметь возможность показать ID-кнопку,
|
||||||
|
# У юзера должен быть False флаг has_private_forwards
|
||||||
|
user_id = message.from_user.id
|
||||||
|
chat_info = await bot.get_chat(user_id)
|
||||||
|
if not chat_info.has_private_forwards:
|
||||||
|
builder.row(types.InlineKeyboardButton(
|
||||||
|
text="Какой-то пользователь",
|
||||||
|
url=f"tg://user?id={user_id}")
|
||||||
|
)
|
||||||
|
|
||||||
|
await message.answer(
|
||||||
|
'Выберите ссылку',
|
||||||
|
reply_markup=builder.as_markup(),
|
||||||
|
)
|
||||||
|
|
||||||
# Запуск процесса поллинга новых апдейтов
|
# Запуск процесса поллинга новых апдейтов
|
||||||
async def main():
|
async def main():
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user