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
c8ab6ff6
Verified
Commit
c8ab6ff6
authored
Jul 27, 2025
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
news.packages: update format
parent
f8199342
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
33 deletions
+35
-33
news.py
src/handlers/news.py
+10
-2
packages.py
src/services/news/packages.py
+25
-31
No files found.
src/handlers/news.py
View file @
c8ab6ff6
...
@@ -86,9 +86,17 @@ async def news_handler(
...
@@ -86,9 +86,17 @@ async def news_handler(
chat_id
=
m
.
from_user
.
id
,
text
=
"Перевод не удался :("
chat_id
=
m
.
from_user
.
id
,
text
=
"Перевод не удался :("
)
)
return
return
print
(
len
(
added
))
for
msg
in
added
:
await
m
.
ctx_api
.
send_message
(
chat_id
=
m
.
from_user
.
id
,
text
=
f
"{msg}"
)
await
m
.
ctx_api
.
send_message
(
await
m
.
ctx_api
.
send_message
(
chat_id
=
m
.
from_user
.
id
,
text
=
f
"{
added}{removed}{info_message
}"
chat_id
=
m
.
from_user
.
id
,
text
=
f
"{
removed
}"
)
)
for
msg
in
updated
:
for
msg
in
updated
:
await
m
.
ctx_api
.
send_message
(
chat_id
=
m
.
from_user
.
id
,
text
=
msg
)
await
m
.
ctx_api
.
send_message
(
chat_id
=
m
.
from_user
.
id
,
text
=
msg
)
await
m
.
ctx_api
.
send_message
(
chat_id
=
m
.
from_user
.
id
,
text
=
f
"{info_message}"
)
src/services/news/packages.py
View file @
c8ab6ff6
...
@@ -3,7 +3,7 @@ from telegrinder.tools.formatting import HTMLFormatter, link, bold
...
@@ -3,7 +3,7 @@ from telegrinder.tools.formatting import HTMLFormatter, link, bold
import
random
import
random
from
collections
import
defaultdict
from
collections
import
defaultdict
from
altrepo.parser.models
import
PackagesModel
,
PackageElementModel
,
RemovedPackageElementModel
from
altrepo.parser.models
import
PackagesModel
,
RemovedPackageElementModel
from
config
import
PACKAGES_URL
from
config
import
PACKAGES_URL
from
services.utils
import
translate_package
,
translate_maintainer
,
chunk_list
from
services.utils
import
translate_package
,
translate_maintainer
,
chunk_list
...
@@ -12,25 +12,20 @@ from services.utils import translate_package, translate_maintainer, chunk_list
...
@@ -12,25 +12,20 @@ from services.utils import translate_package, translate_maintainer, chunk_list
repo
=
PACKAGES_URL
.
format
(
repo
=
"sisyphus"
)
repo
=
PACKAGES_URL
.
format
(
repo
=
"sisyphus"
)
async
def
format_packages
(
packages
:
PackagesModel
,
translate
:
bool
|
None
=
Non
e
):
async
def
format_packages
(
packages
:
PackagesModel
,
translate
:
bool
=
Fals
e
):
added_message
=
""
added_message
s
=
[]
removed_message
=
""
removed_message
=
""
updated_messages
=
[]
updated_messages
=
[]
if
packages
.
added
:
if
packages
.
added
:
added_message
+=
f
"Добавлены: {len(packages.added)}
\n
"
added_messages
=
await
_format_package_group
(
packages
,
translate
,
"added"
)
for
package
in
packages
.
added
:
added_message
+=
await
_format_package
(
package
,
translate
)
if
packages
.
removed
:
if
packages
.
removed
:
removed_message
+=
f
"Удалены: {len(packages.removed)}
\n
"
removed_message
=
await
_format_removed
(
packages
)
for
package
in
packages
.
removed
:
removed_message
+=
await
_format_removed_package
(
package
)
removed_message
+=
"
\n
"
if
packages
.
updated
:
if
packages
.
updated
:
updated_messages
=
await
_format_
updated_packages
(
packages
,
translate
)
updated_messages
=
await
_format_
package_group
(
packages
,
translate
,
"updated"
)
info_message
=
(
info_message
=
(
f
"Всего исходных пакетов: {packages.total}
\n\n
"
f
"Всего исходных пакетов: {packages.total}
\n\n
"
...
@@ -41,40 +36,39 @@ async def format_packages(packages: PackagesModel, translate: bool | None = None
...
@@ -41,40 +36,39 @@ async def format_packages(packages: PackagesModel, translate: bool | None = None
HTMLFormatter
(
bold
(
link
(
"https://t.me/altlinux_packages_bot"
,
text
=
"ALT Packages Bot"
)))
HTMLFormatter
(
bold
(
link
(
"https://t.me/altlinux_packages_bot"
,
text
=
"ALT Packages Bot"
)))
)
)
return
added_message
,
removed_message
,
updated_messages
,
info_message
return
added_message
s
,
removed_message
,
updated_messages
,
info_message
async
def
_format_package
(
package
:
PackageElementModel
,
translate
:
bool
):
async
def
_format_removed
(
packages_model
:
PackagesModel
)
->
str
:
message
=
HTMLFormatter
(
removed
=
packages_model
.
removed
bold
(
link
(
f
"{repo}srpms/{package.name}"
,
text
=
package
.
name
))
lines
=
[
f
"Удалены: {len(removed)}"
]
)
+
f
" - {(await translate_package(package.name, package.description)) if translate else package.description}
\n
"
for
pkg
in
removed
:
message
+=
f
"{(await translate_maintainer(package.maintainer_nick)) if translate else package.maintainer_name} ({package.maintainer_nick})
\n\n
"
pkg_link
=
link
(
f
"{repo}srpms/{pkg.name}"
,
text
=
pkg
.
name
)
lines
.
append
(
HTMLFormatter
(
bold
(
pkg_link
)))
return
"
\n
"
.
join
(
lines
)
+
"
\n
"
return
message
async
def
_format_package_group
(
packages_model
:
PackagesModel
,
translate
:
bool
,
pkg_type
:
str
):
async
def
_format_removed_package
(
package
:
RemovedPackageElementModel
):
pkg_types
=
{
"added"
:
(
packages_model
.
added
or
[],
"Добавлено"
),
"updated"
:
(
packages_model
.
updated
or
[],
"Обновлено"
),
}
message
=
HTMLFormatter
(
_pkgs
,
title
=
pkg_types
.
get
(
pkg_type
,
([],
""
))
bold
(
link
(
f
"{repo}srpms/{package.name}"
,
text
=
package
.
name
)))
+
"
\n
"
total
=
len
(
_pkgs
)
return
message
async
def
_format_updated_packages
(
packages_model
:
PackagesModel
,
translate
:
bool
):
updated
=
packages_model
.
updated
or
[]
total_updated
=
len
(
updated
)
grouped
=
defaultdict
(
list
)
grouped
=
defaultdict
(
list
)
for
pkg
in
updated
:
for
pkg
in
_pkgs
:
grouped
[(
pkg
.
maintainer_nick
,
pkg
.
maintainer_name
)]
.
append
(
pkg
)
grouped
[(
pkg
.
maintainer_nick
,
pkg
.
maintainer_name
)]
.
append
(
pkg
)
sorted_groups
=
sorted
(
grouped
.
items
(),
key
=
lambda
x
:
x
[
0
][
0
])
sorted_groups
=
sorted
(
grouped
.
items
(),
key
=
lambda
x
:
x
[
0
][
0
])
result_pages
=
[]
result_pages
=
[]
for
chunk
in
chunk_list
(
sorted_groups
,
8
):
for
chunk
in
chunk_list
(
sorted_groups
,
8
):
lines
=
[
f
"
Обновлено {total_updated
} пакетов, в том числе:"
]
lines
=
[
f
"
{title} {total
} пакетов, в том числе:"
]
for
(
nick
,
name
),
pkgs
in
chunk
:
for
(
nick
,
name
),
maintainer_
pkgs
in
chunk
:
selected_pkgs
=
random
.
sample
(
pkgs
,
min
(
8
,
len
(
pkgs
)))
selected_pkgs
=
random
.
sample
(
maintainer_pkgs
,
min
(
15
,
len
(
maintainer_
pkgs
)))
maintainer_display
=
(
maintainer_display
=
(
await
translate_maintainer
(
nick
)
if
translate
else
name
await
translate_maintainer
(
nick
)
if
translate
else
name
...
...
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