hpnq

unresolved

Mar 30th, 2024
1,352
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.24 KB | None | 0 0
  1. from aiogram import Router, F
  2. from aiogram.filters import Command, StateFilter
  3. from aiogram.fsm.context import FSMContext
  4. from aiogram.types import FSInputFile, ReplyKeyboardMarkup, KeyboardButton, Message, CallbackQuery, ReplyKeyboardRemove, InlineKeyboardButton
  5. from aiogram.fsm.state import State, StatesGroup
  6. from datetime import datetime
  7. from keyboards.simple_row import make_row_keyboard
  8. from aiogram.utils.keyboard import InlineKeyboardBuilder
  9. from aiogram.filters.callback_data import CallbackData
  10. from aiogram.types.inline_keyboard_markup import InlineKeyboardMarkup
  11. from datetime import datetime
  12. from handlers.register import next_reg
  13. from aiogram.utils.media_group import MediaGroupBuilder
  14. from aiogram.methods.send_media_group import SendMediaGroup
  15. import json
  16.  
  17. # from register import next_reg # menu
  18. class MyCallback(CallbackData, prefix = "mycb"):
  19.     day: int
  20.     foo : str
  21.  
  22. task_today = {
  23.     1:[1, 2],
  24.     2:[3]
  25. }
  26. router = Router()
  27. class UserState(StatesGroup):
  28.     user_reg = State()
  29. class UserSolving(StatesGroup):
  30.     user_solving = State()
  31. class UserState(StatesGroup):
  32.     user_reg = State()
  33.  
  34. @router.message(UserState.user_reg, F.text.lower() == "домой")
  35. async def task0(message:Message):
  36.     await message.answer(
  37.         text="Вы дома!",
  38.         reply_markup=make_row_keyboard(["Назад"])
  39.     )
  40.  
  41. @router.message(UserState.user_reg, F.text.lower() == "задача моего дня")
  42. async def task_dayly(message: Message, state: FSMContext):
  43.     user_data = await state.get_data()
  44.     print("DATA: ", user_data["user"])
  45.     # return
  46.     user_datetime = user_data["user"]["date"]
  47.     builder = InlineKeyboardBuilder()
  48.    
  49.     # path_q = "../data_q/img.jpg"
  50.     #----------------------------------------------------------------------------------------------------------
  51.     img_q = FSInputFile("../data_q/img.png")
  52.     result = await message.answer_photo(
  53.         photo= img_q,
  54.         caption="pic cap"
  55.     )
  56.      #----------------------------------------------------------------------------------------------------------
  57.     print(result.photo[-1].file_id)
  58.     # album_builder.add(
  59.     #     type="photo",
  60.     #     media= img_q.photo[-1].file_id
  61.     #     # caption="Подпись к конкретному медиа"
  62.     #
  63.     # )
  64.     if user_datetime == 1:
  65.         for i in task_today[user_datetime]:
  66.             if(i not in user_data["user"]["solved_task"]):
  67.                 builder.add(InlineKeyboardButton(
  68.                     text="Нажми меня " + str(i),
  69.                     callback_data=MyCallback(day=i, foo="days").pack()
  70.                 ))
  71.  
  72.         await message.answer(
  73.             "Отлично, ваши задачи на сегодня:",
  74.             reply_markup=builder.as_markup()
  75.         )
  76.  
  77.     # await message.answer(
  78.     #     text="Вы дома!",
  79.     #     reply_markup=make_row_keyboard(["Назад"])
  80.     # )
  81. task_data = {
  82.     1 : {"header" : "header ",
  83.          "text"   : "pisikaki text",
  84.          "answer" : "pipiski",
  85.          "load_photo": "",
  86.          "load_video": ""
  87.          },
  88.     2 : {"header" : "header2 ",
  89.          "text"   : "pisikaki text chileen",
  90.          "answer" : "chileeen",
  91.          "load_photo": "",
  92.          "load_video": ""
  93.          }
  94.  
  95. }
  96. @router.callback_query(MyCallback.filter(F.foo == "days"))
  97. async def send_task(callback: CallbackQuery, state : FSMContext, callback_data: MyCallback):
  98.     await callback.message.answer(text="Вы на задаче №" + str(callback_data.day))
  99.     # for i in task_data[callback_data.day]:
  100.     #     print(i)
  101.     #ПОФИКСИТЬ НА task_today[callback_data.day]-----------------
  102.     today_quest = task_data[callback_data.day]
  103.  
  104.     text_quest = today_quest["header"] + "\n" + today_quest["text"] + "\nнапиши ответ"
  105.     # image_from_pc = FSInputFile("../data_q/img.png")
  106.     if today_quest["text"] == "":
  107.         media_group = MediaGroupBuilder(
  108.             caption="text_quest"
  109.         )
  110.  
  111.         media_group.add_photo(
  112.             media="https://loremflickr.com/320/240"
  113.         )
  114.         await callback.message.answer_media_group(
  115.             # media=album_builder.build()
  116.             media = media_group.build()
  117.         )
  118.  
  119.     await callback.message.answer(text=text_quest)
  120.  
  121.     user_data = await state.get_data()
  122.     x = {"task_n": callback_data.day}
  123.     user_data["user"].update(x)
  124.  
  125.     await state.update_data(user_data)
  126.     await state.set_state(UserSolving.user_solving)
  127.     await callback.answer()
  128.  
  129.  
  130. # Решаем конкретную задачу по стейту новому
  131. # Тут проверять ответ
  132. @router.message(UserSolving.user_solving, Command("cancel"))
  133. async def solving(message:Message,  state : FSMContext):
  134.     user_data = await state.get_data()
  135.     del user_data["user"]["task_n"]
  136.     print("HUETA ", user_data)
  137.     await state.set_state(UserState.user_reg)
  138.     await next_reg(message)
  139.  
  140.  
  141. @router.message(UserSolving.user_solving)
  142. async def solving(message:Message,  state : FSMContext):
  143.     user_data = await state.get_data()
  144.     print("1 - CALLBACCK USER DATA: ", user_data, type(user_data["user"]))
  145.  
  146.     if(message.text.lower() == task_data[user_data["user"]["task_n"]]["answer"]):
  147.         kb = [
  148.             [KeyboardButton(text="Перейти к задачам")]
  149.         ]
  150.         keyboard = ReplyKeyboardMarkup(keyboard=kb)
  151.  
  152.         await message.reply(
  153.             "Поздравляю! Это правильный ответ. Вернуться в меню(/menu)",
  154.             reply_markup=keyboard
  155.         )
  156.         #user_data["user"]
  157.         print("Task_n: ", user_data["user"]["task_n"])
  158.         # new_u_data = {user_data["user"]["solving_time"]
  159.         user_data["user"]["solving_time"].append(str(datetime.now()))
  160.         user_data["user"]["solved_task"].append(user_data["user"]["task_n"])
  161.         del user_data["user"]["task_n"]
  162.         await state.set_state(UserState.user_reg)
  163.         user_data = await state.get_data()
  164.         print(user_data)
  165.         await next_reg(message)
  166.         js_data = json.dumps(user_data["user"])
  167.         print("js_data: ", js_data)
  168.     else:
  169.         await message.reply(
  170.             text="Неверный ответ! Попробуйте снова"
  171.         )
  172.  
  173.  
Advertisement
Add Comment
Please, Sign In to add comment