Создание ссылки на чат, с помощью aiogram
Вопрос следующий: как можно с помощью aiogram сгенерировать пригласительную ссылку для чата? Пробовал множество источников, и не один из них не заработал.
Вот что нашёл в исходниках aiogram:
from __future__ import annotations
from typing import TYPE_CHECKING, Any, Dict, Optional, Union
from ..types import ChatInviteLink
from .base import Request, TelegramMethod
if TYPE_CHECKING:
from ..client.bot import Bot
class CreateChatInviteLink(TelegramMethod[ChatInviteLink]):
"""
Use this method to create an additional invite link for a chat. The bot must be an administrator in the chat for this to work and must have the appropriate admin rights. The link can be revoked using the method :class:`aiogram.methods.revoke_chat_invite_link.RevokeChatInviteLink`. Returns the new invite link as :class:`aiogram.types.chat_invite_link.ChatInviteLink` object.
Source: https://core.telegram.org/bots/api#createchatinvitelink
"""
__returning__ = ChatInviteLink
chat_id: Union[int, str]
"""Unique identifier for the target chat or username of the target channel (in the format :code:`@channelusername`)"""
expire_date: Optional[int] = None
"""Point in time (Unix timestamp) when the link will expire"""
member_limit: Optional[int] = None
"""Maximum number of users that can be members of the chat simultaneously after joining the chat via this invite link; 1-99999"""
def build_request(self, bot: Bot) -> Request:
data: Dict[str, Any] = self.dict()
return Request(method="createChatInviteLink", data=data)
И второй код
class aiogram.methods.create_chat_invite_link.CreateChatInviteLink(*, chat_id: Union[int, str], expire_date: int = None, member_limit: int = None, **extra_data: Any)
Объясните и поясните. Насчёт задачи, бот должен создавать однодневную ссылку, и отправлять её пользователю по кнопочки. И проблема состоит именно в первом контексте т.е ОН НЕ СОЗДАЁТ СЫЛЛКУ
Ответы (2 шт):
Куда-то Вы не туда забрели, стоило бы начать с документации Telegram. А в aiogram у объекта Chat есть метод create_invite_link. Или можете использовать напрямую из объекта бота. Поскольку в вопросе нет кода Вашего, приведу пример для обычного хэндлера:
from datetime import datetime, timedelta
from aiogram.types import Message
@dp.message_handler(commands=['test'])
async def cmd_test(message: Message):
chat_id = 1234567890
expire_date = datetime.now() + timedelta(days=1)
link = await bot.create_chat_invite_link(chat_id, expire_date.timestamp, 1)
print(link.invite_link) # https://t.me/.....
Тут создаётся ссылка, по которой может перейти один пользователь, со сроком действия 1 день
В переменной link находится объект ChatInviteLink, делайте с ним что хотите.
Попробуйте вот так:
@dp.message_handler()
async def bot_message(message: types.Message):
if message.chat.type == 'private':
if message.text == '?ПРОФИЛЬ':
user_nickname = "Ваш ник: " + db.get_nickname(message.from_user.id)
user_sub = time_sub_day(db.get_time_sub(message.from_user.id))
if user_sub == False:
user_sub = "Нет"
user_sub = "\nПодписка: " + user_sub
await bot.send_message(message.from_user.id, user_nickname + user_sub)
elif message.text == '?ПОДПИСКА':
await bot.send_message(message.from_user.id, "Выберите на какой срок вы хотите взять подписку", reply_markup=nav.sub_inline_markup)
elif message.text == '?СЫЛЛКА НА ПРИВАТНЫЙ КАНАЛ':
if db.get_sub_status(message.from_user.id):
chat_id = "123456789"
expire_date = datetime.now() + timedelta(days=1)
link = await bot.create_chat_invite_link(chat_id, expire_date, 1)
print(link.invite_link)
await bot.send_message(message.from_user.id, "Ссылка на канал: ")
else:
await bot.send_message(message.from_user.id, "Купи подписку")