как сделать кнопку ссылку
import logging
from aiogram import Bot, Dispatcher, executor, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher
from aiogram.dispatcher.webhook import SendMessage
from aiogram.utils.executor import start_webhook
import aiogram.utils.markdown as fmt
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from aiogram.dispatcher import FSMContext
from aiogram.dispatcher.filters.state import State, StatesGroup
# Django
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
application = get_wsgi_application()
from bot.models import Settings, Qiwi, User, Purchase, Reviews, PaymentRequest, PaymentRequestAdmin, Mailing, Comment, Reply, Message
import random
from db import *
from pytils import numeral
from datetime import datetime, timedelta, time
import requests
import json
import re
from aiogram.types.web_app_info import WebAppInfo
from aiogram.types import ReplyKeyboardRemove, \
ReplyKeyboardMarkup, KeyboardButton, \
InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils.callback_data import CallbackData
cb = CallbackData("bot", "id", "action")
logging.basicConfig(level=logging.INFO)
tgbot = Settings.objects.get(id = '1')
print(tgbot.tg_token)
message = KeyboardButton('Написать')
buy = KeyboardButton('Купить')
last = KeyboardButton('Купил')
views = KeyboardButton('Отзвыв')
lk = KeyboardButton('Баланс')
support = KeyboardButton('✅Наши контакты')
send_message = KeyboardButton('ПРОФИЛЬ')
btnProfile = KeyboardButton('ПРОФИЛЬ')
profileKeyboard = ReplyKeyboardMarkup(resize_keyboard = True).add(btnProfile)
greet_kb = ReplyKeyboardMarkup(resize_keyboard=True)
greet_kb.add(lk, message)
greet_kb.add(buy, last, views)
greet_kb.add(send_message, support)
NOTSUB_MESSAGE = "Чтобы бот работал\n\n ??Подпишись??\n ??на наши ??\n ??каналы ??\n "
CHANNELS = [
["? подписаться! ?", "-10017", ""],
["? подписаться! ?", "-100176", ""],
["? подписаться! ?", "-100176770", ""],
]
def get_bot():
bot = Bot(parse_mode='HTML',token=tgbot.tg_token)
return bot
bot = Bot(parse_mode='HTML',token=tgbot.tg_token)
dp = Dispatcher(bot, storage=MemoryStorage())
dp.middleware.setup(LoggingMiddleware())
def showChannels():
keyboard = InlineKeyboardMarkup(row_width=1)
for channel in CHANNELS:
btn = InlineKeyboardButton(text=channel[0], url=channel[2])
keyboard.insert(btn)
btnDoneSubb = InlineKeyboardButton(text="Чат", callback_data="Канал")
btnDoneSub = InlineKeyboardButton(text="Я ПОДПИСАЛСЯ НА КАНАЛ!", callback_data="subchanneldone")
keyboard.insert(btnDoneSub)
return keyboard
async def check_sub_channels(_channels, user_id):
for channel in _channels:
chat_member = await bot.get_chat_member(chat_id=channel[1], user_id=user_id)
print(chat_member['status'])
if chat_member['status'] == 'left':
return False
return True
async def anti_flood(*args, **kwargs):
m = args[0]
#тут будет то, что нужно при флуде.
await m.answer("Не флуди :)")
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
bot = get_bot()
if message.chat.type == 'private':
if await check_sub_channels(CHANNELS, message.from_user.id):
bot = Settings.objects.get(id = '1')
user, created = User.objects.get_or_create(tg_user_id=message.from_user.id)
if created:
user.tg_user_first_name=message.from_user.first_name
user.tg_user_last_name=message.from_user.last_name
user.tg_user_username=message.from_user.username
user.tg_user_language_code=message.from_user.language_code
user.save()
else:
pass
if bot.logo:
await message.answer_photo(bot.logo, bot.welcome, reply_markup=greet_kb, parse_mode='HTML')
else:
await message.answer(bot.welcome, reply_markup=greet_kb, parse_mode='HTML')
# if photo:
# photo=open(f'uploads/logo.jpg', 'rb')
# await message.answer_photo(photo, bot.welcome, reply_markup=greet_kb, parse_mode='HTML')
else:
#await bot.send_message(message.from_user.id, NOTSUB_MESSAGE from_user.id, reply_markup=showChannels())
await bot.send_message(message.from_user.id, NOTSUB_MESSAGE, disable_web_page_preview=True, reply_markup=showChannels())
@dp.callback_query_handler(text="subchanneldone")
async def subchanneldone(message: types.Message):
bot = get_bot()
await bot.delete_message(message.from_user.id, message.message.message_id)
if await check_sub_channels(CHANNELS, message.from_user.id):
bot = Settings.objects.get(id = '1')
user, created = User.objects.get_or_create(tg_user_id=message.from_user.id)
if created:
user.tg_user_first_name=message.from_user.first_name
user.tg_user_last_name=message.from_user.last_name
user.tg_user_username=message.from_user.username
user.tg_user_language_code=message.from_user.language_code
user.save()
else:
pass
if bot.logo:
await message.message.answer_photo(bot.logo, bot.welcome, reply_markup=greet_kb, parse_mode='HTML')
else:
await message.message.answer(bot.welcome, reply_markup=greet_kb, parse_mode='HTML')
await message.answer_photo(photo, bot.welcome, reply_markup=greet_kb, parse_mode='HTML')
else:
await bot.send_message(message.from_user.id, NOTSUB_MESSAGE, disable_web_page_preview=True, reply_markup=showChannels())
import json
import requests
# токен от бота
token = ''
# массив для клавиатуры
keyboard = {
'inline_keyboard': [
[
{
'text': 'Кнопка 1',
'callback_data': frwfg'
}
],
[
{
'text': 'Кнопка 2',
'callback_data': 'gffgf'
},
{
'text': 'Кнопка 3',
'callback_data': 'fdgdrg'
}
]
]
}
# параметры для запроса
payload = {
'chat_id': id,
'caption': 'какой котик!',
'photo': 'фото',
'reply_markup': json.dumps(keyboard)
}
# отправка запроса в Telegram
res = requests.post('https://api.telegram.org/bot' + token + '/sendPhoto', data=payload)
как сделать кнопку на сайт