watch module: fix duplicate display and add support for arguments

parent 0f074af2
from . import start as start_keyboards
from . import menu as menu_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.rules import Command, Text, IsUser
from telegrinder.rules import Command, Argument, Text, IsUser
from telegrinder.tools.formatting import HTMLFormatter
from telegrinder.types import LinkPreviewOptions
from api import api
from api.models import BugzillaInfoModel
from services.menu import send_menu
from database.models import User
from data.keyboards import watch_keyboards
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))
async def watch_handler(m: Message, user: User | None) -> None:
if maintainer:
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:
return
watch_data = await api.site.watch_by_maintainer(maintainer)
watch_data = await api.site.watch_by_maintainer(user.maintainer)
if not len(watch_data.packages):
await m.answer(
"У вас нет устаревших пакетов"
)
await m.answer("Нет устаревших пакетов")
return
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:
break
watch_message += f"{package.pkg_name}: {package.old_version} -> " + \
HTMLFormatter(
f"<a href='{package.url}'>{package.new_version}</a>") + "\n"
if len(watch_data.packages) > 30:
watch_message += (
f"{package.pkg_name}: {package.old_version} -> "
+ HTMLFormatter(
f"<a href='{package.url.replace(".git/", "/")}'>{package.new_version}</a>"
)
+ "\n"
)
markup = None
if len(packages) > 30:
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