Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
altlinux-packages-bot
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Unitsaev
altlinux-packages-bot
Commits
5841ec8f
Verified
Commit
5841ec8f
authored
Mar 10, 2026
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
news: add /top command for most active maintainers
parent
a333db40
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
42 additions
and
0 deletions
+42
-0
news.py
src/handlers/news.py
+42
-0
No files found.
src/handlers/news.py
View file @
5841ec8f
...
...
@@ -210,3 +210,45 @@ async def pulse_handler(m: Message, days: int | None = None) -> None:
message
+=
f
"* статистика за {date_range}"
await
m
.
answer
(
message
)
@dp.message
(
Command
(
"top"
,
Argument
(
"days"
,
[
int_validator
],
optional
=
True
))
)
async
def
top_handler
(
m
:
Message
,
days
:
int
|
None
=
None
)
->
None
:
days
=
days
or
7
if
days
<
1
or
days
>
180
:
await
m
.
answer
(
"Допустимый диапазон: 1–180 дней."
)
return
d_to
=
datetime
.
now
()
.
date
()
d_from
=
d_to
-
timedelta
(
days
=
days
-
1
)
await
m
.
answer
(
f
"Сбор статистики за {days} дн..."
)
packages_data
=
await
altrepo
.
parser
.
news
.
packages_by_range
(
d_from
,
d_to
)
if
not
packages_data
:
await
m
.
answer
(
"Нет данных за этот период."
)
return
from
collections
import
Counter
counter
=
Counter
()
for
pkg
in
(
packages_data
.
added
or
[]):
counter
[
pkg
.
maintainer_nick
]
+=
1
for
pkg
in
(
packages_data
.
updated
or
[]):
counter
[
pkg
.
maintainer_nick
]
+=
1
if
not
counter
:
await
m
.
answer
(
"Нет данных по мейнтейнерам."
)
return
top
=
counter
.
most_common
(
10
)
message
=
_bold
(
"Топ мейнтейнеров
\n\n
"
)
for
i
,
(
nick
,
count
)
in
enumerate
(
top
,
1
):
message
+=
f
"{i}. {nick} — {count}
\n
"
date_range
=
f
"{d_from.strftime('
%
d.
%
m.
%
Y')} — {d_to.strftime('
%
d.
%
m.
%
Y')}"
message
+=
f
"
\n
* добавлено + обновлено за {date_range}"
await
m
.
answer
(
message
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment