Files
Rasadyar_Hamedan/RasadyaarBale/views.py
2026-01-18 11:42:00 +03:30

231 lines
9.3 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import requests
from django.http import HttpResponse
from rest_framework import status
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from rest_framework.views import APIView
from authentication.models import SystemUserProfile
from general_urls import base_url_for_sms_report
from panel.convert_date import convert_to_shamsi
from panel.models import PosCompany, ProductsTransactions
from .helper import Token
from .models import User_Bale
class BaleWebhookView(APIView):
permission_classes = [AllowAny]
def post(self, request):
try:
data = request.data
if 'message' in data:
message = data['message']
chat_id = message['chat']['id']
user_info = message.get('from', {})
user, created = User_Bale.objects.update_or_create(
chat_id=chat_id,
defaults={
'first_name': user_info.get('first_name'),
'last_name': user_info.get('last_name'),
}
)
text = message.get('text', '')
contact = message.get('contact', '')
if text == '/start':
welcome_message = "سلام! به ربات هوشمند سامانه رصدیار خوش آمدید. لطفاً برای ادامه شماره تلفن خود را ثبت کنید."
keyboard = {
"keyboard": [[{
"text": "📱 ارسال شماره تلفن",
"request_contact": True
}]],
"resize_keyboard": True,
"one_time_keyboard": True
}
self.send_message(
chat_id,
welcome_message,
reply_markup=keyboard
)
elif contact:
phone = contact['phone_number']
if phone.startswith('98'):
phone = '0' + phone[2:]
system_user=SystemUserProfile.objects.filter(trash=False,mobile=phone).first()
if system_user:
user.rasadyar_user=system_user
user.phone_number = phone
user.save()
keyboard = {
"keyboard": [
[{"text": " درباره ما"},
{"text": "📬 تماس با ما"}
]
],
"resize_keyboard": True,
"one_time_keyboard": False
}
self.send_message(
chat_id,
f"شماره شما ثبت شد: {phone}",
reply_markup=keyboard
)
elif text == " درباره ما":
self.send_message(
chat_id,
"ربات هوشمند ساخته شده با پایتون \n\n"
"توسعه دهنده: شرکت هوشمندسازان فرآیند های نوین ماداکتو"
)
elif text == "📬 تماس با ما":
self.send_message(
chat_id,
"برای ارتباط با ما:\n\n"
"📧 ایمیل: info@mnpc.ir\n"
"☎️ تلفن: 28421237-021\n"
"🌐 وبسایت: https://mnpc.ir/ \n"
)
else:
self.send_message(chat_id, f"لطفا از دکمه های راهنما استفاده کنید.")
return Response({'status': 'ok'}, status=status.HTTP_200_OK)
except Exception as e:
print("خطا:", e)
return Response({'error': str(e)}, status=status.HTTP_400_BAD_REQUEST)
def send_message(self, chat_id, text, reply_markup=None):
url = f"https://tapi.bale.ai/bot{Token}/sendMessage"
payload = {
"chat_id": chat_id,
"text": text
}
if reply_markup:
payload["reply_markup"] = reply_markup
headers = {'Content-Type': 'application/json'}
try:
response = requests.post(url, data=json.dumps(payload), headers=headers)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print("خطا در ارسال پیام:", e)
return None
def bale_set_webhook(request):
response = requests.post(
f"https://tapi.bale.ai/bot{Token}/setWebhook",
json={"url": f"https://{base_url_for_sms_report}backend.rasadyaar.ir/bale/webhook/"}
)
return HttpResponse(response.json())
def send_message_for_bale(chat_id, text, reply_markup=None):
url = f"https://tapi.bale.ai/bot{Token}/sendMessage"
payload = {
"chat_id": chat_id,
"text": text
}
if reply_markup:
payload["reply_markup"] = reply_markup
headers = {'Content-Type': 'application/json'}
try:
response = requests.post(url, data=json.dumps(payload), headers=headers)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print("خطا در ارسال پیام:", e)
return None
def send_transaction(transaction, chat_ids):
try:
if transaction.paid or transaction.status in (0, 1):
pos_company = PosCompany.objects.filter(trash=False, en_name__exact=transaction.posProvider).first()
if pos_company:
pos_company_name = pos_company.name
else:
pos_company_name = 'ناشناس'
if transaction.pos.kill_house:
dict_info = {
'name': transaction.pos.kill_house.name,
'mobile': transaction.pos.kill_house.kill_house_operator.user.mobile,
'fullname': transaction.pos.kill_house.kill_house_operator.user.fullname,
'city': transaction.pos.kill_house.kill_house_operator.user.city.name,
'province': transaction.pos.kill_house.kill_house_operator.user.province.name,
'national_code': transaction.pos.kill_house.kill_house_operator.user.national_code,
'type': 'کشتارگاه',
}
elif transaction.pos.guild:
dict_info = {
'name': transaction.pos.guild.guilds_name,
'mobile': transaction.pos.guild.user.mobile,
'fullname': transaction.pos.guild.user.fullname,
'city': transaction.pos.guild.user.city.name,
'province': transaction.pos.guild.user.province.name,
'national_code': transaction.pos.guild.user.national_code,
'type': 'صنف',
}
else:
dict_info = {
'name': transaction.pos.cooperative.name,
'mobile': transaction.pos.cooperative.user.mobile,
'fullname': transaction.pos.cooperative.user.fullname,
'city': transaction.pos.cooperative.user.city.name,
'province': transaction.pos.cooperative.user.province.name,
'national_code': transaction.pos.cooperative.user.national_code,
'type': 'سامانه دام',
}
price = "{:,}".format(int(transaction.price))
alert_message = (
f"*---* {transaction.result} *---*\n"
f"{dict_info['type']} : *{dict_info['name']}*\n"
f"آدرس : *{dict_info['province']}* - *{dict_info['city']}*\n"
f"درگاه : *{pos_company_name}*\n"
f"زمان : *{convert_to_shamsi(datetime=transaction.date, in_value=True)}*\n"
f"مبلغ کل : *{price}* ریال\n\n"
)
products = ProductsTransactions.objects.filter(trash=False, transaction=transaction)
for prd in products:
if prd.live_stack_products:
fi_prd_price = "{:,}".format(int(int(prd.cur_price) / int(prd.cur_weight)) if prd.cur_weight > 0 else 0)
else:
fi_prd_price = "{:,}".format(int(prd.price))
cur_weight = "{:,}".format(int(prd.cur_weight))
cur_price = "{:,}".format(int(prd.cur_price))
if prd.cur_weight != 1:
alert_message += (
f"*{prd.name}* (فی {fi_prd_price} ریال)\n"
f"وزن خریداری شده:({cur_weight}{prd.targetunit}) \n"
f"مبلغ: *{cur_price}* ریال\n\n"
)
else:
alert_message += (
f"*{prd.name}* \n"
f"خریداری شده : *{cur_price}* ریال\n\n"
)
for i in chat_ids:
send_message_for_bale(chat_id=i, text=alert_message)
except:
pass