Бот отправляет в группу ТГ и на e-mail одну и ту же картинку, а должен отправлять ту которую получил. Подскажите пожалуйста как исправить
Бот отправляет в группу ТГ и на e-mail одну и ту же картинку. Ту которую получил первую после запуска бота. А должен отправлять сначала первую которую получил, затем вторую и т.д. Перезапуск бота дает то что он опять отправляет только ту фото, которую получает первой. Вполне возможно коряво написан код (первый мой бот). Отправка в группу и на e-mail должна осуществляться обязательно при прикреплении фото и после добавления комментария. Подскажите пожалуйста, как исправить. Советы по улучшению кода приветствуются.
import logging # Для логирования на время отладки бота. ЗАТЕМ ОТКЛЮЧИТЬ ЛОГИРОВАНИЕ
import asyncio
from aiogram import Bot, Dispatcher, F
from aiogram.types import Message
from aiogram.filters import CommandStart
# Импорт библиотек и модулей для отправки сообщений на e-mail
import smtplib
from os.path import basename
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
import app.keyboards as kb
from config import TOKEN, CHAT_ID, FROM_EMAIL, TO_EMAIL, PASSWORD
bot = Bot(token=TOKEN)
dp = Dispatcher()
@dp.message(CommandStart())
async def cmd_start(message: Message):
await message.answer(f'Привет!\nВаше имя: {message.from_user.first_name}\n'
f'Ваше имя пользователя: {message.from_user.username}\n'
f'Ваш ID: {message.from_user.id}', reply_markup=kb.main)
@dp.message(F.text == 'Отправить фото')
async def near_miss(message: Message):
await message.answer('Прикрепите фото ...')
@dp.message(F.photo)
async def get_photo(message: Message):
await message.reply('Спасибо за фото. Напишите комментарии, пояснения к данному фото ...')
photo_file_id = message.photo[-1].file_id
print(photo_file_id)
name_file = f"tmp/{message.photo[-1].file_id}.jpg"
await bot.download(message.photo[-1],
destination=name_file) # Сохраняется в папку tmp в папке программы на компе/сервере
@dp.message(F.text)
async def get_text(message: Message):
await message.reply('Спасибо, все данные отправленны')
await bot.send_message(chat_id=CHAT_ID,
text='<b>ОТПРАВКА ФОТОГРАФИИ</b>',
parse_mode='HTML') # Как вариант сообщение надо сделать формата:
# 'ОТПРАВКА ФОТОГРАФИИ от Ф.И.О. и № телефона'
await bot.send_photo(chat_id=CHAT_ID, photo=photo_file_id)
await bot.send_message(chat_id=CHAT_ID, text=message.text)
# Отправка на e-mail
from_email = FROM_EMAIL
to_email = TO_EMAIL
subject = 'Фото от ...'
msg = MIMEMultipart()
msg['From'] = from_email
msg['To'] = ', '.join(to_email) # Для отправки списком (несколько получателеЙ) ОБЯЗАТЕЛЬНО сделать через join
msg['Subject'] = subject
# Подготовка картинки к отправке
with open(name_file, "rb") as media:
file = MIMEApplication(media.read(), Name=basename("file.jpg"))
# Отправка картинки
msg.attach(file)
# Отправка текста
msg.attach(MIMEText(message.text))
with smtplib.SMTP('smtp.yandex.ru', 587) as smtp:
smtp.starttls()
smtp.login(from_email, PASSWORD)
smtp.sendmail(from_email, to_email, msg.as_string())
smtp.quit()
@dp.message(F.text == 'О боте')
async def about_us(message: Message):
await message.answer('Для отображения кнопок бота набрать и отправить сообщение - /start\n\n'
'Бот предоставляет возможность отправить фотографию,'
' а также комментарий к ней.')
@dp.message(F.text == 'О нас')
async def about_us(message: Message):
await message.answer('Тут текс будет потом')
async def main():
await dp.start_polling(bot)
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO) # Для логирования на время отладки бота. ЗАТЕМ ОТКЛЮЧИТЬ ЛОГИРОВАНИ
try:
asyncio.run(main())
except KeyboardInterrupt:
print('Бот выключен!')