dialog.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. from typing import Any
  2. import operator
  3. from aiogram.dispatcher.filters.state import StatesGroup, State
  4. from aiogram.types import Message, CallbackQuery
  5. from aiogram_dialog import Window, Dialog, DialogManager, StartMode
  6. from aiogram_dialog.widgets.kbd import Radio
  7. from aiogram_dialog.widgets.text import Format
  8. from aiogram.types import ParseMode
  9. from summarize import get_paper_desc, get_key_moments, get_summary
  10. class MySG(StatesGroup):
  11. main = State()
  12. buttons = [
  13. ("Abstract", '1'),
  14. ("Summary", '2'),
  15. ("Key Moments", '3'),
  16. ]
  17. async def get_data(dialog_manager: DialogManager, **kwargs):
  18. data = dialog_manager.current_context()
  19. item_id = data.widget_data.get('radio_buttons') #type: ignore
  20. p = {"text": "OOOPS!"}
  21. title = data.start_data["title"] #type: ignore
  22. url = data.start_data["url"] #type: ignore
  23. if data.dialog_data.get('abs'): #type: ignore
  24. abst = data.dialog_data.get('abs') #type: ignore
  25. else:
  26. data.dialog_data["abs"] = data.start_data["reply_message"] #type: ignore
  27. abst = data.dialog_data.get('abs') #type: ignore
  28. if item_id == "2":
  29. if data.dialog_data.get("summary"):
  30. summ = data.dialog_data["summary"]
  31. p = {"text": f"{url}\n\n***{title}***\n\n{summ}"}
  32. elif item_id == "3":
  33. if data.dialog_data.get("key_moments"):
  34. keys = data.dialog_data.get("key_moments")
  35. p = {"text": f"{url}\n\n***{title}***\n\n{keys}"}
  36. else:
  37. p = {"text": abst}
  38. return p
  39. async def on_button_selected(c: CallbackQuery, widget: Any, manager: DialogManager, item_id: str):
  40. data = manager.current_context()
  41. if item_id == "2":
  42. if data.dialog_data.get('summary'):
  43. pass
  44. else:
  45. await c.answer("Getting Summary, please wait")
  46. summary = await get_summary(url = data.start_data["url"])
  47. data.dialog_data["summary"] = summary
  48. elif item_id == "3":
  49. if data.dialog_data.get("key_moments"):
  50. pass
  51. else:
  52. await c.answer("Getting Key Moments, please wait")
  53. key_moments = await get_key_moments(url=data.start_data["url"])
  54. data.dialog_data["key_moments"] = key_moments
  55. else:
  56. pass
  57. return {"text": item_id}
  58. buttons_kbd = Radio(
  59. Format("✓ {item[0]}"),
  60. Format("{item[0]}"),
  61. id="radio_buttons",
  62. item_id_getter=operator.itemgetter(1),
  63. items=buttons,
  64. on_click=on_button_selected,
  65. )
  66. dialog = Dialog(
  67. Window(
  68. Format("{text}"),
  69. buttons_kbd,
  70. state=MySG.main,
  71. getter=get_data,
  72. parse_mode=ParseMode.MARKDOWN,
  73. # preview_data={"button": "1"}
  74. )
  75. )