add watch

parent e0b551e3
...@@ -83,6 +83,13 @@ class SiteInfo: ...@@ -83,6 +83,13 @@ class SiteInfo:
) )
return models.MaintainerInfoModel(**data) return models.MaintainerInfoModel(**data)
async def watch_by_maintainer(self, maintainer_nickname: str) -> models.SiteWatchByMaintainerModel:
data = await self.client.get(
"/site/watch_by_maintainer",
{"maintainer_nickname": maintainer_nickname}
)
return models.SiteWatchByMaintainerModel(**data)
class PackagesAPI: class PackagesAPI:
def __init__(self): def __init__(self):
......
...@@ -45,6 +45,21 @@ class AllMaintainersModel(BaseModel): ...@@ -45,6 +45,21 @@ class AllMaintainersModel(BaseModel):
maintainers: List[AllMaintainersElementModel] maintainers: List[AllMaintainersElementModel]
class SiteWatchByMaintainerElementModel(BaseModel):
pkg_name: str
old_version: str
new_version: str
repology_name: str
url: str
date_update: str
class SiteWatchByMaintainerModel(BaseModel):
request_args: Dict[str, Any]
length: int
packages: List[SiteWatchByMaintainerElementModel]
class BugzillaInfoElementModel(BaseModel): class BugzillaInfoElementModel(BaseModel):
id: str id: str
status: str status: str
......
...@@ -4,5 +4,7 @@ menu_kb = ( ...@@ -4,5 +4,7 @@ menu_kb = (
Keyboard() Keyboard()
.add(Button("Профиль")) .add(Button("Профиль"))
.row() .row()
.add(Button("Отслеживание"))
.row()
.add(Button("Статистика")) .add(Button("Статистика"))
).get_markup() ).get_markup()
\ No newline at end of file
from telegrinder import Dispatch, Message
from telegrinder.rules import Command, 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
dp = Dispatch()
dp.message.auto_rules = IsUser()
@dp.message(Command("watch") | Text(["watch", "отслеживание"], ignore_case=True))
async def watch_handler(m: Message, user: User | None) -> None:
if user is None:
return
watch_data = await api.site.watch_by_maintainer(user.maintainer)
watch_message = "Отслеживание:\n\n"
for i, package in enumerate(watch_data.packages):
watch_message += f"{package.pkg_name}: {package.old_version} -> " + \
HTMLFormatter(
f"<a href='{package.url}'>{package.new_version}</a>") + "\n"
if i == 35:
break
await m.answer(watch_message)
from telegrinder import API, Telegrinder, Token from telegrinder import API, Telegrinder, Token
from telegrinder.modules import logger from telegrinder.modules import logger
from telegrinder.tools.formatting import HTMLFormatter
from config import config from config import config
from api import api from api import api
...@@ -8,7 +9,10 @@ from middlewares import UserMiddleware ...@@ -8,7 +9,10 @@ from middlewares import UserMiddleware
logger.set_level("INFO") logger.set_level("INFO")
bot = Telegrinder(API(token=Token(config.BOT_TOKEN))) tg_api = API(token=Token(config.BOT_TOKEN))
tg_api.default_params["parse_mode"] = HTMLFormatter.PARSE_MODE
bot = Telegrinder(tg_api)
bot.dispatch.load_from_dir("src/handlers") bot.dispatch.load_from_dir("src/handlers")
bot.on.message.register_middleware(UserMiddleware) bot.on.message.register_middleware(UserMiddleware)
......
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