Создание ссылки на чат, с помощью 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 шт):

Автор решения: MyZik

Куда-то Вы не туда забрели, стоило бы начать с документации 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, делайте с ним что хотите.

→ Ссылка
Автор решения: Belenov4

Попробуйте вот так:

@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, "Купи подписку")
→ Ссылка