Как админу отвечать на присланную фотографию от пользователя из бота aiogram
Бот нужен для поддержки. Пользователь пишет что-либо боту, а тот пересылает все админу. С обычными сообщениями я разобрался, а как это сделать с фото?
from aiogram import Bot, Dispatcher, executor, types
from aiogram import *
from aiogram.types import *
TOKEN = ""
admin_id = xxxx
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['start'])
async def process_start_command(message: types.Message):
if message['from'].id == admin_id:
await message.answer(f"Hi, admin")
else:
await message.answer(f"✋Здравствуйте, {message['from'].first_name}, напишите нам ваш вопрос и мы ответим вам в ближайшее время!")
@dp.message_handler()
async def process_start_command(message: types.Message):
if message.reply_to_message == None:
if '/start' not in message.text:
await bot.forward_message(admin_id, message.from_user.id, message.message_id)
f = open('users.txt', "a")
sms = message.text + ":" + str(message.from_user.id)
f.write(sms + '\n')
else:
if message.from_user.id == admin_id:
f = open('users.txt', 'r')
for i in f.readlines():
if message.photo is not None:
print(message.photo)
if message.photo[-1].file_id in i:
u_id = i.split(':')[1]
else:
print('non')
elif message.reply_to_message.text in i:
u_id = i.split(':')[1]
print(u_id)
await bot.send_message(u_id, message.text)
else:
await message.answer('Нельзя отвечать на сообщения.')
@dp.message_handler(content_types=['photo'])
async def handle_docs_photo(message):
photo_id = message.photo[-1].file_id
print(photo_id)
f = open('users.txt', "a")
sms = photo_id + ":" + str(message.from_user.id)
f.write(sms + '\n')
await bot.forward_message(admin_id, message.from_user.id, message.message_id)
@dp.message_handler(content_types=['document'])
async def handle_docs_photo(message):
await bot.forward_message(admin_id, message.from_user.id, message.message_id)
if __name__ == '__main__':
print("starting")
executor.start_polling(dp)
В handle_docs_photo сохраняется id фотографии и записывается в txt вместе с id пользователя, то есть задумка такая, как и с сообщениями, я сохраняю id и через двоеточие id юзера, который это написал, и потом, после if message.from_user.id == admin_id: я открываю txt файл и ищу там это фото с нужынм id, чтоб как раз узнать id пользователя, который мне это фото отправил, но в итоге я получаю
if message.photo[-1].file_id in i:
AttributeError: 'list' object has no attribute 'file_id'
то есть message.photo[-1].file_id почему то пустой Есть идеи, как это исправить? или реализовать по другому
- важно, чтоб админ мог отвечать именно кнопкой reply
Ответы (1 шт):
У тебя второй обработчик не имеет условий, поэтому скорее всего считает вообще все сообщения, поэтому дальше него ничего не идёт.
Обработчики не выполняются последовательно, а лишь до первого совпадения. В данном случае, у тебя всё залетает в @dp.message_handler(), а дальше не идёт.