fix: Refactor send_shop_order_invoice_telegram_task to use telebot for Telegram API integration
This commit is contained in:
+15
-26
@@ -134,10 +134,7 @@ def send_shop_order_invoice_telegram_task(shop_order_id, chat_id, bot_token):
|
|||||||
Returns:
|
Returns:
|
||||||
Success or error message
|
Success or error message
|
||||||
"""
|
"""
|
||||||
import asyncio
|
import telebot
|
||||||
import io
|
|
||||||
from telegram import Bot
|
|
||||||
from telegram.error import TelegramError
|
|
||||||
from .invoice_generator import generate_shop_order_invoice
|
from .invoice_generator import generate_shop_order_invoice
|
||||||
from .models import ShopOrderModel
|
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
|
# Get the shop order
|
||||||
shop_order = ShopOrderModel.objects.get(pk=shop_order_id)
|
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)
|
pdf_buffer = generate_shop_order_invoice(shop_order_id)
|
||||||
|
if hasattr(pdf_buffer, 'seek'):
|
||||||
|
pdf_buffer.seek(0)
|
||||||
|
|
||||||
# Reset buffer position
|
caption = f'فاکتور سفارش #{shop_order_id}\n{shop_order.shop.shop_name}'
|
||||||
pdf_buffer.seek(0)
|
|
||||||
|
|
||||||
# Send via Telegram
|
# Initialize bot and send document
|
||||||
async def send_invoice():
|
bot = telebot.TeleBot(bot_token)
|
||||||
bot = Bot(token=bot_token)
|
bot.send_document(
|
||||||
await bot.send_document(
|
chat_id=chat_id,
|
||||||
chat_id=chat_id,
|
document=pdf_buffer,
|
||||||
document=pdf_buffer,
|
caption=caption,
|
||||||
filename=f'invoice_shop_order_{shop_order_id}.pdf',
|
visible_file_name=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()
|
|
||||||
|
|
||||||
logging.info(f'Successfully sent shop order invoice {shop_order_id} to Telegram chat {chat_id}')
|
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}'
|
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'
|
error_msg = f'ShopOrderModel with id {shop_order_id} does not exist'
|
||||||
logging.error(error_msg)
|
logging.error(error_msg)
|
||||||
return error_msg
|
return error_msg
|
||||||
except TelegramError as e:
|
except telebot.apihelper.ApiException as e:
|
||||||
error_msg = f'Telegram error sending invoice {shop_order_id}: {str(e)}'
|
error_msg = f'Telegram API error sending invoice {shop_order_id}: {str(e)}'
|
||||||
logging.error(error_msg)
|
logging.error(error_msg)
|
||||||
return error_msg
|
return error_msg
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user