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
a9ada14f
Verified
Commit
a9ada14f
authored
Mar 10, 2026
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changelog: add /changelog command
parent
086002bc
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
117 additions
and
0 deletions
+117
-0
__init__.py
src/data/keyboards/__init__.py
+1
-0
changelog.py
src/data/keyboards/changelog.py
+25
-0
changelog.py
src/handlers/changelog.py
+91
-0
No files found.
src/data/keyboards/__init__.py
View file @
a9ada14f
...
...
@@ -7,3 +7,4 @@ from . import package as package_keyboards
from
.
import
profile
as
profile_keyboards
from
.
import
watch
as
watch_keyboards
from
.
import
bugs
as
bugs_keyboards
from
.
import
changelog
as
changelog_keyboards
src/data/keyboards/changelog.py
0 → 100644
View file @
a9ada14f
from
telegrinder
import
InlineKeyboard
,
InlineButton
def
changelog_nav_kb
(
pkghash
:
str
,
branch
:
str
,
offset
:
int
,
total
:
int
,
per_page
:
int
=
5
):
kb
=
InlineKeyboard
()
buttons
=
[]
if
offset
>
0
:
buttons
.
append
(
InlineButton
(
text
=
"← Назад"
,
callback_data
=
f
"changelog/{pkghash}/{branch}/{offset - per_page}"
,
))
if
offset
+
per_page
<
total
:
buttons
.
append
(
InlineButton
(
text
=
"Вперёд →"
,
callback_data
=
f
"changelog/{pkghash}/{branch}/{offset + per_page}"
,
))
if
buttons
:
for
btn
in
buttons
:
kb
.
add
(
btn
)
kb
.
row
()
return
kb
.
get_markup
()
if
buttons
else
None
src/handlers/changelog.py
0 → 100644
View file @
a9ada14f
from
telegrinder
import
Dispatch
,
Message
,
CallbackQuery
from
telegrinder.rules
import
Command
,
Argument
,
CallbackDataMarkup
from
altrepo
import
altrepo
from
altrepo.api.errors
import
DataNotFoundError
,
RequestValidationError
from
database.models
import
User
from
data.keyboards
import
changelog_keyboards
from
services.utils
import
_bold
PER_PAGE
=
5
dp
=
Dispatch
()
def
format_changelog_page
(
name
:
str
,
branch
:
str
,
changelog
,
offset
:
int
,
total
:
int
):
message
=
_bold
(
f
"Changelog: {name} ({branch})
\n\n
"
)
for
entry
in
changelog
:
date
=
entry
.
date
[:
10
]
message
+=
f
"{entry.evr} | {date} | {entry.nick}
\n
"
message
+=
f
"{entry.message}
\n\n
"
message
+=
f
"Записи {offset + 1}–{offset + len(changelog)} из {total}"
return
message
@dp.message
(
Command
(
"changelog"
,
Argument
(
"name"
,
optional
=
True
),
Argument
(
"branch"
,
optional
=
True
),
)
)
async
def
changelog_handler
(
m
:
Message
,
user
:
User
|
None
=
None
,
name
:
str
|
None
=
None
,
branch
:
str
|
None
=
None
,
)
->
None
:
if
name
is
None
:
await
m
.
answer
(
"Не указано имя пакета"
)
return
user_branch
=
user
.
default_branch
if
user
else
None
branch
=
branch
or
user_branch
or
"sisyphus"
try
:
pkghash
=
(
await
altrepo
.
api
.
site
.
pkghash_by_name
(
branch
,
name
))
.
pkghash
data
=
await
altrepo
.
api
.
site
.
package_changelog
(
pkghash
,
changelog_last
=
999
)
except
DataNotFoundError
:
await
m
.
answer
(
"Пакет не найден."
)
return
except
RequestValidationError
:
await
m
.
answer
(
"Ошибка обработки параметров."
)
return
if
not
data
.
changelog
:
await
m
.
answer
(
"Changelog пуст."
)
return
total
=
len
(
data
.
changelog
)
page
=
data
.
changelog
[:
PER_PAGE
]
await
m
.
answer
(
format_changelog_page
(
name
,
branch
,
page
,
0
,
total
),
reply_markup
=
changelog_keyboards
.
changelog_nav_kb
(
pkghash
,
branch
,
0
,
total
,
PER_PAGE
),
)
@dp.callback_query
(
CallbackDataMarkup
(
"changelog/<pkghash>/<branch>/<offset:int>"
))
async
def
changelog_page_handler
(
cb
:
CallbackQuery
,
pkghash
:
str
,
branch
:
str
,
offset
:
int
,
)
->
None
:
data
=
await
altrepo
.
api
.
site
.
package_changelog
(
pkghash
,
changelog_last
=
999
)
if
not
data
.
changelog
:
await
cb
.
answer
(
"Changelog пуст."
)
return
total
=
len
(
data
.
changelog
)
page
=
data
.
changelog
[
offset
:
offset
+
PER_PAGE
]
name_data
=
await
altrepo
.
api
.
site
.
package_nvr_by_hash
(
pkghash
)
name
=
name_data
.
name
await
cb
.
edit_text
(
format_changelog_page
(
name
,
branch
,
page
,
offset
,
total
),
reply_markup
=
changelog_keyboards
.
changelog_nav_kb
(
pkghash
,
branch
,
offset
,
total
,
PER_PAGE
),
)
await
cb
.
answer
()
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