watch module: fix duplicate display and add support for arguments

parent 0f074af2
from . import start as start_keyboards from . import start as start_keyboards
from . import menu as menu_keyboards from . import menu as menu_keyboards
from . import profile as profile_keyboards from . import profile as profile_keyboards
from . import watch as watch_keyboards
from telegrinder import InlineKeyboard, InlineButton
def watch_more_kb(maintainer: str):
kb = InlineKeyboard()
kb.add(
InlineButton(
"Полный список",
url=f"https://packages.altlinux.org/ru/sisyphus/maintainers/{maintainer}/watch",
)
)
return kb.get_markup()
from telegrinder import Dispatch, Message from telegrinder import Dispatch, Message
from telegrinder.rules import Command, Text, IsUser from telegrinder.rules import Command, Argument, Text, IsUser
from telegrinder.tools.formatting import HTMLFormatter from telegrinder.tools.formatting import HTMLFormatter
from telegrinder.types import LinkPreviewOptions
from api import api from api import api
from api.models import BugzillaInfoModel
from services.menu import send_menu
from database.models import User from database.models import User
from data.keyboards import watch_keyboards
dp = Dispatch() dp = Dispatch()
dp.message.auto_rules = IsUser()
@dp.message(Command("watch", Argument("maintainer", optional=True)))
@dp.message(Text(["watch", "отслеживание"], ignore_case=True), IsUser())
async def watch_handler(m: Message, user: User | None, maintainer: str | None) -> None:
@dp.message(Command("watch") | Text(["watch", "отслеживание"], ignore_case=True)) if maintainer:
async def watch_handler(m: Message, user: User | None) -> None: maintainer = maintainer.lower()
maintainer_data = await api.site.all_maintainers("sisyphus")
if not any(
_m.packager_nickname == maintainer for _m in maintainer_data.maintainers
):
await m.answer(f"Сопровождающий {maintainer} не найден.")
else:
if user:
maintainer = user.maintainer
else:
return
if user is None: watch_data = await api.site.watch_by_maintainer(maintainer)
return
watch_data = await api.site.watch_by_maintainer(user.maintainer)
if not len(watch_data.packages): if not len(watch_data.packages):
await m.answer( await m.answer("Нет устаревших пакетов")
"У вас нет устаревших пакетов"
)
return return
watch_message = "Отслеживание:\n\n" watch_message = "Отслеживание:\n\n"
for i, package in enumerate(watch_data.packages): packages = {}
for package in watch_data.packages:
name = package.pkg_name
if name not in packages or "src.rpm" in packages[name].url:
packages[name] = package
packages = list(packages.values())
for i, package in enumerate(packages):
if i == 30: if i == 30:
break break
watch_message += f"{package.pkg_name}: {package.old_version} -> " + \ watch_message += (
HTMLFormatter( f"{package.pkg_name}: {package.old_version} -> "
f"<a href='{package.url}'>{package.new_version}</a>") + "\n" + HTMLFormatter(
f"<a href='{package.url.replace(".git/", "/")}'>{package.new_version}</a>"
if len(watch_data.packages) > 30: )
+ "\n"
)
markup = None
if len(packages) > 30:
watch_message += "\n..." watch_message += "\n..."
markup = watch_keyboards.watch_more_kb(maintainer)
await m.answer(watch_message) await m.answer(watch_message, reply_markup=markup)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment