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
ed2b2913
Verified
Commit
ed2b2913
authored
Mar 10, 2026
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bugs: add pagination with inline navigation buttons
parent
60b1f1fe
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
93 additions
and
5 deletions
+93
-5
bugs.py
src/data/keyboards/bugs.py
+29
-0
bugs.py
src/handlers/bugs.py
+64
-5
No files found.
src/data/keyboards/bugs.py
View file @
ed2b2913
from
telegrinder
import
InlineKeyboard
,
InlineButton
def
bugs_nav_kb
(
maintainer
:
str
,
offset
:
int
,
total
:
int
,
per_page
:
int
=
10
):
kb
=
InlineKeyboard
()
nav_buttons
=
[]
if
offset
>
0
:
nav_buttons
.
append
(
InlineButton
(
text
=
"← Назад"
,
callback_data
=
f
"bugs/{maintainer}/{offset - per_page}"
,
))
if
offset
+
per_page
<
total
:
nav_buttons
.
append
(
InlineButton
(
text
=
"Вперёд →"
,
callback_data
=
f
"bugs/{maintainer}/{offset + per_page}"
,
))
if
nav_buttons
:
for
btn
in
nav_buttons
:
kb
.
add
(
btn
)
kb
.
row
()
kb
.
add
(
InlineButton
(
"Полный список"
,
url
=
f
"https://packages.altlinux.org/ru/sisyphus/maintainers/{maintainer}/bugs"
,
))
return
kb
.
get_markup
()
def
bugs_more_kb
(
maintainer
:
str
):
kb
=
InlineKeyboard
()
kb
.
add
(
...
...
src/handlers/bugs.py
View file @
ed2b2913
from
telegrinder
import
Dispatch
,
Message
from
telegrinder.rules
import
Command
,
Argument
,
Text
,
IsPrivate
from
telegrinder
import
Dispatch
,
Message
,
CallbackQuery
from
telegrinder.rules
import
Command
,
Argument
,
Text
,
IsPrivate
,
CallbackDataMarkup
from
telegrinder.tools.formatting
import
HTMLFormatter
from
altrepo
import
altrepo
from
config
import
BUGS_URL
from
database.models
import
User
from
data.keyboards
import
bugs_keyboards
from
services.utils
import
_bold
,
resolve_maintainer
from
services.bugs
import
bugs
as
bugs_service
from
services.bugs
import
bugs
PER_PAGE
=
10
dp
=
Dispatch
()
async
def
fetch_unresolved_bugs
(
maintainer
:
str
):
bugs_data
=
await
altrepo
.
api
.
bug
.
bugzilla_by_maintainer
(
maintainer
)
if
not
bugs_data
:
return
[]
return
[
bug
for
bug
in
bugs_data
.
bugs
if
bug
.
status
not
in
[
"RESOLVED"
,
"CLOSED"
]]
def
format_bugs_page
(
bugs
,
offset
:
int
,
total
:
int
):
message
=
_bold
(
"Ошибки:
\n\n
"
)
for
bug
in
bugs
:
message
+=
HTMLFormatter
(
f
"<a href='{BUGS_URL}{bug.id}'>#{bug.id}</a>"
)
+
\
f
" | {bug.product} - {bug.component} | {bug.severity}
\n
"
message
+=
bug
.
summary
+
"
\n\n
"
message
+=
f
"Баги {offset + 1}–{offset + len(bugs)} из {total}"
return
message
@dp.message
(
Command
(
"bugs"
,
Argument
(
"maintainer"
,
optional
=
True
)))
@dp.message
(
Text
([
"bugs"
,
"ошибки"
],
ignore_case
=
True
),
IsPrivate
())
async
def
bugs_handler
(
m
:
Message
,
user
:
User
|
None
,
maintainer
:
str
|
None
=
None
)
->
None
:
await
bugs
(
user
,
m
.
chat_id
,
maintainer
resolved
=
await
resolve_maintainer
(
maintainer
,
user
,
m
.
chat_id
)
if
not
resolved
:
return
nickname
=
resolved
.
nickname
bugs
=
await
fetch_unresolved_bugs
(
nickname
)
if
not
bugs
:
await
m
.
answer
(
"Нет открытых багов."
)
return
total
=
len
(
bugs
)
page
=
bugs
[:
PER_PAGE
]
await
m
.
answer
(
format_bugs_page
(
page
,
0
,
total
),
reply_markup
=
bugs_keyboards
.
bugs_nav_kb
(
nickname
,
0
,
total
,
PER_PAGE
),
)
@dp.callback_query
(
CallbackDataMarkup
(
"bugs/<maintainer>/<offset:int>"
))
async
def
bugs_page_handler
(
cb
:
CallbackQuery
,
maintainer
:
str
,
offset
:
int
,
)
->
None
:
bugs
=
await
fetch_unresolved_bugs
(
maintainer
)
if
not
bugs
:
await
cb
.
answer
(
"Нет открытых багов."
)
return
total
=
len
(
bugs
)
page
=
bugs
[
offset
:
offset
+
PER_PAGE
]
await
cb
.
edit_text
(
format_bugs_page
(
page
,
offset
,
total
),
reply_markup
=
bugs_keyboards
.
bugs_nav_kb
(
maintainer
,
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