72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
from django.conf import settings
|
|
import json
|
|
import time
|
|
|
|
from telegram import Update
|
|
|
|
from rest_framework import mixins, viewsets
|
|
from rest_framework.response import Response
|
|
from rest_framework.decorators import action
|
|
|
|
from .tgbot import TgBot
|
|
from .apps import TgBotUpdater
|
|
from .models import TgItem, TmcElement, TmcField
|
|
from .serializers import TgItemSerializer, TmcFieldSerializer
|
|
|
|
import logging
|
|
|
|
logger = logging.getLogger("root")
|
|
|
|
|
|
class TgItemViewSet(viewsets.ModelViewSet):
|
|
queryset = TgItem.objects.all().order_by('-updated_at')
|
|
serializer_class = TgItemSerializer
|
|
http_method_names = ["post", "get"]
|
|
|
|
@action(detail=False, methods=["post"], url_path=settings.TGBOT["WEBHOOK_URL"])
|
|
def send_tg_data(self, request):
|
|
TgBotUpdater.my_queue.put(
|
|
Update.de_json(data=json.loads(request.body), bot=TgBot.app.bot)
|
|
)
|
|
return Response({"result": "ok"})
|
|
# return super().create(request, *args, **kwargs)
|
|
|
|
|
|
class TmcFieldViewset(viewsets.ModelViewSet):
|
|
queryset = TmcField.objects.all()
|
|
serializer_class = TmcFieldSerializer
|
|
http_method_names = ["get"]
|
|
|
|
@action(detail=False, methods=["get"], url_path=r"get_name/(?P<chat_id>[^/.]+)")
|
|
def get_name(self, request, chat_id):
|
|
TgBotUpdater.my_queue.put({"name": "admin_get_name", "queryset": [chat_id]})
|
|
response = []
|
|
timer = 30
|
|
while timer > 0:
|
|
sleeping = 1
|
|
timer -= sleeping
|
|
time.sleep(sleeping)
|
|
if chat_id in TgBotUpdater.return_values:
|
|
response.append(TgBotUpdater.return_values[chat_id])
|
|
del TgBotUpdater.return_values[chat_id]
|
|
break
|
|
return Response(response)
|
|
@action(detail=False, methods=["get"], url_path=r"get_image/(?P<field_id>[^/.]+)")
|
|
def get_image(self, request, field_id):
|
|
if TmcField.objects.filter(id=field_id).exists():
|
|
field = TmcField.objects.filter(id=field_id)
|
|
TgBotUpdater.my_queue.put({"name": "admin_get_image", "queryset": field})
|
|
response = []
|
|
timer = 30
|
|
while timer > 0:
|
|
sleeping = 1
|
|
timer -= sleeping
|
|
time.sleep(sleeping)
|
|
if field[0].text in TgBotUpdater.return_values:
|
|
response.append(TgBotUpdater.return_values[field[0].text])
|
|
del TgBotUpdater.return_values[field[0].text]
|
|
break
|
|
return Response(response)
|
|
else:
|
|
raise (FileNotFoundError())
|