FSM не передает message.from_user.id для других пользователей
Всем здравствуйте, столкнулся с проблемой при работе с FSM когда регестрирую state(код прикреплю ниже) передаю в него message.from_user.id с надеждой использовать для функции с базой данных(aiosqlite3) в callback обработчике и в общем происходит так, что когда запускаю main.py все корректно работает, когда я - админ отправляю репорт и сам его подтвержаю, либо же когда человек который отправил репорт его подтвержает(формально у него нет прав) но я вывел отладку чтобы посмотреть все ли правильно приходит, в чем может быть проблема? 2 день пытаюсь решить, заранее спасибо. код для вызова репорта:
async def increase_rep(message: types.Message, state: FSMContext) -> None:
try:
if message.reply_to_message:
user = message.from_user.id
secret_user_id = await encrypt_name(user)
await register(secret_user_id)
kb = get_main_ikb()
await MyState.id_user_cancel.set()
async with state.proxy() as data:
data['initiator_user_id'] = message.from_user.id
await bot.send_message(chat_id=message.chat.id, text='Спасибо за обращение, мы обязательно разберемся!', reply_markup=kb)
else:
await bot.send_message(chat_id=message.chat.id, text='Это команда <b>должна быть</b> ответом на сообщение!')
except BadRequest as _ex:
logging.error(f"Ошибка при выполнении команды 'increase_rep': {_ex}")
его регистрация в хендлере:
def register_handlers_client(dp: Dispatcher):
dp.register_message_handler(increase_rep, Text(equals="!report"), state='*')
далее файл report_process.py с обработкой State и функции из бд
async def accept_report_admin(call: types.CallbackQuery, state: FSMContext):
try:
chat_id = call.message.chat.id
user = call.from_user.id
message_id = call.message.message_id
call_user_status = (await bot.get_chat_member(chat_id, user)).status
state_data = await state.get_data()
export_initiator_user_id = state_data.get("initiator_user_id")
chat_member = await bot.get_chat_member(chat_id, export_initiator_user_id)
user_name = chat_member.user.full_name
print(chat_member, user_name)
if call_user_status == 'administrator' or call_user_status == 'owner' or call_user_status == 'creator':
await bot.delete_message(chat_id, message_id)
num = randint(0, 15)
await add_reputation(export_initiator_user_id, num)
reputation = await check_reputation(export_initiator_user_id)
await bot.send_message(chat_id, f'Пользователю {user_name} повысили репутацию, текущее количество репутации - {reputation} (+{num})')
await call.answer('Репорт успешно одобрен и был удален.', show_alert=True)
else:
await call.answer('У вас недостаточно прав на это действие.', show_alert=True)
await state.finish()
except Exception as ex:
logging.error(f"Ошибка при выполнении кал-бек команды 'accept_report_admin': {ex}")
сама функция из бд(навсякий тоже кину):
async def add_reputation(name, num=10):
try:
async with sq.connect(db_path) as db:
cur = await db.cursor()
await cur.execute("SELECT reputation FROM Users WHERE nick_name =?", (name,))
reputation = await cur.fetchone()
if reputation:
new_reputation = reputation[0] + num
await cur.execute("UPDATE Users SET reputation = ? WHERE nick_name = ?", (new_reputation, name))
await db.commit()
else:
await register(name)
except sq.Error as E:
print(f'Error: {E}')
частая ошибка которая приходила на тестах:
либо в принте приходила вместо initiator_user_id - None либо же Ошибка при выполнении калл-бек команды 'accept_report_admin': Invalid user_id specified
в идеале при проверке у меня хотелось бы :
