add name inv

This commit is contained in:
Kseninia Mikhaylova 2024-07-05 13:04:18 +03:00
parent 1fea37ec76
commit 3922bd3454
6 changed files with 60 additions and 23 deletions

View File

@ -27,11 +27,7 @@ SECRET_KEY = "django-insecure-ruo!wst&sb8(f9)j5u4rda-w!673lj_-c0a%gx_t@)ff*q*2ze
# SECURITY WARNING: don't run with debug turned on in production! # SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True DEBUG = True
<<<<<<< HEAD NGROK_TEMP = "da22-193-228-134-167.ngrok-free.app"
NGROK_TEMP = "357e-193-228-134-167.ngrok-free.app"
=======
NGROK_TEMP = "5f4c-193-228-134-167.ngrok-free.app"
>>>>>>> bx-581-startproject
ALLOWED_HOSTS = [ ALLOWED_HOSTS = [
"localhost", "localhost",
NGROK_TEMP, NGROK_TEMP,

View File

@ -1,5 +1,5 @@
from django.contrib import admin from django.contrib import admin
from .models import Item # from .models import Item
# Register your models here. # Register your models here.
admin.site.register(Item) # admin.site.register(Item)

View File

@ -26,17 +26,12 @@ class TgBotClass(AppConfig):
return app return app
async def some_function(self=None): async def some_function(self=None):
# await TgBotClass.app.bot.get_me()
while True: while True:
if not TgBotClass.my_queue.empty(): if not TgBotClass.my_queue.empty():
item = TgBotClass.my_queue.get() item = TgBotClass.my_queue.get()
try: await TgBotClass.app.process_update(item)
await TgBotClass.app.process_update(item)
except Exception as e:
print('err')
await TgBotClass.app.process_update(item)
TgBotClass.my_queue.task_done() TgBotClass.my_queue.task_done()
time.sleep(3) time.sleep(1)
async def some_callback(): async def some_callback():
await TgBotClass.some_function() await TgBotClass.some_function()

View File

@ -1,8 +1,12 @@
import uuid
from django.db import models from django.db import models
class Item(models.Model): class Item(models.Model):
id = models.AutoField(primary_key=True) id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
user_id = models.BigIntegerField()
name = models.CharField(max_length=255) name = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self): def __str__(self):
return f"Tg item {self.id}" return f"Tg item {self.id}"

View File

@ -1,4 +1,5 @@
from django.conf import settings from django.conf import settings
from asgiref.sync import sync_to_async
from telegram import ( from telegram import (
ForceReply, ForceReply,
Update, Update,
@ -11,7 +12,10 @@ from telegram.ext import (
filters, filters,
CallbackContext, CallbackContext,
) )
from telegram.constants import ParseMode, ChatType from telegram.constants import ParseMode, ChatType, MessageEntityType
from .apps import TgBotClass
from .models import Item
import logging import logging
@ -22,14 +26,49 @@ class TgBotApp:
_app = None _app = None
async def start(self, update: Update, context: CallbackContext): async def start(self, update: Update, context: CallbackContext):
user = update.effective_user await update.message.reply_markdown_v2(
# logger.info(update) (
await update.message.reply_html( "Это бот для проведения инвентаризации\n"
rf"Hi {user.mention_html()}!", "/inv - начать новую инвентаризацию"
),
# reply_markup=ForceReply(selective=True), # reply_markup=ForceReply(selective=True),
reply_parameters=ReplyParameters(message_id=update.message.message_id), reply_parameters=ReplyParameters(message_id=update.message.message_id),
) )
async def inv(self, update: Update, context: CallbackContext):
user = update.effective_user
current_step = context.chat_data.get("step", None)
logger.info(f"Step {current_step} from user {user.full_name}")
if not current_step and update.message.text == "/inv":
inv = await sync_to_async(Item.objects.create)(user_id=user.id)
await update.message.reply_markdown_v2(
(
f"Специалист {user.name or user.full_name}, ID {user.id}\n"
f"Начинаем инвентаризацию `#{inv.id}`\n"
f"Введите название объекта"
),
reply_parameters=ReplyParameters(message_id=update.message.message_id),
)
context.chat_data["step"] = "name"
context.chat_data["inv"] = inv.id
elif current_step is "name":
inv = await sync_to_async(Item.objects.get)(id=context.chat_data["inv"])
inv.name = update.message.text
await sync_to_async(inv.save)()
await update.message.reply_markdown_v2(
(
f"Инвентаризация `#{inv.id}`\n"
f"Название объекта `{inv.name}`"
),
reply_parameters=ReplyParameters(message_id=update.message.message_id),
)
# context.chat_data["step"] = "add"
context.chat_data["step"] = None
async def error(self, update: Update, context: CallbackContext):
logger.info(f"error in tgbot {context.error}\nReply update")
TgBotClass.my_queue.put(update)
async def set_webhook(self, url): async def set_webhook(self, url):
if not self._app: if not self._app:
logger.error("no app") logger.error("no app")
@ -45,8 +84,12 @@ class TgBotApp:
.updater(None) .updater(None)
.build() .build()
) )
self._app.add_handler(CommandHandler("start", self.start)) self._app.add_handler(
self._app.add_handler(MessageHandler(filters.ChatType.PRIVATE, self.start)) CommandHandler("start", self.start, filters.ChatType.PRIVATE)
)
self._app.add_handler(CommandHandler("inv", self.inv, filters.ChatType.PRIVATE))
self._app.add_handler(MessageHandler(filters.ChatType.PRIVATE, self.inv))
self._app.add_error_handler(self.error)
logger.info( logger.info(
{ {

View File

@ -7,7 +7,6 @@ from asgiref.sync import async_to_sync
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework.response import Response from rest_framework.response import Response
import time
from .apps import TgBotClass from .apps import TgBotClass
from .models import Item from .models import Item
from .serializers import ItemSerializer from .serializers import ItemSerializer