Как вывести "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 шт):
Во-первых, Вы забыли 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, "Купи подписку")