Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Aiogram python проблема в нахождении id user

python2009monster Ученик (8), на голосовании 1 неделю назад
вот код
 #проверка нажатия кнопок для проверки на подписку на канал 
@dp.callback_query_handler(text='btn_check1')
async def check_btn(call:types.CallbackQuery):
await call.message.answer("проверка подписки")
user_channel_status = await bot.get_chat_member(chat_id=-1002022328830, user_id=message.chat.id)
user_channel_status = re.findall(r"\w*", str(user_channel_status))
try:
if user_channel_status[70] != 'left':
#Условие для "подписанных"
await bot.send_message(message.from_user.id, 'вы подписаны')
else:
await bot.send_message(message.chat.id, 'вы не подписаны')
#Условие для тех, кто не подписан
except:
if user_channel_status[60] != 'left':
await bot.send_message(message.from_user.id, 'вы подписаны')
#Условие для "подписанных"
else:
await bot.send_message(message.from_user.id, 'вы не подписаны')
#Условие для тех, кто не подписан
вот ошибка
   File "D:\IVAN_\NOMEROK_BETA2.0\main.py", line 46, in check_btn 
user_channel_status = await bot.get_chat_member(chat_id=-1002022328830, user_id=message.chat.id)
^^^^^^^
NameError: name 'message' is not defined
Голосование за лучший ответ
Шрэк Зелёный Мастер (1648) 1 месяц назад
Ошибка, с которой вы столкнулись, указывает на то, что переменная `message` не определена в контексте вашей функции `check_btn`. Это происходит потому, что `message` не передается в функцию как аргумент. Вместо этого, у вас есть объект `call`, который представляет собой объект `callback_query`. Вы должны использовать `call` для доступа к данным сообщения.

Вот исправленный вариант кода:


 @dp.callback_query_handler(text='btn_check1') 
async def check_btn(call: types.CallbackQuery):
await call.message.answer("проверка подписки")
user_channel_status = await bot.get_chat_member(chat_id=-1002022328830, user_id=call.from_user.id)
user_channel_status = re.findall(r"\w*", str(user_channel_status))
try:
if 'left' not in user_channel_status:
# Условие для "подписанных"
await bot.send_message(call.from_user.id, 'вы подписаны')
else:
# Условие для тех, кто не подписан
await bot.send_message(call.from_user.id, 'вы не подписаны')
except Exception as e:
print(f"Произошла ошибка: {e}")

Обратите внимание, что я заменил `message.chat.id` и `message.from_ user.id ` на `call.from_ user.id `, чтобы использовать ID пользователя, который инициировал callback-запрос. Также я добавил обработку исключений для отлова возможных ошибок и вывода их в консоль. Это поможет вам лучше понять причину возникновения ошибки, если она снова произойдет.
python2009monsterУченик (8) 1 месяц назад
выдает ошибку:
  File "D:\IVAN_\NOMEROK_BETA2.0\main.py", line 46, in check_btn 
user_channel_status = await bot.get_chat_member(chat_id=-1002022328830, user_id=call.from_user.id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

aiogram.utils.exceptions.BadRequest: User not found
Шрэк Зелёный Мастер (1648) python2009monster, Это может произойти по нескольким причинам: 1. Пользователь не является участником канала или группы с указанным `chat_id`. 2. `user_id` не соответствует ни одному из пользователей в указанном чате. 3. Пользователь покинул канал или группу до того, как бот попытался получить информацию о нем. Также важно проверить, что бот имеет необходимые разрешения в чате для получения информации о его участниках. Если все данные верны и проблема все еще возникает, возможно, стоит проверить, не были ли изменены права бота в чате после его добавления. Бот должен иметь право на чтение списка участников чата.
python2009monsterУченик (8) 1 месяц назад
вообщем проблема была в том что бот не был администратором. Но появилась новая проблема:
 name 're' is not defined 
*код тот который вы написали*
Шрэк Зелёный Мастер (1648) python2009monster, import re from aiogram import types @dp.callback_query_handler(text='btn_check1') async def check_btn(call: types.CallbackQuery): await call.message.answer("проверка подписки") user_channel_status = await bot.get_chat_member(chat_id=-1002022328830, user_id=call.from_ user.id ) user_channel_status = re.findall(r"\w*", str(user_channel_status)) try: if 'left' not in user_channel_status: # Условие для "подписанных" await bot.send_message(call.from_ user.id , 'вы подписаны') else: # Условие для тех, кто не подписан await bot.send_message(call.from_ user.id , 'вы не подписаны') except Exception as e: print(f"Произошла ошибка: {e}") Исправленный код
Похожие вопросы