fix: Refactor send_shop_order_invoice_telegram_task to use telebot for Telegram API integration

This commit is contained in:
Parsa Nazer
2025-12-28 12:25:06 +03:30
parent 6c7744935d
commit bb11f70d14
+15 -26
View File
@@ -134,10 +134,7 @@ def send_shop_order_invoice_telegram_task(shop_order_id, chat_id, bot_token):
Returns:
Success or error message
"""
import asyncio
import io
from telegram import Bot
from telegram.error import TelegramError
import telebot
from .invoice_generator import generate_shop_order_invoice
from .models import ShopOrderModel
@@ -145,29 +142,21 @@ def send_shop_order_invoice_telegram_task(shop_order_id, chat_id, bot_token):
# Get the shop order
shop_order = ShopOrderModel.objects.get(pk=shop_order_id)
# Generate invoice PDF
# Generate invoice PDF (should return a file-like object)
pdf_buffer = generate_shop_order_invoice(shop_order_id)
if hasattr(pdf_buffer, 'seek'):
pdf_buffer.seek(0)
# Reset buffer position
pdf_buffer.seek(0)
caption = f'فاکتور سفارش #{shop_order_id}\n{shop_order.shop.shop_name}'
# Send via Telegram
async def send_invoice():
bot = Bot(token=bot_token)
await bot.send_document(
chat_id=chat_id,
document=pdf_buffer,
filename=f'invoice_shop_order_{shop_order_id}.pdf',
caption=f'فاکتور سفارش #{shop_order_id}\n{shop_order.shop.shop_name}'
)
# Run async function - create new event loop for Celery context
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
try:
loop.run_until_complete(send_invoice())
finally:
loop.close()
# Initialize bot and send document
bot = telebot.TeleBot(bot_token)
bot.send_document(
chat_id=chat_id,
document=pdf_buffer,
caption=caption,
visible_file_name=f'invoice_shop_order_{shop_order_id}.pdf'
)
logging.info(f'Successfully sent shop order invoice {shop_order_id} to Telegram chat {chat_id}')
return f'Invoice sent successfully to chat {chat_id}'
@@ -176,8 +165,8 @@ def send_shop_order_invoice_telegram_task(shop_order_id, chat_id, bot_token):
error_msg = f'ShopOrderModel with id {shop_order_id} does not exist'
logging.error(error_msg)
return error_msg
except TelegramError as e:
error_msg = f'Telegram error sending invoice {shop_order_id}: {str(e)}'
except telebot.apihelper.ApiException as e:
error_msg = f'Telegram API error sending invoice {shop_order_id}: {str(e)}'
logging.error(error_msg)
return error_msg
except Exception as e: