Как вывести "status": "member" из bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)

Добрый день или вечер гуру по питону. Как вывести "status": "member" из bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id) Сам код:

@dp.message_handler()
async def bot_message(message: types.Message):
test1 = ['creator', 'administrator', 'member']
user_status = bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
if message.text == '?СЫЛЛКА НА ПРИВАТНЫЙ КАНАЛ':
            if db.get_sub_status(message.from_user.id):
                if user_status in test1:
                    await bot.send_message(message.from_user.id, "Вы уже находитесь в канале!")
                else:
                    expire_date = datetime.now() + timedelta(days=1)
                    link = await bot.create_chat_invite_link(chat_id, expire_date, 1)
                    await message.reply(link.invite_link, parse_mode="HTML")
                    user_channel_status = await bot.get_chat_member(chat_id=chat_id, user_id=message.chat.id)
                    print(user_channel_status)
            else:
                await bot.send_message(message.from_user.id, "Купи подписку")

Пытался сделать обычную проверку, есть ли пользователь в канале. Если есть какой-то другой способ использовать проверку, то пожалуйста комментируйте. Пытался вывести данную вручную, но увы не получилось.

str(bot.get_chat_member(chat_id=message.chat.id,user_id=message.from_user.id).status)

Ответы (1 шт):

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

Во-первых, Вы забыли await перед вызовом асинхронной функции:

user_status = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)

Во-вторых, если Вы откроете в документации метод getChatMember, то увидите, что эта функция возвращает объект ChatMember.

В-третьих, если посмотрите в документации, что это за объект такой, ChatMember, то узнаете, что есть несколько типов, а именно:

This object contains information about one member of a chat. Currently, the following 6 types of chat members are supported:

  • ChatMemberOwner
  • ChatMemberAdministrator
  • ChatMemberMember
  • ChatMemberRestricted
  • ChatMemberLeft
  • ChatMemberBanned

В таком случае, Вам нужно проверять является ли Ваш user_status объектом ChatMemberMember:

if isinstance(user_status, ChatMemberMember):
    # Пользователь является участником чата

В итоге всё будет выглядеть примерно так:

@dp.message_handler()
async def bot_message(message: types.Message):
user_status = await bot.get_chat_member(chat_id=message.chat.id, user_id=message.from_user.id)
if message.text == '?СЫЛЛКА НА ПРИВАТНЫЙ КАНАЛ':
            if db.get_sub_status(message.from_user.id):
                if isinstance(user_status, ChatMemberMember)
                    await bot.send_message(message.from_user.id, "Вы уже находитесь в канале!")
                else:
                    expire_date = datetime.now() + timedelta(days=1)
                    link = await bot.create_chat_invite_link(chat_id, expire_date, 1)
                    await message.reply(link.invite_link, parse_mode="HTML")
                    user_channel_status = await bot.get_chat_member(chat_id=chat_id, user_id=message.chat.id)
                    print(user_channel_status)
            else:
                await bot.send_message(message.from_user.id, "Купи подписку")
→ Ссылка