part of tg

This commit is contained in:
Kseninia Mikhaylova 2024-07-05 16:50:49 +03:00
parent ef08733979
commit 1b310dbfbe
3 changed files with 56 additions and 14 deletions

View File

@ -22,7 +22,9 @@ class TgBotClass(AppConfig):
tgbot = TgBotApp()
app = await tgbot.init_tg()
await tgbot.set_webhook(f"https://{settings.TGBOT['base_url']}/api/tgbot/")
await tgbot.set_webhook(
f"https://{settings.TGBOT['base_url']}/api/tgbot/",
)
return app
async def some_function(self=None):
@ -31,8 +33,8 @@ class TgBotClass(AppConfig):
item = TgBotClass.my_queue.get()
await TgBotClass.app.process_update(item)
TgBotClass.my_queue.task_done()
time.sleep(1)
time.sleep(1)
async def some_callback():
await TgBotClass.some_function()

View File

@ -34,7 +34,7 @@ class Item(models.Model):
unique=True,
)
user_id = models.BigIntegerField()
name = models.CharField(max_length=255)
name = models.CharField(max_length=255, unique_for_month=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
tmc = models.ManyToManyField(CustomTable)

View File

@ -9,6 +9,7 @@ from telegram import (
KeyboardButton,
InlineKeyboardMarkup,
InlineKeyboardButton,
MessageEntity,
)
from telegram.ext import (
Application,
@ -53,19 +54,32 @@ class TgBotApp:
inv = []
async for e in Item.objects.filter(user_id=user.id):
inv.append(e)
inv.append(e.name)
keys = chunk(1, inv)
await update.message.reply_markdown_v2(
("Ваши инвентаризации\n" "\n".join([f"`/inv_{i.id}`" for i in inv])),
# reply_markup=ForceReply(selective=True),
("Ваши инвентаризации"),
reply_markup=ReplyKeyboardMarkup(
[[KeyboardButton(i) for i in arr] for arr in keys]
),
reply_parameters=ReplyParameters(message_id=update.message.message_id),
)
context.chat_data["step"] = "get_inv"
async def inv(self, update: Update, context: CallbackContext):
user = update.effective_user
current_step = context.chat_data.get("step", None)
if not update.message:
return True
logger.info(update.message)
logger.info(f"Step {current_step} from user {user.full_name}")
if current_step == "get_inv":
inv = await Item.objects.aget(name=update.message.text)
context.chat_data["inv"] = inv.id
context.chat_data["step"] = "name"
current_step = context.chat_data["step"]
if not current_step and update.message.text == "/inv":
inv = await Item.objects.acreate(user_id=user.id)
await update.message.reply_markdown_v2(
@ -79,7 +93,7 @@ class TgBotApp:
context.chat_data["inv"] = inv.id
context.chat_data["step"] = "name"
elif current_step is "name":
elif current_step == "name":
inv = await Item.objects.aget(id=context.chat_data["inv"])
inv.name = update.message.text
await inv.asave()
@ -90,7 +104,11 @@ class TgBotApp:
keys = chunk(3, tmc)
await update.message.reply_markdown_v2(
(f"Инвентаризация `#{inv.id}`\n" f"Название объекта `{inv.name}`\n"),
(
f"Инвентаризация `#{inv.id}`\n"
f"Название объекта `{inv.name}`\n"
f"Количество ТМЦ {await inv.tmc.acount()}"
),
reply_parameters=ReplyParameters(message_id=update.message.message_id),
reply_markup=ReplyKeyboardMarkup(
[[KeyboardButton(i) for i in arr] for arr in keys]
@ -99,7 +117,7 @@ class TgBotApp:
logger.info(tmc)
context.chat_data["step"] = "add_tmc"
elif current_step is "add_tmc":
elif current_step == "add_tmc":
tmc_name = update.message.text
tmc = await CustomTable.objects.aget(name=tmc_name)
@ -125,7 +143,7 @@ class TgBotApp:
)
context.chat_data["tmc"] = tmc.id
context.chat_data["step"] = "add_field"
elif current_step is "add_field":
elif current_step == "add_field":
tmc = await CustomTable.objects.aget(id=context.chat_data["tmc"])
element_name = update.message.text
@ -147,8 +165,10 @@ class TgBotApp:
)
context.chat_data["element"] = element.id
context.chat_data["step"] = "add_field_data"
elif current_step is "add_field_data":
element = await Element.objects.aget(id=context.chat_data["element"])
elif current_step == "add_field_data":
inv = await Item.objects.aget(id=context.chat_data["inv"])
tmc = await CustomTable.objects.aget(id=inv.tmc)
element = await Element.objects.aget(id=inv.element)
if update.message.photo:
element.photoid = update.message.photo[-1].file_id
@ -157,6 +177,23 @@ class TgBotApp:
await element.asave()
await update.message.reply_markdown_v2(
(
f"Инвентаризация `#{inv.id}`\n"
f"Название объекта `{inv.name}`\n"
f"Название ТМЦ `{tmc.name}`\n"
f"Название элемента `{element.name}`\n"
f"Загрузите фото или пришлите текст"
),
reply_parameters=ReplyParameters(message_id=update.message.message_id),
reply_markup=ReplyKeyboardRemove(),
)
context.chat_data["element"] = element.id
context.chat_data["step"] = "add_field_data"
else:
logger.info(update.message.entities)
logger.info(f"no step for update {update}")
if "step" in context.chat_data and context.chat_data["step"] == current_step:
context.chat_data["step"] = None
context.chat_data["inv"] = None
@ -170,7 +207,9 @@ class TgBotApp:
logger.error("no app")
return
app = self._app
await app.bot.set_webhook(url, allowed_updates=Update.ALL_TYPES)
await app.bot.set_webhook(
url, allowed_updates=Update.ALL_TYPES, drop_pending_updates=True
)
async def init_tg(self):
self._app = (
@ -197,4 +236,5 @@ class TgBotApp:
)
await self._app.initialize()
await self._app.start()
self._app
return self._app